Dlaczego po usunięciu kolekcji ponad 110 GB mój katalog / var / lib / mongodb nadal ma ten sam rozmiar?

12

Mam pewne problemy z MongoDB i wykorzystaniem miejsca. W szczególności kiedyś miałem dużą kolekcję około 600 milionów rekordów o łącznej wielkości ponad 110 GB na dysku. Niedawno postanowiłem go usunąć, ponieważ dane były nieaktualne. Aby to zrobić, upuściłem kolekcję za pośrednictwem interfejsu sieciowego rockmongo. W związku z tym rockmongo nie pokazuje mi już kolekcji, jednak moje użycie dysku w ogóle się nie zmieniło.

Czy jest jakaś czysta operacja, o której nie wiem, którą należy uruchomić, aby zsynchronizować bazę danych z plikami bazy danych na dysku?

Próbowałem wykonać „naprawę”, ale system narzeka, że ​​na dysku nie ma wystarczającej ilości miejsca ... to dlatego, że wszystko jest używane przez MongoDB.

tunnuz
źródło

Odpowiedzi:

19

Podobnie jak w większości systemów baz danych, pliki bazy danych nie kurczą się podczas usuwania danych, dane są po prostu usuwane / oznaczane jako usunięte, a miejsce jest ponownie wykorzystywane.

Jak db.repairDatabase()wspomniano tutaj, musisz pobiec do niewielkiej przestrzeni

nos
źródło
2
Miejsce na dysku twardym było zbyt małe, aby to zrobić. Jednak ja rozwiązany w ten sposób: mongodump, oldDatabase.dropDatabase(), mongorestore --db newDatabase dump/oldDatabase.
tunnuz
5

Chociaż powyższe podejście do mongodump / drop / mongorestore będzie działało dobrze z technicznego punktu widzenia, będzie wymagało przełączenia bazy danych w tryb offline podczas pracy, co byłoby zdarzeniem mającym wpływ na usługę.

Jeśli chcesz to zrobić bez przestojów ORAZ jeśli używasz zestawów replik MongoDB [1], możesz to zrobić w następujący sposób:

  1. Wybierz członka i zatrzymaj tam MongoDB (service mongodb stop). Jeśli to był PODSTAWOWY, poczekaj, aż inny członek zostanie wybrany PODSTAWOWY.
  2. Usuń pliki danych z tego elementu (cd / var / lib / mongodb; rm *).
  3. Uruchom ponownie usługę MongoDB ponownie (usługa mongodb start).
  4. Poczekaj, aż członek ponownie zsynchronizuje z PIERWOTNYM (rs.status ()).
  5. Spowoduje to odbudowanie tylko wymaganych (mniejszych) plików danych.

Następnie powtórz powyższe kroki dla każdego z pozostałych elementów w zestawie repliki.

[1] https://docs.mongodb.org/manual/tutorial/deploy-replica-set )

James Mernin
źródło