sql >> Database teknologi >  >> NoSQL >> MongoDB

Reduktion af MongoDB-databasefilstørrelsen

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.

  1. 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 af mongoimport ). Dette vil resultere i en ny database, der er mere komprimeret. Nu kan du stoppe den originale mongod udskift med de nye databasefiler, og du er godt i gang.
  2. 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).



  1. Understøtter MongoDB typer med flydende komma?

  2. Bedste praksis for sikkerhedskopiering af databaser

  3. Tæl i Spring Data MongoDB-lageret

  4. Få Set-værdi fra Redis ved hjælp af RedisTemplate