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

indeks mongodb yang mencakup nilai yang hilang

Ada dua fitur relevan dari indeks yang memungkinkan pencarian cepat (dibandingkan dengan melakukan pemindaian koleksi):

  • Pengurutan nilai
  • Kekompakan nilai yang diindeks

Jika Anda memiliki nilai a dan b , Anda dapat mengatakan bahwa a muncul sebelum b , secara leksikografis. Jika Anda memiliki dokumen {a: 2, b: 5} dan {b: 4, a: 3} , tidak ada satu pun urutan dokumen ini yang akan memenuhi kueri biasa. Misalnya, jika Anda ingin semua a nilai yang dipesan maka Anda mungkin mengharapkan 2, 3 , tetapi jika Anda menginginkan b nilai yang mungkin Anda harapkan 4, 5 - mengharuskan urutan dokumen dibalik.

Ketika database menyimpan indeks pada disk, nilainya disimpan dalam urutan indeks (apa pun itu untuk indeks tertentu, mis. Umumnya tidak ada pemesanan tunggal yang dapat digunakan untuk dokumen koleksi secara keseluruhan, sehingga dokumen koleksi tidak berurutan.

Saat Anda membuat kueri berdasarkan indeks, Anda mengambil nilai yang sedang dicari dan pada dasarnya menjalankan pencarian biner menggunakan indeks karena data dalam indeks diurutkan.

Alasan kedua untuk menggunakan indeks adalah, jika Anda memindai koleksi, untuk setiap dokumen, seluruh dokumen biasanya perlu diambil dari disk dan dilewati. Jika Anda memiliki koleksi 100 GB dan sedang melakukan pemindaian, Anda mungkin perlu melewati lebih dari 100 GB data. Jika koleksi yang sama memiliki indeks 100 MB di beberapa bidang (karena indeks hanya menyimpan nilai di bidang itu dan bukan nilai data seluruh dokumen), dan database melakukan pemindaian indeks lengkap, ia hanya perlu melintasi 100 MB data.

Sekarang, untuk pertanyaan Anda tentang menyimpan kurangnya nilai dalam indeks.

Dari sudut pandang indeks, "kurangnya nilai" dalam dokumen yang berbeda adalah nilai yang sama. Anda kehilangan kemampuan untuk melakukan pencarian biner ketika semua nilai Anda identik. Jadi, jika Anda mencari dokumen "kurang nilai" itu, indeks akan mengembalikan semua dokumen dalam koleksi yang tidak bernilai, dan kemudian Anda harus tetap memindainya untuk memfilter menurut kondisi lain apa pun yang Anda inginkan. memiliki. Karena ini umumnya menghasilkan selektivitas yang buruk, database tidak peduli dengan indeks dan melakukan pemindaian koleksi sejak awal.

Dan, kemungkinan besar Anda ingin beberapa bidang lain keluar dari kueri Anda, bukan bidang yang tidak memiliki nilai. Jadi sekarang Anda ingin indeks menyimpan dokumen lengkap, mengalahkan ide kekompakan.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Luwak:apakah _id khusus perlu dideklarasikan sebagai indeks dan unik?

  2. Bagaimana server utama mati akan ditangani secara otomatis dalam replikasi mongodb

  3. Tidak dapat memasukkan data ke dalam koleksi mongodalab

  4. Kueri MongoDB terlalu lambat, meskipun kuerinya sederhana dan selaras dengan indeks

  5. Topologi nodejs Mongolab hancur