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

Bagaimana cara mengoptimalkan kueri MongoDB dengan $gt dan $lte?

Jadi, kueri rentang ganda tidak disarankan di Mongo. Saya berasumsi Anda memiliki satu indeks yang berisi {start_ip_num: 1, end_ip_num: 1} .

Jika itu tidak membuat Anda cukup dekat (sering kali masih lambat jika Anda memiliki cukup data yang dikembalikan oleh bidang pertama, karena harus melakukan banyak pemindaian B-tree), ada satu trik yang dapat Anda lakukan untuk mengatasi ini menggunakan kueri kotak 2D (hanya berfungsi untuk dua rentang sekaligus).

Pada dasarnya, Anda menempatkan indeks geografis 2D pada bidang yang berisi dua titik dalam array, seperti [start_ip, end_ip], dan berikan nilai min/maks yang cukup tinggi sehingga tidak akan mencapai batas yang secara default saja -180/180.

Terakhir, gunakan kueri batas dengan rentang mulai dari min hingga nilai $lte di salah satu sudut kotak, dan nilai gt dan maks di sudut lain kotak. Lihat http://www.mongodb.org/display/DOCS/ Geospatial+Indexing#GeospatialIndexing-BoundsQueries untuk sintaks.

Tampilannya seperti ini:

db.ip_ranges.find({ip_range:{$within:{$box:[[0, 1204135028], [1204135028, max]]}}});

di mana max adalah ip terbesar yang bisa Anda miliki.

Sudah lama sejak saya melihat ini, jadi kotaknya mungkin salah, tetapi konsepnya bagus, dan itu membuat kueri rentang ganda berkinerja sedikit lebih baik daripada dengan indeks B-tree dua bidang biasa. Secara konsisten di bawah satu detik (walaupun biasanya beberapa ratus ms), dibandingkan dengan beberapa detik dengan indeks biasa--Saya pikir saya memiliki ratusan juta dokumen pada saat itu, tetapi sudah lama jadi ambil tolok ukur yang diingat ini dengan biji-bijian garam. Hasilnya akan sangat bervariasi tergantung pada data dan ukuran rentang Anda, saya yakin.

Pembaruan: Anda mungkin ingin bereksperimen dengan bits pengaturan, mencoba angka rendah dan angka tinggi untuk melihat apakah ada bedanya. Bagi saya, itu tampaknya tidak memengaruhi kueri secara rata-rata. Lihat http://www.mongodb.org/display/DOCS/ Geospatial+Indexing#GeospatialIndexing-MembuatIndeks untuk sintaks.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Pencarian geospasial luwak:jarak tidak berfungsi

  2. Cara memfilter data antara dua kali dari jj:mm ke jj:mm di mongoDB

  3. Kinerja ClusterControl dan Pemantauan Kesehatan

  4. Mongo Query Pada Beberapa Bidang Sub-Dokumen

  5. Robomongo :Melebihi batas memori untuk $group