sql >> Database >  >> NoSQL >> MongoDB

De bestandsgrootte van de MongoDB-database verkleinen

UPDATE: met de compact commando en WiredTiger het lijkt erop dat de extra schijfruimte daadwerkelijk wordt vrijgegeven aan het besturingssysteem.

UPDATE: vanaf v1.9+ is er een compact commando.

Deze opdracht voert een verdichting "in-line" uit. Het heeft nog wat extra ruimte nodig, maar niet zo veel.

MongoDB comprimeert de bestanden door:

  • de bestanden naar een nieuwe locatie kopiëren
  • door de documenten bladeren en ze opnieuw ordenen/oplossen
  • de originele bestanden vervangen door de nieuwe bestanden

U kunt deze "compressie" uitvoeren door mongod --repair . uit te voeren of door rechtstreeks verbinding te maken en db.repairDatabase() . uit te voeren .

In beide gevallen heb je de ruimte ergens nodig om de bestanden te kopiëren. Nu weet ik niet waarom je niet genoeg ruimte hebt om een ​​compressie uit te voeren, maar je hebt wel enkele opties als je een andere computer hebt met meer ruimte.

  1. Exporteer de database naar een andere computer waarop Mongo is geïnstalleerd (met behulp van mongoexport ) en dan kunt u diezelfde database importeren (met behulp van mongoimport ). Dit zal resulteren in een nieuwe database die meer gecomprimeerd is. Nu kun je de originele mongod stoppen vervang door de nieuwe databasebestanden en je bent klaar om te gaan.
  2. Stop de huidige mongod en kopieer de databasebestanden naar een grotere computer en voer de reparatie uit op die computer. U kunt de nieuwe databasebestanden vervolgens terugzetten naar de oorspronkelijke computer.

Er is momenteel geen goede manier om "op hun plaats te comprimeren" met Mongo. En Mongo kan zeker veel ruimte innemen.

De beste strategie voor verdichting op dit moment is om een ​​Master-Slave-installatie uit te voeren. Je kunt de Slave dan verdichten, laten inhalen en omschakelen. Ik weet nog een beetje harig. Misschien komt het Mongo-team met betere verdichting op zijn plaats, maar ik denk niet dat het hoog op hun lijst staat. Momenteel wordt aangenomen dat schijfruimte goedkoop is (en dat is meestal ook zo).



  1. MongoDB sort()

  2. PostgreSQL en MongoDB mixen (als Django-backends)

  3. Hoe kan ik alle collecties in de MongoDB-shell weergeven?

  4. MongoDB $aftrekken