Wie kann ich die Größe einer mongodb-gedeckten Sammlung ändern, ohne Daten zu verlieren?Wie kann ich die Größe einer mongodb-gedeckten Sammlung ändern, ohne Daten zu verlieren?
Gibt es dafür einen Befehl oder könnte jemand ein Skript bereitstellen?
Wie kann ich die Größe einer mongodb-gedeckten Sammlung ändern, ohne Daten zu verlieren?Wie kann ich die Größe einer mongodb-gedeckten Sammlung ändern, ohne Daten zu verlieren?
Gibt es dafür einen Befehl oder könnte jemand ein Skript bereitstellen?
Sie müssen grundsätzlich eine neue Capped-Sammlung erstellen und die Dokumente dorthin kopieren. Dies kann sehr einfach in der Javascript (Shell) oder Ihrer Sprache der Wahl erfolgen.
db.createCollection("new", {capped:true, size:1073741824}); /* size in bytes */
db.old.find().forEach(function (d) {db.new.insert(d)});
db.old.renameCollection("bak", true);
db.new.renameCollection("old", true);
Hinweis: Nur sicher niemand machen, ist das Einfügen/die alte Sammlung zu aktualisieren, wenn Sie wechseln. Wenn Sie diesen Code in einem db.eval ("....") ausführen, wird der Server während der Ausführung gesperrt.
Es gibt eine Feature-Anfrage zur Erhöhung der Größe einer vorhandenen Sammlung: http://jira.mongodb.org/browse/SERVER-1864
Dies ist, was ich tun capped Sammlungen, um die Größe:
db.runCommand({"convertToCapped": "log", size: 1000000000});
Ich habe bereits ein Capped-Sammlung namens „log“ . Also führe ich einfach "convertToCapped" erneut aus und gebe eine neue Größe an. Ich habe es nicht versucht, die Größe der Sammlung zu reduzieren. Das könnte etwas sein, für das du Scott Hernandez 'Version verwenden musst. Dies funktioniert jedoch, um die Größe Ihrer gedeckten Sammlungen zu erhöhen, ohne Daten zu verlieren oder Ihre Indizes.
EDIT: @JMichal ist richtig. Daten werden beibehalten, Indizes werden jedoch nicht erstellt und müssen neu erstellt werden.
Funktioniert um die Größe der Sammlung zu reduzieren! Dies sollte die richtige Antwort sein. –
http://docs.mongodb.org/manual/reference/command/convertToCapped/ sagt: Warnung Dieser Befehl eine globale Schreibsperre erhält und andere Vorgänge blockieren, bis es abgeschlossen ist. –
Aber es bewahrt keine Indizes, alle müssen neu erstellt werden –