2011-01-24 5 views
5

オム& Redisを使用している場合、コレクションとセットまたはリストの違いは何ですか?オーム&レディス:セット、リスト、コレクションをいつ使用しますか?

オーム例のいくつかは(list doc itselfを参照)のリストではなく、コレクションを使用します。

class Post < Ohm::Model 
    list :comments, Comment 
end 

class Comment < Ohm::Model 
end 

この設計上の選択の根拠は何ですか?

答えて

5

リスト - 注文リストの要素。リスト全体をリクエストすると、リスト内のアイテムの順序に従ってアイテムが取得されます。

コレクション - 順序付けなしコレクションの要素。コレクションをリクエストすると、アイテムはランダムな順序で表示されることがあります(例:順序付けなし)。**

あなたの例では、コメントが発注されています。

**私はランダムが順序付けされていないものと同じではないことを知っていますが、その点を説明しています。

+0

セットはどうですか? –

14

ちょうどAriejanの答えを拡張してください。

  • リストの順序です。 Rubyの配列に似ています。キューとアイテムの順序を保持するために使用されます。

  • セット - 順序付けられていないリスト。 は、RubyのArrayに似ていますが、高速検索のために最適化されています。が動作します。

  • コレクション - 参照と組み合わせて使用​​すると、関連付けを表す簡単な方法が提供されます。

本質的に、コレクションと参照は、関連付けを扱う便利なメソッドです。だから、この:

class Post < Ohm::Model 
    attribute :title 
    attribute :body 
    collection :comments, Comment 
end 

class Comment < Ohm::Model 
    attribute :body 
    reference :post, Post 
end 

は、以下のショートカットです:

class Post < Ohm::Model 
    attribute :title 
    attribute :body 

    def comments 
    Comment.find(:post_id => self.id) 
    end 
end 

class Comment < Ohm::Model 
    attribute :body 
    attribute :post_id 
    index :post_id 

    def post=(post) 
    self.post_id = post.id 
    end 

    def post 
    Post[post_id] 
    end 
end 

あなたの設計上の選択の根拠について、元の質問に答えるために - コレクションと参照は関連を表現するためのシンプルなAPIを提供するために導入されました。