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

Verwendet MongoDB gelöschten Speicherplatz wieder?

Aktualisierung (März 2015): Ab Version 3.0 sind in MongoDB mehrere Speicher-Engines verfügbar. Diese Antwort gilt für die MMAP-Speicher-Engine (immer noch die Standardeinstellung in MongoDB 3.0), die Antwort für andere Engines (z. B. WiredTiger) ist ganz anders und kann durchaus abstimmbar und einstellbar sein. Wenn Sie also eine andere Engine verwenden, lesen Sie bitte die entsprechenden Dokumente für diese Speicher-Engine, um festzustellen, welche Standardeinstellungen und Optionen Sie für die Wiederverwendung von Speicherplatz verwenden.

Mit der MMAP-Speicher-Engine wird beim Löschen von Dokumenten der verbleibende Speicherplatz in eine freie Liste gestellt. Um den Speicherplatz zu nutzen, müssen jedoch später Dokumente ähnlicher Größe eingefügt werden, und MongoDB muss innerhalb eines bestimmten Zeitrahmens einen geeigneten Speicherplatz für dieses Dokument finden (sobald es die Liste ansieht, wird es einfach angehängt). Die Wiederverwendung des Raums wird nicht sehr oft vorkommen. Diese Löschung erfolgt innerhalb der Datendateien, sodass hier keine Speicherplatzrückgewinnung stattfindet – all dies wird intern innerhalb der vorhandenen Datendateien durchgeführt.

Wenn Sie anschließend eine Reparatur durchführen oder eine sekundäre Datei von Grund auf neu synchronisieren, werden die Datendateien neu geschrieben und der Speicherplatz auf der Festplatte wird zurückgewonnen (alle Auffüllungen in Dokumenten werden ebenfalls entfernt). Hier sehen Sie die tatsächliche Speicherplatzrückgewinnung auf der Festplatte. Bei allen anderen Aktionen (einschließlich Compact) ändert sich die Festplattennutzung nicht und kann sogar steigen.

Mit 2.2+ können Sie jetzt den Befehl collMod und die Option usePowersOf2Sizes verwenden, um die Wiederverwendung von gelöschtem Speicherplatz wahrscheinlicher zu machen (beachten Sie, dass dies der Standard in 2.6+ ist). Dies bedeutet, dass die anfängliche Speicherplatzzuweisung für ein Dokument etwas weniger effizient ist (512 Byte beispielsweise für ein 400-Byte-Dokument), bedeutet aber, dass beim Einfügen eines neuen Dokuments dieser Speicherplatz wahrscheinlich wiederverwendet werden kann. Wenn Sie häufig Dokumente löschen (oder vergrößern und damit verschieben), ist dies langfristig effizienter.

Für alle, die daran interessiert sind, hat einer der Leute, die einen Großteil des Speichercodes geschrieben haben (Mathias Stearn), eine großartige Präsentation über die Interna des Speichers, die hier zu finden ist