#!/usr/bin/perl -w use strict; use Benchmark qw(:all); use BerkeleyDB; my $file_dir = '/home/perrin/filetest'; my $db_dir = '/home/perrin/dbdir'; my $db_file = '/home/perrin/dbtest'; my %db; my $env = new BerkeleyDB::Env( -Home => $db_dir, -Flags => DB_INIT_CDB | DB_CREATE | DB_INIT_MPOOL ) or die "can't create BerkelyDB::Env: $!"; my $db_obj = tie %db, 'BerkeleyDB::Btree', -Filename => $db_file, -Flags => DB_CREATE, -Mode => 0666, -Env => $env or die $!; sub read_file { my $key = shift; my $file = "$file_dir/$key"; open(FH, '<', $file) or die $!; local $/; my $value = ; close FH; return $value; } sub write_file { my ($key, $value) = @_; my $file = "$file_dir/$key"; open(FH, '>', $file) or die $!; print FH $value; close FH; } cmpthese(10, { 'file write' => sub { for (0..1000) { write_file($_, $_ x 8000); } }, 'berkeley write' => sub { for (0..1000) { $db_obj->STORE($_, $_ x 8000); } }, }); cmpthese(10, { 'file read' => sub { for (0..1000) { read_file($_); } }, 'berkeley read' => sub { for (0..1000) { $db_obj->FETCH($_); } }, });