Hi. Again.
 I did benchmark using BerkeleyDB (Hash) module (random select) and the number 
I got was around 10,000 / sec. 
I also did similar benchmark using DBD::DBM (with BerkeleyDB Hash support).  
But this time, the number was too low. (less than 200 /sec).

I moved "prepare" outside loop, so DBD::DBM (BerkeleyDB) works almost twice 
faster (100 -> 200 /sec) but compare to BerkeleyDB, it is still slower.
Since DBD::DBM is now using BerkeleyDB, shouldn't it perform as well as 
BerkeleyDB ?? (or at least not as bad as what I got?)


Here are source codes that I used.
Thanks a lot!

####################################################
# BerkeleyDB
####################################################
use strict;
use BerkeleyDB;
use mkUtil;
my $Env = BerkeleyDB::Env->new(
        -Home => '/home/mhan/DB_bench/berkeley/db',
        -Flags => 
DB_INIT_MPOOL|DB_INIT_LOCK|DB_INIT_LOG|DB_INIT_TXN|DB_CREATE|DB_RECOVER,
        -LockDetect => DB_LOCK_YOUNGEST,
        -ErrFile => '/home/mhan/DB_bench/berkeley/db/berkeley_error.log',
) or die "Failed to Open: $!\n";

my $time = 10;
my (%berkeleyInt, %berkeleyChar);

tie %berkeleyInt, 'BerkeleyDB::Hash',
        -Env            => $Env,
        -Filename       => "berkeleyHashInt.db",
        -Flags          => DB_CREATE,
or die "Cannot open 'berkeleyHashInt.db':$!\n";

my $count = 0;
my $startTime = mkUtil::printTime("BerkeleyDB::Hash:: Integer Select Start");
my $endTime = mkUtil::getTime();
while($endTime - $startTime <$time){
        my %r = mkUtil::strRand();
        my $rInt = $r{'integer'};
        my $temp = $berkeleyInt{$rInt};
#       print "$rInt - $berkeleyInt{$rInt}\n";
        $endTime = mkUtil::getTime();
        $count++;
}
$endTime = mkUtil::printTime("BerkeleyDB::Hash:: Integer Select End");
print "Count: $count\n";
mkUtil::printAVG($count, $time, "BerkeleyDB::Hash:: Integer Select AVG (sec)");
####################################################
# DBD::DBM - BerkeleyDB support
####################################################
use DBI;
use mkUtil;
use BerkeleyDB;
my $dbh = DBI->connect('dbi:DBM:type=BerkeleyDB');

$dbh->{RaiseError} = 1;
$dbh->{dbm_berkeley_flags} = {
        'DB_CREATE'  => DB_CREATE  # pass in constants
        , 'DB_RDONLY'  => DB_RDONLY  # pass in constants
};

my $time = 10;

my $count =  0;
my $startTime = mkUtil::printTime("DBD::DBM:: Integer Select Start");
my $endTime = mkUtil::getTime();
my $sth = $dbh->prepare("SELECT * FROM dbmBerkeleyInt WHERE id = ?");
while($endTime - $startTime < $time){
        my %r = mkUtil::strRand();
        my $rInt = $r{'integer'};
        $sth->execute($rInt);
        while( my $row = $sth->fetch){
#               print "@$row\n";
#               sleep(1);
        }
        $endTime = mkUtil::getTime();
        $count++;
}
$endTime = mkUtil::printTime("DBD::DBM:: Integer Select End");
print "COUNT: $count\n";
mkUtil::printAVG($count, $time, "DBD::DBM:: Integer Select AVG (sec)");

Reply via email to