2010-11-19 17 views

risposta

38

Fondamentalmente è necessario creare una nuova raccolta con limite e copiare i documenti in esso. Questo può essere fatto molto facilmente in javascript (shell), o nella tua lingua preferita.

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); 

Nota: Basta fare in modo che nessuno sta inserendo/aggiornare la vecchia collezione quando si passa. Se si esegue quel codice in un db.eval ("....") bloccherà il server durante l'esecuzione.

C'è una richiesta di funzionalità per aumentare la dimensione di una raccolta esistente: http://jira.mongodb.org/browse/SERVER-1864

40

Questo è quello che faccio a ridimensionare le collezioni presenze:

db.runCommand({"convertToCapped": "log", size: 1000000000}); 

ho già una collezione Capped chiamato "log" . Quindi ho appena eseguito "convertToCapped" su di esso, specificando una nuova dimensione. Non ho provato a ridurre le dimensioni della collezione. Potrebbe essere qualcosa su cui avresti bisogno di usare la versione di Scott Hernandez. Ma questo funziona per aumentare le dimensioni delle collezioni con limite senza perdere alcun dato o gli indici.


EDIT: @JMichal è corretto. I dati vengono conservati, ma gli indici non sono e dovranno essere ricreati.

+5

Opere per ridurre le dimensioni della raccolta! Questa dovrebbe essere la risposta giusta. –

+2

http://docs.mongodb.org/manual/reference/command/convertToCapped/ dice: Avviso Questo comando ottiene un blocco di scrittura globale e bloccherà altre operazioni fino al completamento. –

+2

Ma non conserva gli indici, tutti devono essere ricreati –

Problemi correlati