redis とは
- Cで書かれた超高速なKVS
- オンメモリなので超高速 (約10万件操作/秒 @Xeon 2.5Ghz)
- 定期的に自動保存する永続化機能 (memcached に対する利点)
- 文字列以外にも集合型を扱える (TokyoCabin
et に対する利点) - 公式 http://cod
e.google.c om/p/redis / - ベンチ http://cod
e.google.c om/p/redis /wiki/Benc hmarks
インストール
1 % gem install ohm
セットアップ
1 require 'ohm' 2 Ohm.connect(:port=>6379)
モデル
1 class Video < Ohm::Model2 attribute :url 3 attribute :created_at 4 set :tags 5 6 index :url # 検索対象には全てindexを作成する 7 index :tags # 検索対象には全てindexを作成する 8 end
- pkeyのidが勝手に定義される
- redisで利用可能なvalueの型は、文字列と集合
- Ohmでは文字列型を attribute で定義する
- Ohmでは集合型を set で定義する
- Ohmではさらに独自の list(順序付き集合), counter(増減のみ操作可能な数値) 型が利用可能
使用例
1 video = Video.new(:url=>"http://www.you...", :tags=>"愛理") 2 video.save 3 video.tags << "cute" 4 5 Video.find(:tags=>"cute") 6 => #<Index: ["1", "2"]> 7 8 Video.find(:tags=>"cute").last.tags 9 => #<Set: ["cute", "愛理"]>
低レベルAPI
Object-Has
1 Ohm.redis.get "Foo" # => nil 2 Ohm.redis.set "Foo", "xxx" # => "OK" 3 Ohm.redis.get "Foo" # => "xxx"
長所
- redisのKVS性能が高いので単純レコードへの参照・記録は超高速
- 集合型を持つのでタグの扱いなどが凄く便利
- スキーマレスでとっつきやすい
- 各操作がアトミックなのでロックがない
短所(redis)
- 文字列型のみ(数値や日付を入れても範囲検索できないので実用的ではない)
- 検索機能が貧弱 (文字列の完全一致のみ)
- データ保存が async
- もちろんトランザクション処理もなし
保存時間の間隔を設定できるとは言え、基本 async なのでクラッシュによるデータ損失の危険性が常にある。 その意味では、RDBのようなしっかりとしたデータストレージでなく、 前回の状態を(運が良ければ)そのまま再開してくれる memcached という認識(利用)がよさそう。
短所(Ohm)
- 予約語チェックがなく、id 属性を指定すると謎の挙動でハマる
- new record 時に集合型を参照するとエラー
など使い辛い
posted by
maiha
on Mon 22 Feb 2010
at 07:40