Ich habe die Sammlung domain
mit Dokumenten, die Domain-Informationen enthalten. Ein Teil davon sind die historischen whois-Datensätze, die null oder mehr sein können und bei weitem den größten Teil des Platzes für das Dokument einnehmen.MongoDB: Wird beim Speichern eines Dokuments das gesamte Dokument neu geschrieben?
Wenn ich das gesamte Dokument laden, ändern Sie etwas klein (wie ein Zahlenfeld aktualisieren) und verwenden Sie die save()
Methode wird mongo das gesamte Dokument auf die Festplatte leeren oder nur die BSON aktualisieren, die geändert hat? Letztendlich ist meine Frage, sollte ich mich bemühen, meinen Code mit update()
zu verkomplizieren, um auf I/O zu sparen, oder sollte ich einfach save()
verwenden?
Dies ist nicht nur wegen der Lazyness, das Dokument (nachdem es vollständig gelesen wird) durchläuft eine Reihe von Schritten zum Ändern/Verarbeiten des Dokuments und wenn Änderungen vorgenommen wurden, wird das gesamte Dokument gespeichert. Aber wenn die Kosten zum Speichern des Dokuments hoch sind, dann muss ich vielleicht anders darüber nachdenken ...
Das ist hilfreich, aber es beantwortet meine Frage nicht wirklich. Wenn ich ein 10mb BSON-Dokument habe, lese ich es eine Eigenschaft ändern und speichern es wird es die volle 10mb wieder schreiben? Angenommen, das Dokument muss nicht verschoben werden. –
Das Detail auf * "ist das Ganze geschrieben" * hängt von der Tatsache ab, dass MongoDB Speicherkarten verwendet. Wenn Sie nur eine einzelne Eigenschaft aktualisieren, werden im Idealfall nur diese Bytes auf die Festplatte geschrieben. Wenn sich der BSON jedoch genug ändert, kann * * * das ganze Ding auf die Festplatte gespült werden. –
@GatesVP: Ich dachte, dass die ganze Seite als schmutzig markiert ist und gespült werden muss. –