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

MongoDB:Sollten Sie weiterhin IDs bereitstellen, die auf andere Sammlungen verlinken, oder nur Sammlungen einbeziehen?

Es kommt darauf an.

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 ein bestimmtes Thema unterbringen? Wahrscheinlich nicht.

Es hängt von den Beziehungen ab - haben Sie Eins-zu-Viele- oder Viele-zu-Viele-Beziehungen? Wenn es sich um Eins-zu-Viele handelt und die Anzahl verwandter Entitäten gering ist, können Sie sie in eine IList in einem Dokument einbetten. Wenn es sich um viele zu viele handelt, können Sie sich für eine traditionellere Beziehung entscheiden oder beide Seiten als ILists einbetten.

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 Themas und dann das Laden der Kommentare dafür könnte aus Leistungssicht in Ordnung sein.

Weitere Tipps:

Mit MongoDB können Sie INTO-Arrays auf Dokumenten indizieren. Stellen Sie sich einen Index also 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 Thema 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 Tags zu finden, die derzeit verwendet werden, sortiert nach ihrer Verwendungshäufigkeit, würden Sie jedes Thema zuordnen, das die darin verwendeten Tags ausgibt, und dann würden Sie diese Menge reduzieren, um das gewünschte Ergebnis zu erhalten. Sie können dann das Ergebnis dieser Kartenreduzierung dauerhaft speichern und es nur bei Bedarf aktualisieren.

Es ist eine ziemlich bedeutende Abkehr vom relationalen Denken, aber es lohnt sich, wenn Sie die Skalierbarkeit und Flexibilität benötigen, die ein NOSQL-Ansatz mit sich bringt.