Mengapa setelah menghapus koleksi 110+ GB, direktori / var / lib / mongodb saya masih memiliki ukuran yang sama?

12

Saya mengalami beberapa masalah dengan MongoDB dan penggunaan ruang. Secara khusus, saya pernah menggunakan koleksi besar sekitar 600 juta catatan dengan total 110+ GB pada disk. Baru-baru ini saya memutuskan untuk menghapusnya karena datanya sudah usang, untuk melakukannya saya menjatuhkan koleksi melalui antarmuka web rockmongo. Karenanya, rockmongo tidak menunjukkan koleksi lagi kepada saya, namun penggunaan disk saya tidak berubah sama sekali.

Apakah ada operasi bersih yang tidak saya sadari, yang harus dijalankan untuk menyinkronkan database dengan file database pada disk?

Saya telah mencoba melakukan "perbaikan" tetapi sistem mengeluh bahwa tidak ada cukup ruang pada disk ... itu karena semuanya digunakan oleh MongoDB.

tunnuz
sumber

Jawaban:

19

Seperti kebanyakan sistem basis data, file basis data tidak menyusut ketika Anda menghapus data, data hanya dihapus / ditandai sebagai dihapus, dan ruang digunakan kembali.

Anda harus berlari db.repairDatabase()ke ruang kompak seperti yang disebutkan di sini

tidak
sumber
2
Ruang hard disk terlalu rendah untuk melakukan itu. Namun saya dipecahkan dengan cara ini: mongodump, oldDatabase.dropDatabase(), mongorestore --db newDatabase dump/oldDatabase.
tunnuz
4

Meskipun pendekatan mongodump / drop / mongorestore di atas akan berfungsi dengan baik dari perspektif teknis, itu akan mengharuskan Anda untuk membuat database offline saat Anda melakukannya, yang akan menjadi peristiwa yang mempengaruhi layanan.

Jika Anda ingin melakukan ini tanpa downtime DAN jika Anda menggunakan Kumpulan Replika MongoDB [1], Anda dapat melakukannya seperti ini:

  1. Pilih anggota dan hentikan MongoDB di sana (layanan mongodb berhenti). Jika ini adalah PRIMARY, tunggu anggota lain untuk terpilih menjadi PRIMARY.
  2. Hapus file data pada anggota ini (cd / var / lib / mongodb; rm *).
  3. Mulai kembali layanan MongoDB lagi (layanan mongodb mulai).
  4. Tunggu anggota untuk melakukan sinkronisasi ulang ke PRIMARY (rs.status ()).
  5. Ini hanya akan membangun kembali file data yang diperlukan (lebih kecil).

Kemudian ulangi langkah-langkah di atas untuk masing-masing anggota lain dalam Set Replika.

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

James Mernin
sumber