Ohm et Redis: quand utiliser ensemble, liste ou d'une collection?
-
23-10-2019 - |
Question
Quelle est la différence entre une collection et un ensemble ou une liste lors de l'utilisation Ohm & Redis?
Plusieurs des exemples Ohm utilisent une liste plutôt que d'une collection (voir la liste document lui-même ):
class Post < Ohm::Model
list :comments, Comment
end
class Comment < Ohm::Model
end
Quelle est la raison de ce choix de conception?
La solution
Liste - liste ordonnée d'éléments. Lorsque vous demandez la liste complète, vous obtenez les articles commandés la façon dont vous les mettez dans la liste.
Collection - non ordonnée collection d'éléments. Lorsque vous demandez la collection, les articles peuvent apparaître dans un ordre aléatoire (par exemple non ordonnée). **
Dans votre exemple, les commentaires sont commandés.
** Je sais que aléatoire n'est pas la même chose que non ordonnée, mais elle illustre bien le point.
Autres conseils
Juste pour développer la réponse de Ariejan.
-
Liste - ordonnée. Similaire à un tableau en Ruby. Utilisé pour les files d'attente et des éléments de maintien commandés.
-
Set - une liste non ordonnée. Il se comporte similaire à un tableau en Ruby, mais est optimisé pour des recherches plus rapides.
-
Collection -. Utilisée conjointement avec référence , il fournit un moyen simple de représenter les associations
En substance, les collections et les références sont des méthodes pratiques pour faire face à des associations. Donc ceci:
class Post < Ohm::Model
attribute :title
attribute :body
collection :comments, Comment
end
class Comment < Ohm::Model
attribute :body
reference :post, Post
end
est un raccourci pour ce qui suit:
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
Pour vous répondre à la question initiale sur la raison du choix de conception -. Collections et références ont été introduites pour fournir une API simple pour représenter les associations