TokyoTyran
インストール
1 % gem install miyazakiresistance
セットアップ
適当なポートで TT を起動。(テーブルデータベースを利用するので *.tct)
1 % ttserver -port 11114 services.tct &
使用例
1 require 'rubygems' 2 require 'miyazakiresistance' 3 4 class Service < MiyazakiRe sistance:: Base 5 set_server "localhost", 11114, :write 6 set_timeou t 1 7 8 set_column :name , :string 9 set_column :port , :integer 10 set_column :proto, :string 11 end 12 13 buf = File.read("/etc/servi ces") 14 buf.scan(%r{^(\w+)\s+(\d+)/(udp|tcp)}) { 15 Service.create(:name=>$1, :port=>$2, :proto=>$3) 16 } 17 18 Service.count 19 => 373 20 21 Service.first 22 => #<Service:.. . @id=1, @port=1, @proto="tcp", @name="tcpmux"> 23 24 Service.find_all_b y_port(80) 25 => [#<Service:.. . @id=40, @port=80, @proto="tcp", @name="www">, 26 #<Service:.. . @id=41, @port=80, @proto="udp", @name="www">]
- データ型は :string, :integer, :date, :datetime
- master/sla
ve, 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したい」 という用途にはピッタリだろう。
参考
posted by
maiha
on Thu 25 Feb 2010
at 08:43