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

Sollten wir dbref oder eingebettetes Dokument in einer leselastigen Anwendung verwenden

DBref ist nicht so etwas wie ein Fremdschlüssel in traditionellen relationalen Systemen. Es ist nur eine Konvention, die einem Fahrer (der dazu in der Lage ist) leicht mitteilt, diese referenzierten Dokumente automatisch zu laden. Siehe DBRef für weitere Informationen dazu.

Abhängig vom verwendeten Treiber können Sie diese Referenzen möglicherweise nur dann automatisch laden, wenn Sie sie benötigen (faul), sodass der Leistungsaufwand wirklich gering sein sollte. Aber der Speicheraufwand ist etwas höher als eine einfache referenzierte _id eines anderen Dokuments. Grundsätzlich würde ich sagen, dass Sie diese DBrefs nur dann verwenden sollten, wenn das verlinkte Dokument einen Variablentyp haben kann. Wenn es statisch ist, bleiben Sie bei _id-Referenzen und vielleicht Ihrer eigenen Lazy-Loader-Funktionalität hängen, damit Sie sich nicht wiederholen.

Wiederholen Sie sich nicht (oder Datenduplizierung in Datenbankbegriffen) gilt auch in Ihrem Kontext, wie MongoDB empfiehlt (so würde ich es auch tun), nur verknüpfen Sie Ihre Dokumente . Andernfalls hätten Sie eine höhere Speichernutzung und etwas lang andauernde Updates, um nur eine logische Entität zu aktualisieren (physisch sehr oft dupliziert).

Mit dem zuvor erwähnten benutzerdefinierten Lazy Loader können Sie etwas Caching hinzufügen, sodass nicht jede Suche tatsächlich zu einer Mongodb-Suche führt. Höchstwahrscheinlich müssten Sie sich dann um Ihre Datenkonsistenz zwischen Cache und Datenbank kümmern.