MongoDB-Async
view release on metacpan or search on metacpan
threading_stress_test.pl view on Meta::CPAN
use MongoDB::Async;
my $dba = MongoDB::Async::Connection->new({"host" => "mongodb://127.0.0.1"})->test->test;
my $doc = {
"somename1" => "somedatasomedatasomedatasomedatasomedata",
"somename2" => "somedatasomedatasomedatasomedatasomedata",
"somename3" => "somedatasomedatasomedatasomedatasomedata",
"somename4" => "somedatasomedatasomedatasomedatasomedata",
"somename5" => "somedatasomedatasomedatasomedatasomedata",
array => [
"somedatasomedatasomedatasomedatasomedata",
"somedatasomedatasomedatasomedatasomedata",
"somedatasomedatasomedatasomedatasomedata",
"somedatasomedatasomedatasomedatasomedata",
"somedatasomedatasomedatasomedatasomedata",
{}
],
hash => {
"somename1" => "somedatasomedatasomedatasomedatasomedata",
"somename2" => "somedatasomedatasomedatasomedatasomedata",
"somename3" => "somedatasomedatasomedatasomedatasomedata",
"somename4" => "somedatasomedatasomedatasomedatasomedata",
"somename5" => "somedatasomedatasomedatasomedatasomedata",
},
undf => undef,
_id => 0
};
$dba->drop();
my $numofdoc = 5000;
for(0...$numofdoc){
$dba->save($doc); $doc->{_id}++;
}
$|=1;
my $reads = 0;
my $writes = 0;
# async {
# while(1){
# Coro::AnyEvent::sleep 1;
# }
# };
new_threads() for 1...1000;
sub new_threads {
print "$reads reads and $writes writes\r";
async {
my $db = MongoDB::Async::Connection->new({"host" => "mongodb://127.0.0.1"});
while(1){
$doc->{_id} = int rand($numofdoc);
$db->get_database('test')->get_collection( 'test' )->save($doc, {safe => 1 }); # safe switches coroutines
$writes++;
print "$reads reads and $writes writes. Ready coros: ".Coro::nready."\r";
$db->get_database('test')->get_collection( 'test' )->find({})->all;
$reads++;
print "$reads reads and $writes writes. Ready coros: ".Coro::nready."\r";
# Coro::AnyEvent::sleep 0.01;
}
};
}
EV::loop;
( run in 1.548 second using v1.01-cache-2.11-cpan-39bf76dae61 )