UPPDATERING: med compact
kommandot och WiredTiger det ser ut som att det extra diskutrymmet faktiskt kommer att frigöras till operativsystemet.
UPPDATERING: från v1.9+ finns det en compact
kommando.
Detta kommando kommer att utföra en komprimering "in-line". Det kommer fortfarande att behöva lite extra utrymme, men inte lika mycket.
MongoDB komprimerar filerna genom att:
- kopiera filerna till en ny plats
- gå igenom dokumenten och ordna om / lösa om dem
- ersätter originalfilerna med nya filer
Du kan göra denna "komprimering" genom att köra mongod --repair
eller genom att ansluta direkt och köra db.repairDatabase()
.
I båda fallen behöver du utrymme någonstans för att kopiera filerna. Nu vet jag inte varför du inte har tillräckligt med utrymme för att utföra en komprimering, men du har några alternativ om du har en annan dator med mer utrymme.
- Exportera databasen till en annan dator med Mongo installerad (med
mongoexport
) och sedan kan du importera samma databas (medmongoimport
). Detta kommer att resultera i en ny databas som är mer komprimerad. Nu kan du stoppa den ursprungligamongod
ersätt med de nya databasfilerna och du är klar. - Stoppa den nuvarande mongoden och kopiera databasfilerna till en större dator och kör reparationen på den datorn. Du kan sedan flytta tillbaka de nya databasfilerna till den ursprungliga datorn.
Det finns för närvarande inte ett bra sätt att "komprimera på plats" med Mongo. Och Mongo kan definitivt suga upp mycket utrymme.
Den bästa strategin just nu för komprimering är att köra en Master-Slave-installation. Du kan sedan komprimera Slaven, låta den komma ikapp och byta om dem. Jag vet fortfarande lite hårig. Kanske kommer Mongo-teamet med bättre komprimering på plats, men jag tror inte att det står högt på deras lista. Drivutrymme antas för närvarande vara billigt (och det är det vanligtvis).