monthly gimite

試験運用中。

Active Record + SQLite3

ロイディのデータ保存にSQLiteを使えないかなぁと思って、Active Record*1 + SQLite3を試してみました。

導入が面倒になるのは避けたいので、今までロイディRDBMySQLとか)を使ってなかったんですが、SQLiteならデーモン不要でRubyの拡張ライブラリ+DLLだけで動かせるので、今使ってるGDBMと手間はそう変わりません。

必要なものはactiverecordactivesupportsqlite3-rubysqlitedll-3Windowsの場合)。

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 2000Pentium M 1.2GHz。