Neden 110+ GB'lik bir koleksiyonu sildikten sonra, / var / lib / mongodb dizinim hala aynı boyutta?


12

MongoDB ve alan kullanımı ile ilgili bazı sorunlar yaşıyorum. Özellikle, bir zamanlar diskte toplam 110+ GB olmak üzere yaklaşık 600 milyon kayıttan oluşan geniş bir koleksiyona sahiptim. Son zamanlarda veri modası geçmiş olduğu için bırakmaya karar verdim, bunu yapmak için koleksiyonu rockmongo'nun web arayüzü üzerinden bıraktım. Buna göre, rockmongo bana koleksiyonu artık göstermiyor, ancak disk kullanımım hiç değişmedi.

Veritabanını diskteki veritabanı dosyalarıyla senkronize etmek için farkında olmadığım temiz bir işlem var mı?

Ben bir "onarım" gerçekleştirmek için çalıştım ama sistem disk üzerinde yeterli alan yok ... tüm MongoDB tarafından kullanılan çünkü şikayet ediyor.

Yanıtlar:


19

Çoğu veritabanı sisteminde olduğu gibi, verileri sildiğinizde veritabanı dosyaları küçülmez, veriler silinir / silinmiş olarak işaretlenir ve alan yeniden kullanılır.

Buradadb.repairDatabase() belirtildiği gibi kompakt alana koşmanız gerekecek


2
Sabit disk alanı bunu yapmak için çok düşüktü. Ancak bu şekilde çözülür: mongodump, oldDatabase.dropDatabase(), mongorestore --db newDatabase dump/oldDatabase.
tunnuz

5

Yukarıdaki mongodump / drop / mongorestore yaklaşımı teknik açıdan iyi çalışsa da, bunu yaparken veritabanını çevrimdışına almanızı gerektirecek, bu da hizmeti etkileyen bir olay olacaktır.

Bunu kesinti olmadan yapmak istiyorsanız VE MongoDB Çoğaltma Setleri [1] kullanıyorsanız, bunu şöyle yapabilirsiniz:

  1. Bir üye seçin ve MongoDB'yi orada durdurun (servis mongodb durağı). Bu PRIMARY ise, başka bir üyenin PRIMARY için seçilmesini bekleyin.
  2. Bu üyedeki veri dosyalarını kaldırın (cd / var / lib / mongodb; rm *).
  3. MongoDB hizmetini yeniden başlatın (hizmet mongodb başlangıcı).
  4. Üyenin PRIMARY (rs.status ()) ile yeniden senkronize olmasını bekleyin.
  5. Bu yalnızca gerekli (daha küçük) veri dosyalarını yeniden oluşturur.

Sonra, çoğaltma kümesindeki diğer üyelerin her biri için yukarıdaki adımları yineleyin.

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


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.