#!/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, -Cachesize => 23152000, ) 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"; my $value; open(FH, '<', $file) or die $!; read FH, $value, (stat FH)[7]; close FH; return $value; } sub slurp_file { my $key = shift; my $file = "$file_dir/$key"; local $/; open(FH, '<', $file) or die $!; my $value = ; close FH; return $value; } sub sysread_file { my $key = shift; my $file = "$file_dir/$key"; my $value; open(FH, '<', $file) or die $!; sysread FH, $value, (stat FH)[7]; close FH; return $value; } sub print_file { my ($key, $value) = @_; my $file = "$file_dir/$key"; open(FH, '>', $file) or die $!; print FH $value; close FH; } sub write_file { my ($key, $value) = @_; my $file = "$file_dir/$key"; open(FH, '>', $file) or die $!; print FH $value; close FH; } sub syswrite_file { my ($key, $value) = @_; my $file = "$file_dir/$key"; open(FH, '>', $file) or die $!; print FH $value; close FH; } cmpthese(50, { 'file write' => sub { for (0..1000) { write_file($_, $_ x 8000); } }, 'berkeley write' => sub { for (0..1000) { $db_obj->db_put($_, $_ x 8000); } }, 'file print' => sub { for (0..1000) { print_file($_, $_ x 8000); } }, 'file syswrite' => sub { for (0..1000) { syswrite_file($_, $_ x 8000); } }, }); cmpthese(100, { 'file read' => sub { for (0..1000) { read_file($_); } }, 'file slurp' => sub { my $test; for (0..1000) { $test = slurp_file($_); } }, 'file sysread' => sub { my $test; for (0..1000) { $test = sysread_file($_); } }, 'berkeley read' => sub { my $v; for (0..1000) { $db_obj->db_get($_, $v); } }, });