Sie sollten eingebettete Dokumente verwenden, wenn es sich um statische Dokumente handelt oder aufgrund von Leistungseinbußen nicht mehr als einige Hundert. Ich habe mich vor einiger Zeit mit diesem Thema befasst. Neu war, dass Asya Kamsky, die als Lösungsarchitektin für MongoDB arbeitet, einen Artikel über "Verwenden von Unterdokumenten" geschrieben hat.
Ich hoffe, das hilft, wer nach Lösungen oder Best Practices sucht.
Zunächst müssen wir uns überlegen, warum wir so etwas tun wollen. Normalerweise würde ich Leuten raten, Dinge einzubetten, die sie immer wieder haben möchten, wenn sie dieses Dokument abrufen. Die Kehrseite davon ist, dass Sie keine Dinge in das Dokument einbetten möchten, die Sie nicht zurückbekommen möchten.
Wenn Sie die von mir ausgeführten Aktivitäten in das Dokument einbetten, funktioniert dies zunächst hervorragend, da alle meine Aktivitäten genau dort sind und Sie mit einem einzigen Lesevorgang alles zurückerhalten können, was Sie mir möglicherweise zeigen möchten: "Sie haben kürzlich auf dieses und hier geklickt sind deine letzten beiden Kommentare "aber was passiert nach sechs Monaten und ich kümmere mich nicht um Dinge, die ich vor langer Zeit getan habe und du willst sie mir nicht zeigen, es sei denn, ich suche speziell nach einer alten Aktivität?
Erstens werden Sie immer größere Dokumente zurückgeben und sich um immer kleinere Teile kümmern. Sie können die Projektion jedoch verwenden, um nur einen Teil des Arrays zurückzugeben. Der eigentliche Schmerz besteht darin, dass das Dokument auf der Festplatte größer wird und immer noch alles gelesen wird, auch wenn Sie nur einen Teil davon an den Endbenutzer zurückgeben, aber Da meine Aktivität nicht aufhört, solange ich aktiv bin, wächst das Dokument weiter und weiter.
Das offensichtlichste Problem dabei ist, dass Sie möglicherweise das Dokumentlimit von 16 MB erreichen, aber darüber sollten Sie sich überhaupt keine Sorgen machen. Ein Dokument, das kontinuierlich wächst, verursacht jedes Mal höhere Kosten, wenn es auf die Festplatte verschoben werden muss. Selbst wenn Sie Maßnahmen ergreifen, um die Auswirkungen der Fragmentierung zu verringern, sind Ihre Schreibvorgänge insgesamt unnötig lang und beeinträchtigen die Gesamtleistung Ihrer gesamten Anwendung.
Sie können noch etwas tun, das die Leistung Ihrer Anwendung vollständig beeinträchtigt, und zwar die Indizierung dieses ständig wachsenden Arrays. Dies bedeutet, dass jedes Mal, wenn das Dokument mit diesem Array verschoben wird, die Anzahl der Indexeinträge, die aktualisiert werden müssen, direkt proportional zur Anzahl der indizierten Werte in diesem Dokument ist. Je größer das Array, desto größer wird diese Anzahl Sein.
Ich möchte nicht, dass Sie davon abgehalten werden, Arrays zu verwenden, wenn sie gut zum Datenmodell passen - sie sind eine leistungsstarke Funktion des Datenmodells der Dokumentendatenbank, aber wie alle leistungsstarken Tools muss es unter den richtigen Umständen verwendet werden und es sollte mit Vorsicht verwendet werden.