2010-11-19 8 views

Antwort

38

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

40

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.

+5

Funktioniert um die Größe der Sammlung zu reduzieren! Dies sollte die richtige Antwort sein. –

+2

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. –

+2

Aber es bewahrt keine Indizes, alle müssen neu erstellt werden –

Verwandte Themen