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

Mengapa trailing 0x00 byte setelah string BSON (bukan Cstring/ename)?

Alasan panjang string dan terminator nol ada dua:kompatibilitas dengan string gaya-C yang ada, dan performa.

Untuk kinerja, MongoDB harus dapat dengan cepat membuka bidang tertentu dalam dokumen tanpa mengulangi seluruh BSON. Ini penting terutama jika Anda mencari bidang yang dekat dengan akhir dokumen besar (misalnya 16 MB). Dengan panjang string yang dikodekan sebagai salah satu informasi pertama pada tipe string, itu hanya dapat melewati jumlah byte itu dan sampai ke bidang berikutnya. Jika tidak, ia perlu mengulangi seluruh string hingga menemukan akhir string.

Untuk kompatibilitas, MongoDB ditulis dalam C++, dengan string null dihentikan . Itu dapat memotong terminator nol itu untuk menghemat satu byte karena panjangnya dikodekan, tetapi mengeluarkan string itu dari BSON ke dalam format yang dapat digunakan oleh C++ akan membutuhkan penyambungan pada nol itu lagi. Ini akan membutuhkan rutin penanganan string khusus yang satu-satunya keuntungan adalah menghemat satu byte.

Secara keseluruhan, diputuskan bahwa "membuang" satu byte adalah pertukaran yang dapat diterima.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Mongodb:Dapatkan dokumen yang diurutkan berdasarkan peringkat dinamis

  2. Mongodb Sharding - tidak ada perintah seperti itu:'addShard'

  3. Mongodb $in terhadap bidang objek array alih-alih objek array

  4. lookup dengan kondisi di luwak

  5. Cara menggunakan fungsi agregasi mongo db-query