OHM & Redis: Wann kann Set, Liste oder Sammlung verwendet werden?
-
23-10-2019 - |
Frage
Was ist der Unterschied zwischen einer Sammlung und einem Satz oder einer Liste bei der Verwendung von Ohm & Redis?
Einige der Ohm -Beispiele verwenden eine Liste und nicht eine Sammlung (siehe die Listen Sie doc selbst auf):
class Post < Ohm::Model
list :comments, Comment
end
class Comment < Ohm::Model
end
Was ist die Begründung für diese Designauswahl?
Lösung
Liste - bestellt aufführen von Elementen. Wenn Sie die gesamte Liste anfordern, erhalten Sie die Art und Weise, wie Sie sie in die Liste einfügen.
Sammlung - ungeordnet Sammlung von Elementen. Wenn Sie die Sammlung anfordern, können Elemente in zufälliger Reihenfolge angezeigt werden (z. B. ungeordnet). **
In Ihrem Beispiel werden Kommentare bestellt.
** Ich weiß, dass zufällig nicht dasselbe ist wie ungeordnet, aber es zeigt den Punkt.
Andere Tipps
Nur um Ariejans Antwort zu erweitern.
Liste - bestellt. Ähnlich wie ein Array in Ruby. Wird für Warteschlangen verwendet und Artikel bestellt.
SET - Eine ungeordnete Liste. Es verhält Ähnlich wie bei einem Array in Ruby, ist aber für schnellere Suchfrequenzen optimiert.
Sammlung - verwendet in Verbindung mit Hinweis, Es bietet eine einfache Möglichkeit, Assoziationen darzustellen.
Sammlungen und Referenzen sind im Wesentlichen Komfortmethoden für den Umgang mit Assoziationen. Also das:
class Post < Ohm::Model
attribute :title
attribute :body
collection :comments, Comment
end
class Comment < Ohm::Model
attribute :body
reference :post, Post
end
ist eine Abkürzung für Folgendes:
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
Um Ihre ursprüngliche Frage zur Begründung für die Designauswahl zu beantworten - wurden Sammlungen und Referenzen eingeführt, um eine einfache API für die Darstellung von Assoziationen bereitzustellen.