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

Mengapa nama kunci disimpan dalam dokumen di MongodDB

Apa yang Anda maksud sering disebut "kompresi tombol"*. Ada beberapa alasan mengapa belum diterapkan:

  1. Jika Anda ingin melakukannya, saat ini Anda dapat melakukannya di level Aplikasi/ORM/ODM dengan cukup mudah.
  2. Ini belum tentu merupakan keunggulan kinerja** dalam semua kasus — pikirkan koleksi dengan banyak nama kunci, dan/atau nama kunci yang sangat bervariasi antar dokumen.
  3. Ini mungkin tidak memberikan keuntungan kinerja yang terukur** sama sekali sampai Anda memiliki jutaan dokumen.
  4. Jika server melakukannya, nama kunci lengkap masih harus dikirimkan melalui jaringan.
  5. Jika nama kunci terkompresi ditransmisikan melalui jaringan, maka keterbacaan benar-benar menderita menggunakan konsol javascript.
  6. Mengompresi seluruh dokumen JSON mungkin menawarkan menawarkan keunggulan kinerja yang lebih baik.

Seperti semua fitur, ada analisis biaya manfaat untuk menerapkannya, dan (setidaknya sejauh ini) fitur lain telah menawarkan lebih banyak "keuntungan".

Kompresi dokumen lengkap [sedang dipertimbangkan][1] untuk versi MongoDB mendatang. tersedia pada versi 3.0 (lihat di bawah)

* Tabel pencarian dalam memori untuk nama kunci pada dasarnya adalah kasus khusus kompresi gaya LZW — kurang lebih seperti itulah yang dilakukan oleh sebagian besar algoritme kompresi.

** Kompresi memberikan keuntungan ruang dan keuntungan kinerja. Dokumen yang lebih kecil berarti lebih banyak dokumen yang dapat dibaca per IO, yang berarti bahwa dalam sistem dengan IO tetap, lebih banyak dokumen per detik yang dapat dibaca.

Perbarui

MongoDB versi 3.0 dan lebih tinggi sekarang memiliki kemampuan kompresi dokumen lengkap dengan WiredTiger mesin penyimpanan.

Tersedia dua algoritme kompresi:snappy , dan zlib . Tujuannya adalah agar snappy menjadi pilihan terbaik untuk performa menyeluruh, dan agar zlib menjadi pilihan terbaik untuk kapasitas penyimpanan maksimum.

Dalam eksperimen pribadi saya (non-ilmiah, tetapi terkait dengan proyek komersial), kompresi tajam (kami tidak mengevaluasi zlib) menawarkan kepadatan penyimpanan yang meningkat secara signifikan tanpa biaya kinerja bersih yang nyata. Faktanya, ada performa yang sedikit lebih baik dalam beberapa kasus, kira-kira sejalan dengan komentar/prediksi saya sebelumnya.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. pembaruan javascript mongodb

  2. Pymongo menemukan nilai dalam subdokumen

  3. $skip dan $limit dalam kerangka agregasi

  4. Mongodb:beberapa koleksi atau satu koleksi besar dengan indeks

  5. Agregasi MongoDb $lookup dengan _id asing dalam array