Ohm & Redis: ¿Cuándo usar Set, List o Collection?
-
23-10-2019 - |
Pregunta
¿Cuál es la diferencia entre una colección y un conjunto o lista cuando se usa Ohm & Redis?
Varios de los ejemplos de ohmios usan una lista en lugar de una colección (ver el enumere el documento mismo):
class Post < Ohm::Model
list :comments, Comment
end
class Comment < Ohm::Model
end
¿Cuál es la justificación de esta opción de diseño?
Solución
Lista - Pedido lista de elementos. Cuando solicita la lista completa, obtiene los elementos ordenados la forma en que los coloca en la lista.
Colección - desordenado recopilación de elementos. Cuando solicita la colección, los artículos pueden aparecer en orden aleatorio (por ejemplo, desordenado). **
En su ejemplo, se ordenan comentarios.
** Sé que el aleatorio no es lo mismo que desordenado, pero ilustra el punto.
Otros consejos
Solo para expandir la respuesta de Ariejan.
Lista - ordenada. Similar a una matriz en Ruby. Utilizado para colas y mantener artículos ordenados.
Establecer: una lista desordenada. Eso comportamiento Similar a una matriz en Ruby pero está optimizado para búsquedas más rápidas.
Colección: se usa junto con referencia, proporciona una forma simple de representar asociaciones.
En esencia, las colecciones y las referencias son métodos de conveniencia para tratar las asociaciones. Así que esto:
class Post < Ohm::Model
attribute :title
attribute :body
collection :comments, Comment
end
class Comment < Ohm::Model
attribute :body
reference :post, Post
end
es un atajo para lo siguiente:
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
Para responder a su pregunta original sobre la justificación de la elección de diseño, se introdujeron colecciones y referencias para proporcionar una API simple para representar las asociaciones.