• 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

redis とは

インストール

   1  % gem install ohm

セットアップ

   1  require 'ohm'
   2  Ohm.connect(:port=>6379)

モデル

   1  class Video < Ohm::Model
   2    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-Hash ではなく、純粋に redis の KVS 用 API として利用する場合。

   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 Png maiha on Mon 22 Feb 2010 at 07:40

Comments:

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