2012-06-13 5 views
5

Wir entwickeln eine Anwendung, die schwer lesbar ist und möglicherweise Millionen von Dokumenten haben könnte. Wir müssen in fast jeder Sammlung auf Benutzerinformationen verweisen. Benutzerinformationen haben ein Attribut, das sich von Zeit zu Zeit ändern kann.Sollten wir dbref oder ein eingebettetes Dokument in einer rechenintensiven Anwendung verwenden

Sollten wir DBref verwenden oder die Benutzerinformationen in alle Sammlungen einbetten?

Wie schlimm ist die DBref-Leistung in einer umfangreichen Leseanwendung?

Wenn wir DBref nicht verwenden, wie können wir jedes Dokument aktualisieren, wenn sich die Benutzerinformationen regelmäßig ändern?

Gibt es in Mongodb eine Alternative für DBref und eingebettete Dokumente für diese Art von Anwendungsfall?

Antwort

6

DBref ist nichts wie ein Fremdschlüssel in traditionellen relationalen Systemen. Es ist nur eine Konvention, die einem Fahrer (der dazu in der Lage ist), das entsprechende Dokument automatisch zu laden. Weitere Informationen hierzu finden Sie unter DBRef.
Je nach dem verwendeten Treiber können Sie diese Referenzen möglicherweise nur dann automatisch laden, wenn Sie sie benötigen (faul), so dass der Leistungsaufwand sehr gering sein sollte. Aber der Speicheraufwand ist ein bisschen höher als eine einfache referenzierte _id eines anderen Dokuments. Grundsätzlich würde ich sagen, dass Sie diese DBrefs nur verwenden sollten, wenn das verknüpfte Dokument vom variablen Typ sein kann. Wenn die Statik mit _id-Referenzen und vielleicht mit Ihrer eigenen Lazy-Loader-Funktionalität verbunden ist, wiederholen Sie sich nicht.
Wiederholen Sie sich nicht selbst (oder Datenduplizierung in der Datenbank) gilt auch in Ihrem Kontext, wie MongoDB empfiehlt, so würde ich auch, ist nur link your documents. Sonst hätten Sie eine höhere Speicherauslastung und etwas längere laufende Aktualisierungen, um nur eine logische Einheit zu aktualisieren (physisch sehr oft dupliziert).

Mit dem zuvor erwähnten benutzerdefinierten Lazy Loader können Sie einige Caching hinzufügen, so dass nicht jedes Nachschlagen tatsächlich zu einem Mongodb-Lookup führt. Am wahrscheinlichsten müssten Sie dann auf Ihre Datenkonsistenz zwischen Cache und db achten.

+0

Vielen Dank für Ihre Antwort. Es war sehr hilfreich. – atandon

Verwandte Themen