• 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
Contents
[NoSQL] MiyazakiResistance (TokyoTyrantのORM) の使い方
Comments
maiha: 追記)対応は約1営業日でした。チームの忙しさに応じて変動するとは思いますが、大体の目安情報とい... '10-4
maiha: なるほど。rails のログから実行したクエリを抜き出したいと思うことがよくありまして。 あ... '10-3
winebarrel: レポートありがとうございます。 削除できない件は修正しました。 SQLのparserはTC/... '10-2
maiha: なるほど。ありがとうございます! '10-2
ursm: Haml 2.2 以降はどこでも式展開が使えるようになったので、== は意味がなくなりました。... '10-2
Services from s21g
twpro(ツイプロ)
Twitterプロフィールを快適検索
地価2009
土地の値段を調べてみよう
MyRestaurant
自分だけのレストラン手帳
Formula
ブログに数式を埋め込める数式コミュニティ