Active Record + SQLite3
ロイディのデータ保存にSQLiteを使えないかなぁと思って、Active Record*1 + SQLite3を試してみました。
導入が面倒になるのは避けたいので、今までロイディはRDB(MySQLとか)を使ってなかったんですが、SQLiteならデーモン不要でRubyの拡張ライブラリ+DLLだけで動かせるので、今使ってるGDBMと手間はそう変わりません。
必要なものはactiverecord、activesupport、sqlite3-ruby、sqlitedll-3(Windowsの場合)。
Active Recordを単体で使う場合は、最初に
ActiveRecord::Base.establish_connection( :adapter => "sqlite3", :dbfile => "test.db")
とか書けばいいみたいです。
試しに
create table sentences ( id integer primary key autoincrement, body brob );
という単純なテーブル*2にひたすらinsertする実験。
最初1行のinsertに0.2秒ぐらいかかって、おせーと思って調べたら、一連のinsertを1つのトランザクションに入れれば速くなるとの情報。やってみると手元のロイディのログ約35万行(13.3MB)のinsertに13分*3。DBファイルサイズは16.5MB。
でも同じことをGDBMでやると90秒で終わるんですよねー(ファイルサイズは28.0MB)。今までどおりGDBMとテキストファイルを適当に組み合わせる方がいいのかな…。
*1:Ruby on RailsのORマッパ。古い日記の2/16の記事参照。単体でも使える。
*2:TEXT型はUnicodeらしいのでここではBROB(バイト列?)型を使用。
*3:Ruby 1.8.2 mswin32、Windows 2000、Pentium M 1.2GHz。