Ich versuche, das Äquivalent von Fremdschlüsseln und Indizes in NoSQL KVP- oder Dokumentdatenbanken herauszufinden. Da es keine zentralen Tabellen gibt (um Schlüssel hinzuzufügen, die eine Beziehung zwischen zwei Objekten markieren), bin ich wirklich ratlos darüber, wie Sie Daten auf eine Weise abrufen können, die für normale Webseiten nützlich wäre.
Angenommen, ich habe einen Benutzer, und dieser Benutzer hinterlässt auf der gesamten Website viele Kommentare. Der einzige Weg, den ich mir vorstellen kann, um die Kommentare dieser Benutzer zu verfolgen, ist:
- Betten Sie sie in das Benutzerobjekt ein (was ziemlich nutzlos erscheint).
- Erstellen und pflegen Sie einen
user_id:comments
Wert, der eine Liste der Schlüssel jedes Kommentars enthält [Kommentar: 34, Kommentar: 197 usw.], damit ich sie nach Bedarf abrufen kann.
Wenn Sie jedoch das zweite Beispiel nehmen, werden Sie bald auf eine Mauer stoßen, wenn Sie sie zum Verfolgen anderer Dinge wie eines Schlüssels namens "active_comments" verwenden, der möglicherweise 30 Millionen IDs enthält, was es eine TON kostet , jede Seite abzufragen, nur um einige aktuelle zu kennen aktive Kommentare. Es wäre auch sehr anfällig für Rennbedingungen, da viele Seiten versuchen könnten, es gleichzeitig zu aktualisieren.
Wie kann ich Beziehungen wie die folgenden in einer NoSQL-Datenbank verfolgen?
- Alle Kommentare eines Benutzers
- Alle aktiven Kommentare
- Alle mit [Stichwort] getaggten Beiträge
- Alle Studenten in einem Club - oder alle Clubs, in denen ein Student ist
Oder denke ich falsch darüber nach?