#! /usr/bin/perl use lib qw(./blib/lib ./blib/arch); use strict; use warnings; use TokyoCabinet; use Time::HiRes qw(gettimeofday); sub memoryusage { my $status = `cat /proc/$$/status`; my @lines = split("\n", $status); foreach my $line (@lines){ if($line =~ /^VmRSS:/){ $line =~ s/.*:\s*(\d+).*/$1/; return int($line) / 1024.0; } } return -1; } my $rnum = 1000000; if(scalar(@ARGV) > 0){ $rnum = int($ARGV[0]); } my $time = gettimeofday(); my $size = memoryusage(); if(scalar(@ARGV) > 1){ my $db = TokyoCabinet::ADB->new(); $db->open($ARGV[1] . "#bnum=" . $rnum . "#mode=wct#xmsiz=0") || die("open failed"); for(my $i = 0; $i < $rnum; $i++){ my $buf = sprintf("%08d", $i); $db->put($buf, $buf); } $time = gettimeofday() - $time; $size = memoryusage() - $size; $db->close(); } else { my %hash; for(my $i = 0; $i < $rnum; $i++){ my $buf = sprintf("%08d", $i); $hash{$buf} = $buf; } $time = gettimeofday() - $time; $size = memoryusage() - $size; } printf("Time: %.3f sec.\n", $time); printf("Size: %.3f MB\n", $size);