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

pencarian elastis vs. MongoDB untuk memfilter aplikasi

Pertama, ada perbedaan penting untuk dibuat di sini:MongoDB adalah database tujuan umum, Elasticsearch adalah mesin pencari teks terdistribusi yang didukung oleh Lucene. Orang-orang telah berbicara tentang menggunakan Elasticsearch sebagai database tujuan umum tetapi tahu bahwa itu bukan desain aslinya. Saya pikir database dan mesin pencari NoSQL tujuan umum sedang menuju konsolidasi tetapi sebagaimana adanya, keduanya berasal dari dua kubu yang sangat berbeda.

Kami menggunakan MongoDB dan Elasticsearch di perusahaan saya. Kami menyimpan data kami di MongoDB dan menggunakan Elasticsearch secara eksklusif untuk kemampuan pencarian teks lengkapnya. Kami hanya mengirim subset dari bidang data mongo yang perlu kami kueri ke elastic. Kasus penggunaan kami berbeda dari Anda karena data Mongo kami berubah sepanjang waktu:catatan, atau subset bidang catatan, dapat diperbarui beberapa kali sehari dan ini dapat meminta pengindeksan ulang catatan itu menjadi elastis. Untuk alasan itu saja, menggunakan elastic sebagai satu-satunya penyimpanan data bukanlah pilihan yang baik bagi kami, karena kami tidak dapat memperbarui bidang tertentu; kita perlu mengindeks ulang dokumen secara keseluruhan. Ini bukan batasan elastis, ini adalah cara kerja Lucene, mesin pencari yang mendasari di balik elastis. Dalam kasus Anda, fakta bahwa catatan tidak akan diubah setelah disimpan menyelamatkan Anda dari keharusan membuat pilihan itu. Karena itu, jika keamanan data menjadi perhatian, saya akan berpikir dua kali untuk menggunakan Elasticsearch sebagai satu-satunya mekanisme penyimpanan untuk data Anda. Ini mungkin sampai di sana di beberapa titik, tetapi saya belum yakin itu ada di sana.

Dalam hal kecepatan, tidak hanya Elastis/Lucene yang setara dengan kecepatan kueri Mongo, dalam kasus Anda di mana ada "sangat sedikit konstanta dalam hal bidang mana yang digunakan untuk pemfilteran setiap saat", itu bisa berupa perintah besarnya lebih cepat, terutama karena kumpulan data menjadi lebih besar. Perbedaannya terletak pada implementasi kueri yang mendasarinya:

  • Elastic/Lucene menggunakan Model Ruang Vektor dan indeks terbalik untuk Pengambilan Informasi, yang merupakan cara yang sangat efisien untuk membandingkan kesamaan catatan dengan kueri. Saat Anda menanyakan Elastis/Lucene, ia sudah tahu jawabannya; sebagian besar pekerjaannya terletak pada memberi peringkat hasil untuk Anda dengan yang paling mungkin cocok dengan istilah kueri Anda. Ini adalah poin penting:mesin pencari, sebagai lawan dari database, tidak dapat menjamin Anda hasil yang tepat; mereka memberi peringkat hasil berdasarkan seberapa dekat mereka dengan kueri Anda. Kebetulan sebagian besar waktu, hasilnya mendekati persis.
  • Pendekatan Mongo adalah seperti penyimpanan data tujuan yang lebih umum; itu membandingkan dokumen JSON satu sama lain. Anda bisa mendapatkan kinerja yang luar biasa dari itu dengan segala cara, tetapi Anda harus hati-hati menyusun indeks Anda agar sesuai dengan kueri yang akan Anda jalankan. Khususnya, jika Anda memiliki beberapa bidang yang akan Anda kueri, Anda perlu menyusun kunci majemuk Anda dengan hati-hati sehingga mereka mengurangi kumpulan data yang akan dikueri secepat mungkin. Misalnya. kunci pertama Anda harus menyaring sebagian besar kumpulan data Anda, kunci kedua Anda selanjutnya harus menyaring apa yang tersisa, dan seterusnya dan seterusnya. Jika kueri Anda tidak cocok dengan kunci dan urutan kunci tersebut dalam indeks yang ditentukan, kinerja Anda akan turun sedikit. Di sisi lain, Mongo adalah database yang benar, jadi jika akurasi adalah yang Anda butuhkan, jawaban yang akan diberikan akan tepat.

Untuk catatan lama yang kedaluwarsa, Elastic memiliki fitur TTL bawaan. Mongo baru saja memperkenalkannya pada versi 2.2.

Karena saya tidak tahu persyaratan Anda yang lain seperti ukuran data yang diharapkan, transaksi, akurasi, atau seperti apa tampilan filter Anda, sulit untuk membuat rekomendasi khusus. Mudah-mudahan, ini cukup untuk membantu Anda memulai.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Kueri bersarang luwak pada Model berdasarkan bidang model yang direferensikannya

  2. Buat Koleksi di MongoDB

  3. Cara menyimpan bidang Tanggal sebagai ISODate() menggunakan jackson di MongoDb

  4. Simpul luwak menemukan kueri dalam lingkaran tidak berfungsi

  5. jenis kustom luwak/mongodb