MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Apakah MongoDB menggunakan kembali ruang yang dihapus?

Pembaruan (Maret 2015): Pada rilis 3.0, ada beberapa mesin penyimpanan yang tersedia di MongoDB. Jawaban ini berlaku untuk mesin penyimpanan MMAP (masih default di MongoDB 3.0), jawaban untuk mesin lain (WiredTiger misalnya) cukup berbeda dan mungkin dapat disetel dan disesuaikan. Oleh karena itu, jika Anda menggunakan mesin lain, harap baca dokumen yang relevan untuk mesin penyimpanan tersebut guna menentukan default dan opsi penggunaan kembali ruang Anda.

Dengan mesin penyimpanan MMAP, ketika dokumen dihapus, ruang yang tertinggal akan dimasukkan ke dalam daftar gratis. Namun, untuk menggunakan ruang tersebut, nanti perlu ada dokumen berukuran sama yang dimasukkan, dan MongoDB perlu menemukan ruang yang sesuai untuk dokumen itu dalam jangka waktu tertentu (setelah waktu habis melihat daftar, itu hanya akan ditambahkan) jika tidak penggunaan kembali ruang tidak akan sering terjadi. Penghapusan ini dilakukan di dalam file data, jadi tidak ada reklamasi ruang disk yang terjadi di sini - semua ini dilakukan secara internal di dalam file data yang ada.

Jika Anda kemudian melakukan perbaikan, atau menyinkronkan ulang sekunder dari awal, file data akan ditulis ulang dan ruang pada disk akan diambil kembali (setiap padding pada dokumen juga dihapus). Di sinilah Anda akan melihat reklamasi ruang aktual pada disk. Untuk tindakan lain (termasuk kompak) penggunaan pada disk tidak akan berubah dan bahkan dapat meningkat.

Dengan 2.2+ Anda sekarang dapat menggunakan perintah colMod dan opsi usePowersOf2Sizes untuk membuat penggunaan kembali ruang yang dihapus lebih mungkin (perhatikan bahwa ini adalah default di 2.6+). Ini berarti bahwa alokasi ruang awal untuk dokumen sedikit kurang efisien (512 byte untuk dokumen 400 byte misalnya) tetapi berarti bahwa ketika dokumen baru dimasukkan, kemungkinan besar ruang tersebut dapat digunakan kembali. Jika Anda menghapus (atau mengembangkan dan karenanya memindahkan) banyak dokumen, maka ini akan lebih efisien dalam jangka panjang.

Bagi siapa saja yang tertarik, salah satu orang yang menulis banyak kode penyimpanan (Mathias Stearn) memiliki presentasi yang bagus tentang internal penyimpanan, yang dapat ditemukan di sini




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB - Impor Data

  2. GSSException:Tidak ada kredensial valid yang diberikan (Tingkat mekanisme:Gagal menemukan Kerberos tgt)

  3. Mengambil HTML dari MongoDB untuk digunakan di Template

  4. MongoDB $hariDariBulan

  5. Memperbarui properti dokumen yang disematkan di Mongodb