|
2008/11/20 19:20
こんばんは。
サッカー日本代表が勝ちましたね。3−0。夜中起きていた甲斐があったってもんです。
個人的には玉田と田中がよかった。あの二人でこれからも行ってほしい。というか、日本の攻撃陣は小兵だけれど、すばやく延々と動くタイプがあってるんじゃないかと思いましたよ。この調子で来年もがんばってほしいなー。
さて、本題は、BDBの高速化してぇという話です。
BDBのa.dbに7000件エントリが入っています。
それに対して、O_RONLYとO_RDWRの差を調べてみる。
#!/usr/local/bin/perl
use DB_File;
use Benchmark;
my $bb = new DB_File::BTREEINFO;
timethese(
100, {
rdwr => \&rdwr,
rd => \&rd,
});
sub rdwr {
tie %db, 'DB_File', "a.fcd", O_RDWR | O_CREAT, 0640, $bb;
while (each %db) {}
untie %db;
}
sub rd {
tie %db, 'DB_File', "a.fcd", O_RDONLY, 0640, $bb;
while (each %db) {}
untie %db;
}
結果
$ perl o.pl
Benchmark: timing 100 iterations of rd, rdwr...
rd: 11 wallclock secs ( 9.04 usr + 1.93 sys = 10.97 CPU) @ 9.12/s (n=100)
rdwr: 15 wallclock secs (11.69 usr + 1.70 sys = 13.39 CPU) @ 7.47/s (n=100)
あら、思ったより差がついた感じ。
これはちょっと実装も考慮してやらんとイカンかもしれません。
でも、そんなにBDBをオープンしまくるような実装はそもそもイカンと思いますわ。
|