Dengan gerakan NoSQL yang tumbuh berdasarkan pada basis data berbasis dokumen, saya telah melihat MongoDB belakangan ini. Saya telah melihat kesamaan yang mencolok dengan cara memperlakukan item sebagai "Dokumen", seperti halnya Lucene (dan pengguna Solr).
Jadi, pertanyaannya: Mengapa Anda ingin menggunakan NoSQL (MongoDB, Cassandra, CouchDB, dll) di atas Lucene (atau Solr) sebagai "basis data" Anda?
Apa yang saya (dan saya yakin orang lain) cari dalam jawaban adalah beberapa perbandingan mendalam dari mereka. Mari kita lewati semua diskusi basis data relasional, karena mereka melayani tujuan yang berbeda.
Lucene memberikan beberapa keuntungan serius, seperti sistem pencarian dan berat yang kuat. Belum lagi aspek dalam Solr (yang Solr sedang diintegrasikan ke dalam Lucene segera, yay!). Anda dapat menggunakan dokumen Lucene untuk menyimpan ID, dan mengakses dokumen seperti itu seperti MongoDB. Campur dengan Solr, dan Anda sekarang mendapatkan solusi load-based berbasis WebService.
Anda bahkan dapat membandingkan penyedia cache out-of-proc seperti Velocity atau MemCached ketika berbicara tentang penyimpanan data yang serupa dan skalabilitas MongoDB.
Pembatasan seputar MongoDB mengingatkan saya untuk menggunakan MemCached, tetapi saya dapat menggunakan Microsoft Velocity dan memiliki lebih banyak pengelompokan dan daftar kekuatan pengumpulan atas MongoDB (saya pikir). Tidak bisa mendapatkan yang lebih cepat atau scalable dari caching data di memori. Bahkan Lucene memiliki penyedia memori.
MongoDB (dan lainnya) memang memiliki beberapa kelebihan, seperti kemudahan penggunaan API mereka. Baru membuat dokumen, membuat id, dan menyimpannya. Selesai Baik dan mudah.
Jawaban:
Ini adalah pertanyaan yang bagus, sesuatu yang telah saya renungkan sedikit. Saya akan meringkas pelajaran yang saya pelajari:
Anda dapat dengan mudah menggunakan Lucene / Solr sebagai pengganti MongoDB untuk hampir semua situasi, tetapi tidak sebaliknya. Pos Grant Ingersoll merangkumnya di sini.
MongoDB dll. Tampaknya melayani tujuan di mana tidak ada persyaratan untuk mencari dan / atau faceting. Tampaknya menjadi transisi yang lebih sederhana dan bisa dibilang lebih mudah bagi para programmer yang melakukan detoks dari dunia RDBMS. Kecuali seseorang terbiasa, Lucene & Solr memiliki kurva belajar yang lebih curam.
Tidak ada banyak contoh menggunakan Lucene / Solr sebagai datastore, tetapi Guardian telah membuat beberapa kemajuan dan meringkas ini dalam slide-deck yang sangat baik , tetapi mereka juga tidak berkomitmen untuk benar-benar melompat pada kereta musik Solr dan "menyelidiki" menggabungkan Solr dengan CouchDB.
Akhirnya, saya akan menawarkan pengalaman kami, sayangnya tidak dapat mengungkapkan banyak tentang kasus bisnis. Kami bekerja pada skala beberapa TB data, aplikasi waktu nyata yang dekat. Setelah menyelidiki berbagai kombinasi, memutuskan untuk tetap menggunakan Solr. Tidak ada penyesalan sejauh ini (6 bulan & terus bertambah) dan tidak melihat alasan untuk beralih ke yang lain.
Ringkasan: jika Anda tidak memiliki persyaratan pencarian, Mongo menawarkan pendekatan yang sederhana & kuat. Namun jika pencarian adalah kunci dari penawaran Anda, Anda mungkin lebih baik tetap berpegang pada satu teknologi (Solr / Lucene) dan mengoptimalkan heck keluar darinya - bagian bergerak lebih sedikit.
2 sen saya, harapan yang membantu.
sumber
Anda tidak dapat memperbarui sebagian dokumen dalam solr. Anda harus memposting ulang semua bidang untuk memperbarui dokumen.
Dan masalah kinerja. Jika Anda tidak berkomitmen, perubahan Anda untuk solr tidak berlaku, jika Anda berkomitmen setiap waktu, kinerja akan terganggu.
Tidak ada transaksi dalam solr.
Karena solr memiliki kekurangan ini, beberapa kali nosql adalah pilihan yang lebih baik.
sumber
Kami menggunakan MongoDB dan Solr bersama-sama dan mereka bekerja dengan baik. Anda dapat menemukan posting blog saya di sini di mana saya menjelaskan bagaimana kami menggunakan teknologi ini bersama-sama. Berikut ini kutipannya:
sumber
Juga harap dicatat bahwa beberapa orang telah mengintegrasikan Solr / Lucene ke dalam Mongo dengan meminta agar semua indeks disimpan di Solr dan juga memantau operasi oplog dan membagi pembaruan yang relevan ke dalam Solr.
Dengan pendekatan hybrid ini Anda benar-benar dapat memiliki yang terbaik dari kedua dunia dengan kemampuan seperti pencarian teks lengkap dan membaca cepat dengan datastore yang andal yang juga dapat memiliki kecepatan menulis yang sangat tinggi.
Agak teknis untuk setup tetapi ada banyak tailer oplog yang dapat diintegrasikan ke dalam solr. Lihat rentang apa yang dilakukan di artikel ini.
http://denormalised.com/home/mongodb-pub-sub-using-the-replication-oplog.html
sumber
Dari pengalaman saya dengan keduanya, Mongo sangat bagus untuk penggunaan yang sederhana dan mudah. Kerugian utama Mongo yang kami alami adalah kinerja yang buruk pada kueri yang tidak diantisipasi (Anda tidak dapat membuat indeks mongo untuk semua kemungkinan kombinasi filter / sortir, Anda tidak bisa).
Dan di sini tempat Lucene / Solr menang, terutama dengan caching FilterQuery, Performa luar biasa.
sumber
Karena tidak ada orang lain yang menyebutkannya, izinkan saya menambahkan bahwa MongoDB adalah skema-kurang, sedangkan Solr memberlakukan skema. Jadi, jika bidang dokumen Anda cenderung berubah, itu salah satu alasan untuk memilih MongoDB daripada Solr.
sumber
schema.xml
, TETAPI itu juga memiliki 'bidang dinamis', yaitu bidang yang jenisnya ditentukan melalui kartu liar, sehingga Anda dapat memiliki semua bidang yang cocok, misalnya,*_i
diindeks sebagai bidang bilangan bulat. saat menambahkan dokumen, maka Anda dapat memiliki dokumen conaining bidang seperticount_i
,foo_i
,bar_i
yang semuanya dipahami sebagai bidang bilangan bulat tanpa muncul dischema.xml
harfiah. skema-kurang cantik, kataku. lihat youtube.com/watch?v=WYVM6Wz-XTw untuk informasi lebih lanjut.@ mauricio-scheffer menyebut Solr 4 - bagi mereka yang tertarik, LucidWorks menggambarkan Solr 4 sebagai "Server Pencarian NoSQL" dan ada video di http://www.lucidworks.com/webinar-solr-4-the-nosql -search-server / tempat perinciannya tentang fitur NoSQL (ish). (The -ish untuk versi schemaless mereka sebenarnya adalah skema dinamis.)
sumber
Jika Anda hanya ingin menyimpan data menggunakan format nilai kunci, Lucene tidak direkomendasikan karena indeks terbalik akan membuang terlalu banyak ruang disk. Dan dengan penghematan data dalam disk, kinerjanya jauh lebih lambat daripada database NoSQL seperti redis karena redis menyimpan data dalam RAM. Keuntungan paling bagi Lucene adalah mendukung banyak permintaan, sehingga permintaan fuzzy dapat didukung.
sumber
Solusi pihak ketiga, seperti mongo op-log tail sangat menarik. Masih ada beberapa pemikiran atau pertanyaan tentang apakah solusi tersebut dapat diintegrasikan secara erat, dengan asumsi perspektif pengembangan / arsitektur. Saya tidak berharap melihat solusi yang terintegrasi erat untuk fitur-fitur ini karena beberapa alasan (agak spekulatif dan dapat diklarifikasi dan tidak up to date dengan upaya pengembangan):
sumber
MongoDB Atlas akan segera memiliki mesin pencari berbasis lucene. Pengumuman besar dibuat pada konferensi Dunia MongoDB 2019 minggu ini. Ini adalah cara yang bagus untuk mendorong lebih banyak penggunaan produk MongoDB Atlas berpenghasilan tinggi.
Saya berharap untuk melihatnya masuk ke MongoDB Enterprise versi 4.2 tetapi tidak ada berita untuk membawanya ke lini produk on-prem mereka.
Info lebih lanjut di sini: https://www.mongodb.com/atlas/full-text-search
sumber