YamaKen
yamak****@bp*****
2005年 10月 3日 (月) 23:24:38 JST
ヤマケンです。 At Mon, 03 Oct 2005 22:55:48 +0900, yusuk****@w5***** wrote: > Yuichi Yoshida wrote: > >> Berkeley DBなどを使うのはどうでしょう。大抵のスクリプト言語は自身が > >>持つハッシュと同じインターフェースでBDBを扱えて、オンメモリでそのまま > >>ハッシュに持たせるよりはメモリ効率がよいようです。 > > > DBをインストールして使いかたを覚える手間を今まで惜しんできていたのですが、 > > そうも言ってられないかもしれないですね…。 > これ自体は極めて簡単で、rubyなら配布物の中のdbmtest.rbという > サンプルを見てもわかるのですが > : require 'dbm' > : d = DBM.open("test") > : d['読み'] = '単語' > こんな感じで普通のハッシュとして使うと、勝手にデータベースの > ファイルに保存してくれます。 > これに手元の25MぐらいあるCSVっぽいファイルを入れてみると、 > $ time ruby a.rb > real 10m47.432s > user 0m15.673s > sys 0m19.650s > $ ls -l test.db > -rw-rw-r-- 1 yusuke yusuke 13422184 Oct 3 22:43 test.db > というふうに富豪的にやってたら日が暮れそうな感じでした。 > (VMwareでディスクは遅いのですが、450MBほどのメモリは割り > 当ててあり、それほどダメな環境では無いと思います。) dbmは実装によって随分パフォーマンスに差があるので他のものも一応 試してみてはどうでしょう。qdbmが評判が良いようですね。 また、Berkeley DBのようなトランザクションベースのものではチュー ニングによってもだいぶ変わります。noatimeとかasync等のファイルシ ステム回りはすぐに試せるので、やってみて損は無いと思います。 ------------------------------- ヤマケン yamak****@bp*****