#!/usr/bin/perl
use strict;
use warnings;
use KiokuDB;
use KiokuDB::Backend::Hash;
$| = 1;
my $f = (require KiokuDB::Test::Fixture::Small)->new;
my $mxsd_hash = KiokuDB->new(
backend => KiokuDB::Backend::Hash->new,
);
my $q_employee = Search::GIN::Query::Class->new( class => "KiokuDB::Test::Employee" );
sub bench_write {
for ( 1 .. 20 ) {
my $t = times;
until ( times() - $t > 1 ) {
for ( 1 .. 10 ) {
my $s = $mxsd_hash->new_scope;
my @objs = $f->create, $f->create;
$mxsd_hash->store(@objs);
}
}
$mxsd_hash->backend->clear;
print ".";
print " " if $_ % 5 == 0;
}
print "done\n";
}
sub bench_read {
my @ids = do {
my $s = $mxsd_hash->new_scope;
$mxsd_hash->store($f->create, $f->create)
};
for ( 1 .. 20 ) {
my $t = times;
until ( times() - $t > 1 ) {
for ( 1 .. 250 ) {
my $s = $mxsd_hash->new_scope;
my @objs = $mxsd_hash->lookup(@ids);
}
}
print ".";
print " " if $_ % 5 == 0;
}
print "done\n";
}
sub bench_search {
use KiokuDB::GIN;
use KiokuDB;
use KiokuDB::Backend::Hash;
use Search::GIN::Query::Class;
use Search::GIN::Extract::Class;
{
package MyGIN;
use Moose;
extends qw(KiokuDB::Backend::Hash);
with (
qw(
KiokuDB::GIN
Search::GIN::Driver::Hash
Search::GIN::Extract::Delegate
),
);
__PACKAGE__->meta->make_immutable;
}
my $gin = MyGIN->new(
extract => Search::GIN::Extract::Class->new,
root_only => 0,
);
my $dir = KiokuDB->new(
backend => $gin,
);
for ( 1 .. 10 ) {
my $s = $dir->new_scope;
$dir->store($f->create);
}
my $q_employee = Search::GIN::Query::Class->new( class => "KiokuDB::Test::Employee" );
for ( 1 .. 20 ) {
my $t = times;
until ( times() - $t > 1 ) {
for ( 1 .. 10 ) {
my $s = $dir->new_scope;
$dir->search($q_employee);
}
}
print ".";
print " " if $_ % 5 == 0;
}
print "done\n";
}
#bench_read();
#bench_write();
bench_search();