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

Otomatis memadatkan ruang yang dihapus di mongodb?

Secara umum jika Anda tidak perlu mengecilkan file data Anda, Anda tidak perlu mengecilkannya sama sekali. Ini karena "menumbuhkan" file data Anda di disk adalah operasi yang cukup mahal dan semakin banyak ruang yang dapat dialokasikan MongoDB dalam file data, semakin sedikit fragmentasi yang Anda miliki.

Jadi, Anda harus mencoba menyediakan ruang disk sebanyak mungkin untuk database.

Namun jika Anda harus mengecilkan database, Anda harus mengingat dua hal.

  1. MongoDB mengembangkan file datanya menjadi dua kali lipat sehingga file data mungkin 64MB, lalu 128MB, dll hingga 2GB (di mana ia berhenti menggandakan untuk menyimpan file hingga 2GB.)

  2. Seperti kebanyakan basis data lainnya ... untuk melakukan operasi seperti penyusutan Anda harus menjadwalkan pekerjaan terpisah untuk melakukannya, tidak ada "penyusutan otomatis" di MongoDB. Faktanya dari database noSQL utama (benci nama itu) hanya Riak yang akan menyusut secara otomatis. Jadi, Anda harus membuat pekerjaan menggunakan penjadwal OS Anda untuk menjalankan psikiater. Anda dapat menggunakan skrip bash, atau menjalankan tugas menjalankan skrip php, dll.

Javascript Sisi Server

Anda dapat menggunakan Javascript sisi server untuk melakukan penyusutan dan menjalankan JS itu melalui shell mongo pada basis reguler melalui pekerjaan (seperti cron atau layanan penjadwalan windows) ...

Dengan asumsi koleksi yang disebut foo Anda akan menyimpan javascript di bawah ini ke dalam file bernama bar.js dan jalankan ...

$ mongo foo bar.js

File javascript akan terlihat seperti ...

// Get a the current collection size.
var storage = db.foo.storageSize();
var total = db.foo.totalSize();

print('Storage Size: ' + tojson(storage));

print('TotalSize: ' + tojson(total));

print('-----------------------');
print('Running db.repairDatabase()');
print('-----------------------');

// Run repair
db.repairDatabase()

// Get new collection sizes.
var storage_a = db.foo.storageSize();
var total_a = db.foo.totalSize();

print('Storage Size: ' + tojson(storage_a));
print('TotalSize: ' + tojson(total_a));

Ini akan berjalan dan mengembalikan sesuatu seperti ...

MongoDB shell version: 1.6.4
connecting to: foo
Storage Size: 51351
TotalSize: 79152
-----------------------
Running db.repairDatabase()
-----------------------
Storage Size: 40960
TotalSize: 65153

Jalankan ini sesuai jadwal (tidak ada jam sibuk) dan Anda siap melakukannya.

Koleksi yang Dibatasi

Namun ada satu opsi lain, koleksi yang dibatasi .

Pada dasarnya Anda dapat membatasi ukuran (atau jumlah dokumen dalam ) koleksi untuk mengatakan .. 20GB dan setelah batas itu tercapai MongoDB akan mulai membuang catatan terlama dan menggantinya dengan entri yang lebih baru saat mereka masuk.

Ini adalah cara yang bagus untuk menyimpan data dalam jumlah besar, membuang data lama seiring berjalannya waktu, dan mempertahankan jumlah ruang disk yang digunakan.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Cara mengkonfigurasi MongoMapper dan ActiveRecord di Proyek Ruby Rails yang sama

  2. Redis vs MongoDB

  3. Bagaimana cara menambahkan definisi makro di cmake?

  4. Bagaimana Anda melakukan join pada array di luwak (mongodb) dengan node.js?

  5. Luwak membuat array kosong?