use strict; use warnings; use BerkeleyDB; use DB_File; use TokyoCabinet; use KyotoCabinet; unlink qw( /tmp/file.db /tmp/file.tch /tmp/file.kch ); unlink qw( /tmp/file.tct /tmp/file.kct ); # -- # my $ob = tie my %hash, 'BerkeleyDB::Hash', # -Filename => '/tmp/file.db', -Flags => DB_CREATE # or die "open error: $!"; # # my $ob = tie my %hash, 'BerkeleyDB::Btree', # -Filename => '/tmp/file.db', -Flags => DB_CREATE # or die "open error: $!"; # # my $ob = tie my %hash, 'DB_File', # '/tmp/file.db', O_RDWR|O_CREAT, 0644, $DB_HASH # or die "open error: $!"; # # my $ob = tie my %hash, 'DB_File', # '/tmp/file.db', O_RDWR|O_CREAT, 0644, $DB_BTREE # or die "open error: $!"; # # my $ob = tie my %hash, 'TokyoCabinet::HDB', '/tmp/file.tch', # TokyoCabinet::HDB::OWRITER | TokyoCabinet::HDB::OCREAT # or die "open error: $!"; # # my $ob = tie my %hash, 'TokyoCabinet::BDB', '/tmp/file.tcb', # TokyoCabinet::BDB::OWRITER | TokyoCabinet::BDB::OCREAT # or die "open error: $!"; # # my $ob = tie my %hash, 'KyotoCabinet::DB', '/tmp/file.kch', # KyotoCabinet::DB::OWRITER | KyotoCabinet::DB::OCREATE # or die "open error: $!"; # my $ob = tie my %hash, 'KyotoCabinet::DB', '/tmp/file.kct', KyotoCabinet::DB::OWRITER | KyotoCabinet::DB::OCREATE or die "open error: $!"; # -- # Tie interface : 23.875 seconds, 793 MiB - BerkeleyDB::Btree # 19.812 seconds, 793 MiB - DB_File $DB_BTREE # 19.208 seconds, 353 MiB - TokyoCabinet *.tcb # 17.232 seconds, 306 MiB - KyotoCabinet *.kct # # for ( 1 .. 10e6 ) { # $hash{$_} = "$_ some string..."; # } # # OO interface : 82.573 seconds, 639 MiB - BerkeleyDB::Hash # 73.383 seconds, 639 MiB - DB_File $DB_HASH # 87.695 seconds, 458 MiB - TokyoCabinet *.tch # 38.312 seconds, 464 MiB - KyotoCabinet *.kch # # 19.899 seconds, 793 MiB - BerkeleyDB::Btree # 14.340 seconds, 793 MiB - DB_File $DB_BTREE # 14.763 seconds, 353 MiB - TokyoCabinet *.tcb # 10.970 seconds, 306 MiB - KyotoCabinet *.kct # for ( 1 .. 10e6 ) { $ob->STORE($_ => "$_ some string..."); }