MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

MongoDB-Beziehungen für Objekte

Es hängt davon ab, ob.

Es hängt davon ab, wie viele von jedem dieser Objekttypen Sie erwarten. Können Sie sie alle in einem einzigen MongoDB-Dokument für einen bestimmten Benutzer unterbringen? Wahrscheinlich nicht.

Es hängt von den Beziehungen ab - ist das Benutzerkonto eine Eins-zu-Viele- oder eine Viele-zu-Viele-Beziehung? Wenn es einer zu viele ist und die Anzahl der Konten klein ist, können Sie sie in einer IList in einem Benutzerdokument ablegen.

Sie können Beziehungen in MongoDB immer noch mit separaten Sammlungen modellieren, ABER es gibt keine Joins in der Datenbank, also müssen Sie das im Code tun. Das Laden eines Benutzers und dann das Laden seiner Konten kann aus Leistungssicht in Ordnung sein.

Sie können INTO-Arrays auf Dokumenten indizieren. Stellen Sie sich einen Index nicht nur als einen Index für ein einfaches Feld in einem Dokument (wie SQL) vor. Sie können beispielsweise eine Tag-Sammlung für ein Dokument verwenden und die Tags indizieren. (Siehe http://www.mongodb.org/display/DOCS/Indexes #Index-Arrays )

Wenn Sie Daten abrufen oder schreiben, können Sie ein beliebiges Dokument teilweise lesen und teilweise schreiben. (siehe http://www.mongodb.org/display /DOCS/Abrufen+einer+Teilmenge+von+Feldern )

Und schließlich, wenn Sie nicht sehen können, wie Sie mit Sammlungen und Indizes an das kommen, was Sie wollen, können Sie es vielleicht mit Map Reduce erreichen. Um beispielsweise alle derzeit verwendeten Tags sortiert nach ihrer Verwendungshäufigkeit zu finden, würden Sie zuordnen jedes Dokument, das die darin verwendeten Tags ausgibt, und dann würden Sie reduzieren dieses Set, um das gewünschte Ergebnis zu erzielen. Sie können dann das Ergebnis dieser Kartenreduzierung dauerhaft speichern und es nur bei Bedarf aktualisieren.

Eine weitere Sorge:Sie erwähnen die Berechnung von Gesamtsummen nach Tag. Wenn Sie Transaktionskonsistenz in Buchhaltungsqualität wünschen, ist MongoDB möglicherweise nicht die richtige Wahl für Sie. „Eventual Consistency“ ist der Name des Spiels für NoSQL-Datenspeicher, und sie eignen sich im Allgemeinen nicht gut für Finanztransaktionen. Beispielsweise spielt es keine Rolle, ob ein Benutzer einen Blogbeitrag mit 3 Kommentaren sieht, während ein anderer 4 sieht, weil er auf verschiedene Kopien trifft, die noch nicht synchron sind, aber für einen Finanzbericht spielt diese Art von Konsistenz eine Rolle - Ihre Der Bericht stimmt möglicherweise nicht überein!