TokyoTyrant を ActiveRecord 風のAPIで利用するライブラリ
インストール
shell>>
% gem install miyazakiresistance
<<--
セットアップ
適当なポートで TT を起動。(テーブルデータベースを利用するので *.tct)
shell>>
% ttserver -port 11114 services.tct &
<<--
使用例
ruby>>
require 'rubygems'
require 'miyazakiresistance'
class Service < MiyazakiResistance::Base
set_server "localhost", 11114, :write
set_timeout 1
set_column :name , :string
set_column :port , :integer
set_column :proto, :string
end
buf = File.read("/etc/services")
buf.scan(%r{^(\w+)\s+(\d+)/(udp|tcp)}) {
Service.create(:name=>$1, :port=>$2, :proto=>$3)
}
Service.count
=> 373
Service.first
=> #<Service:... @id=1, @port=1, @proto="tcp", @name="tcpmux">
Service.find_all_by_port(80)
=> [#<Service:... @id=40, @port=80, @proto="tcp", @name="www">,
#<Service:... @id=41, @port=80, @proto="udp", @name="www">]
<<--
- データ型は :string, :integer, :date, :datetime
- master/slave, dual master をサポート
- ARのdynamic finderもサポート
- (created|updated)_(on|at) は magic column
- TTへの保存キーは id の値 (数字の連番が自動付与)
欠点
- スキーマを途中で変更するとエラー (DB内は同じスキーマのデータが必要)
- 1モデル毎にTTサーバが1つ必要になる?
- :date, :datetime を空にできない (Time.at(0) になる)
- "set_" prefix が冗長
という実装を見る限り、想定されたユースケースは、
- 任意のドキュメントを格納
ではなく、
- 固定されたスキーマ定義によってTTをRDB的に利用
のようだ。
ARもASも必要としないので、「TTを手軽に便利にCRUDしたい」
という用途にはピッタリだろう。