ファーストトライ
本体はportで入れた。(→ダメでした。後述)
$ port search tokyocabinet
tokyocabinet @1.4.5 (databases)
Tokyo Cabinet is a library of routines for managing a database.
$ port search tokyotyrant
tokyotyrant @1.1.14 (databases)
Tokyo Tyrant is the network interface for Tokyo Cabinet.
$ sudo port install tokyocabinet
$ sudo port install tokyotyrantRuby API/クライアントは現時点でオフィシャルなgemは配布されてないみたい。
# gem search --remote tokyocabinet *** REMOTE GEMS *** careo-tokyocabinet (1.21) # gem search --remote tokyotyrant *** REMOTE GEMS *** actsasflinn-ruby-tokyotyrant (0.1.5) careo-tokyotyrant (1.3.0.1)
ソースにgemspecが付いてたのでgemをbuildして入れた。
# wget http://tokyocabinet.sourceforge.net/rubypkg/tokyocabinet-ruby-1.23.tar.gz # tar xzf tokyocabinet-ruby-1.23.tar.gz # cd tokyocabinet-ruby-1.23 # gem build tokyocabinet.gemspec # gem install tokyocabinet-1.23.gem # wget http://tokyocabinet.sourceforge.net/tyrantrubypkg/tokyotyrant-ruby-1.5.tar.gz # tar xzf tokyotyrant-ruby-1.5.tar.gz # cd tokyotyrant-ruby-1.5 # gem build tokyotyrant.gemspec # gem install tokyotyrant-1.5.gem
これでは全然ダメだった。Ruby bindingsに対して、portで入れた本体が古すぎた。プロトコルのバージョンが変わっているせいか、Tokyo TyrantのRubyクライアントがまともに動かなかった。
やり直し
- [mixi] Tokyo Cabinetリリース報告 http://mixi.jp/view_bbs.pl?id=33580292&comm_id=3528783
port uninstallして、本体も最新版をソースから入れ直す。Tokyo Cabinet, Tokyo Tyrantとも普通に
# ./configure # make # make install
でインストールできるが、Tokyo Cabinetのmake installが終わった後じゃないとTokyo Tyrantはmakeできない。しばらく悩んだ。
Ruby bindingsは、
TC-rubyはRubyGemsのgemspecが同梱されているので、gemを作りたい人は作ってください。今のところ、二重管理が面倒なので、CPANやRubyForgeへのアップロードは予定していません。
http://mixi.jp/view_bbs.pl?id=33580292&comm_id=3528783
ということなので、上記のままで大丈夫。
実験
require 'rubygems'
require 'tokyotyrant'
(c = TokyoTyrant::RDBTBL.new).open('127.0.0.1', 1978)
c["a"] = {"aa" => "bb", "cc" => "dd" }
qry = TokyoTyrant::RDBQRY.new(c)
qry.addcond("aa", TokyoTyrant::RDBQRY::QCSTREQ, "bb")
p qry.searchcount
p qry.search
p qry.searchget
c.clear # データが全部消えるので要注意。
p qry.searchcount
p qry.search
p qry.searchget
c.closeportで入れた状態では、
- qry.searchcount が少ない値を返す。
- qry.searchget が正しい値を返さない。
- c.clear で止まってしまう。
みたいな状況で正しく動作していないことに気づいた。
ソースから入れ直して以下が出力されるようになった。たぶん正常。
1
["a"]
[{"aa"=>"bb", "cc"=>"dd", ""=>"a"}]
0
[]
[]