Tokyo Tyrant おおいしつかさ
Web サイトとは
“ データを処理してユーザに提供する、データへのインターフェースである”
データ 重要
Web アプリでの データの取り扱い RDBMS ■ 基本 ■ 頻繁な更新があると大変 ■ mixi の最終ログイン時刻の  更新は 10000qps! メモリ ■ 高速 ■ マシンが落ちたらデータも  消える
Tokyo Cabinet ■ Key-value ストレージ  ・ハッシュ  ・ B+ 木  ・固定長  ・テーブル ■ 高速  ・ memcached の半分ほど ■ 永続性  ・ファイル DB
Tokyo Tyrant ■ Tokyo Cabinet を複数プロセス、またリモート環境から使えるよ ■ レプリケーションが使えるよ ■ デュアルマスタも OK だよ ■ 10000 コネクションだってさばけるよ
使いどころ ■ 頻繁に更新されるデータの管理 ■ memcached では保持できない大きなデータの管理 ■ 最新データの管理
なんでも Tokyo Tyrant を使えばいいわけじゃない
■ key-value ストレージだし ■ テーブル DB のクエリはシンプル   ・ join はできない   ・検索条件はすべて AND の    絞り込み   ・ index は最初のひとつだけ それ、 RDBMS でできるよ
使ってみる
■ テーブル DB ■ レストランのアクセスカウント   restaurant_id => [:count, :date] ■ レストラン ID 「 100 」の店舗の昨日のアクセスカウントを取得する
rdb = TokyoTyrant::RDBTBL.new rdb.open(“localhost”, 1975) query = TokyoTyrant::RDBQRY.new(rdb) query.addcond(“”, TokyoTyrant::TDBQRY::QCNUMEQ, 100) query.addcond(“date”, TokyoTyrant::TDBQRY::QCNUMEQ, Date.new(2009,3,26).to_time.to_i) yesterday_count = query.search
メンドくさい ...orz
AR ライクなクラスを作ってみた
MiyazakiResistance なんで? Cabinet ->  内閣 Tyrant ->  傀儡
クラスの定義 require 'miyazakiresistance' Class RestaurantCount < MiyazakiResistance::Base set_server “localhost”, 1975, :write set_timeout 60 set_column :count, :integer set_column :date, :date, :index end
アクセスカウントの取得 yesterday_count =  RestaurantCount.find(:first, :condition => [“id = ? date = ?”, 100, Date.new(2009,3,26)])
 簡単 !
sudo gem install tsukasaoishi-miyazakiresistance
おしまい

Tokyotyrantについて