AKTUALISIERUNG: mit dem compact
Befehl und WiredTiger sieht es so aus, als ob der zusätzliche Speicherplatz tatsächlich für das Betriebssystem freigegeben wird.
AKTUALISIERUNG: ab v1.9+ gibt es einen compact
Befehl.
Dieser Befehl führt eine Komprimierung "inline" durch. Es wird immer noch etwas mehr Platz benötigt, aber nicht so viel.
MongoDB komprimiert die Dateien wie folgt:
- Kopieren der Dateien an einen neuen Ort
- die Dokumente durchgehen und neu ordnen / neu auflösen
- Ersetzen der Originaldateien durch die neuen Dateien
Sie können diese "Komprimierung" durchführen, indem Sie mongod --repair
ausführen oder indem Sie sich direkt verbinden und db.repairDatabase()
ausführen .
In beiden Fällen benötigen Sie irgendwo den Speicherplatz, um die Dateien zu kopieren. Jetzt weiß ich nicht, warum Sie nicht genug Speicherplatz haben, um eine Komprimierung durchzuführen, aber Sie haben einige Optionen, wenn Sie einen anderen Computer mit mehr Speicherplatz haben.
- Exportieren Sie die Datenbank auf einen anderen Computer, auf dem Mongo installiert ist (mithilfe von
mongoexport
). ) und dann können Sie dieselbe Datenbank importieren (mithilfe vonmongoimport
). Dies führt zu einer neuen Datenbank, die komprimierter ist. Jetzt können Sie den ursprünglichenmongod
stoppen durch die neuen Datenbankdateien ersetzen und schon kann es losgehen. - Stoppen Sie den aktuellen Mongod und kopieren Sie die Datenbankdateien auf einen größeren Computer und führen Sie die Reparatur auf diesem Computer aus. Anschließend können Sie die neuen Datenbankdateien zurück auf den ursprünglichen Computer verschieben.
Derzeit gibt es keine gute Möglichkeit, mit Mongo „an Ort und Stelle zu komprimieren“. Und Mongo kann definitiv viel Platz einnehmen.
Die derzeit beste Strategie für die Komprimierung besteht darin, ein Master-Slave-Setup auszuführen. Sie können den Slave dann komprimieren, aufholen lassen und umschalten. Ich weiß noch ein bisschen haarig. Vielleicht wird sich das Mongo-Team eine bessere Verdichtung an Ort und Stelle einfallen lassen, aber ich glaube nicht, dass es ganz oben auf ihrer Liste steht. Speicherplatz wird derzeit als billig angesehen (und das ist er normalerweise auch).