OPDATERING: med compact
kommando og WiredTiger ser det ud til, at den ekstra diskplads faktisk vil blive frigivet til OS.
OPDATERING: fra v1.9+ er der en compact
kommando.
Denne kommando vil udføre en komprimering "in-line". Den skal stadig bruge lidt ekstra plads, men ikke så meget.
MongoDB komprimerer filerne ved at:
- kopiering af filerne til en ny placering
- gennemgange dokumenterne og omarrangere/reløse dem
- erstatning af de originale filer med de nye filer
Du kan gøre denne "komprimering" ved at køre mongod --repair
eller ved at oprette forbindelse direkte og køre db.repairDatabase()
.
I begge tilfælde har du brug for plads et sted til at kopiere filerne. Nu ved jeg ikke, hvorfor du ikke har plads nok til at udføre en komprimering, men du har nogle muligheder, hvis du har en anden computer med mere plads.
- Eksporter databasen til en anden computer med Mongo installeret (ved hjælp af
mongoexport
), og så kan du importere den samme database (ved hjælp afmongoimport
). Dette vil resultere i en ny database, der er mere komprimeret. Nu kan du stoppe den originalemongod
udskift med de nye databasefiler, og du er godt i gang. - Stop den nuværende mongod og kopier databasefilerne til en større computer og kør reparationen på den computer. Du kan derefter flytte de nye databasefiler tilbage til den originale computer.
Der er i øjeblikket ikke en god måde at "komprimere på plads" ved hjælp af Mongo. Og Mongo kan helt sikkert suge meget plads.
Den bedste strategi lige nu til komprimering er at køre en Master-Slave-opsætning. Du kan derefter komprimere slaven, lade den indhente og skifte dem. Jeg ved stadig lidt behåret. Måske vil Mongo-teamet komme med bedre komprimering på plads, men jeg tror ikke, det er højt på deres liste. Drive plads antages i øjeblikket at være billig (og det er det normalt).