• 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

TokyoTyrant を ActiveRecord 風のAPIで利用するライブラリ

インストール

   1  % gem install miyazakiresistance

セットアップ

適当なポートで TT を起動。(テーブルデータベースを利用するので *.tct)

   1  % ttserver -port 11114 services.tct &

使用例

   1  require 'rubygems'
   2  require 'miyazakiresistance'
   3  
   4  class Service < MiyazakiResistance::Base
   5    set_server "localhost", 11114, :write
   6    set_timeout 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/services")
  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_by_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/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したい」 という用途にはピッタリだろう。

参考

posted by Png maiha on Thu 25 Feb 2010 at 08:43

Comments:

or Preview
Social Bookmarks
  • Delicious
  • B_entry1722
  • Clip_16_12_w
Services from s21g
twpro(ツイプロ)
Twitterプロフィールを快適検索
地価2009
土地の値段を調べてみよう
MyRestaurant
自分だけのレストラン手帳
Formula
ブログに数式を埋め込める数式コミュニティ