Da die NoSQL-Bewegung basierend auf dokumentbasierten Datenbanken wächst, habe ich mir in letzter Zeit MongoDB angesehen. Ich habe eine bemerkenswerte Ähnlichkeit mit der Behandlung von Elementen als "Dokumente" festgestellt, genau wie Lucene (und Benutzer von Solr).
Die Frage: Warum sollten Sie NoSQL (MongoDB, Cassandra, CouchDB usw.) über Lucene (oder Solr) als "Datenbank" verwenden?
Was ich (und ich bin sicher, dass andere) in einer Antwort suchen, sind einige tiefgreifende Vergleiche von ihnen. Lassen Sie uns alle relationalen Datenbankdiskussionen überspringen, da sie einem anderen Zweck dienen.
Lucene bietet einige ernsthafte Vorteile, wie z. B. leistungsstarke Such- und Gewichtssysteme. Ganz zu schweigen von den Facetten in Solr (die Solr bald in Lucene integriert, yay!). Sie können Lucene-Dokumente verwenden, um IDs zu speichern und wie MongoDB auf die Dokumente als solche zuzugreifen. Mischen Sie es mit Solr, und Sie erhalten jetzt eine WebService-basierte Lösung mit Lastenausgleich.
Sie können sogar einen Vergleich von Out-of-Proc-Cache-Anbietern wie Velocity oder MemCached durchführen, wenn Sie über ähnliche Datenspeicherung und Skalierbarkeit von MongoDB sprechen.
Die Einschränkungen in Bezug auf MongoDB erinnern mich an die Verwendung von MemCached, aber ich kann Microsoft Velocity verwenden und über MongoDB mehr Möglichkeiten zum Gruppieren und Sammeln von Listen verfügen (glaube ich). Schneller oder skalierbarer kann es nicht sein, Daten im Speicher zwischenzuspeichern. Sogar Lucene hat einen Speicheranbieter.
MongoDB (und andere) haben einige Vorteile, wie zum Beispiel die Benutzerfreundlichkeit ihrer API. Erstellen Sie ein neues Dokument, erstellen Sie eine ID und speichern Sie es. Getan. Schön und einfach.
Antworten:
Dies ist eine großartige Frage, über die ich schon viel nachgedacht habe. Ich werde meine gewonnenen Erkenntnisse zusammenfassen:
Sie können Lucene / Solr anstelle von MongoDB problemlos für nahezu alle Situationen verwenden, jedoch nicht umgekehrt. Grant Ingersolls Beitrag fasst es hier zusammen.
MongoDB usw. scheinen einen Zweck zu erfüllen, bei dem keine Suche und / oder Facettierung erforderlich ist. Es scheint ein einfacher und wohl einfacher Übergang für Programmierer zu sein, die sich von der RDBMS-Welt entgiften. Wenn man nicht daran gewöhnt ist, haben Lucene & Solr eine steilere Lernkurve.
Es gibt nicht viele Beispiele für die Verwendung Lucene / Solr als Datenspeicher, sondern Hüter hat einige Fortschritte gemacht und fassen diese in einem ausgezeichneten Dia-Deck , aber sie sind auch nicht verbindlich auf völlig Springen auf Solr fahrenden Zug und „Untersuchung“ die Kombination von Solr mit CouchDB.
Schließlich werde ich unsere Erfahrung anbieten, kann leider nicht viel über den Business-Case verraten. Wir arbeiten auf der Skala von mehreren TB Daten, eine nahezu Echtzeitanwendung. Nachdem ich verschiedene Kombinationen untersucht hatte, entschied ich mich, bei Solr zu bleiben. Bisher kein Bedauern (6 Monate & Zählen) und kein Grund, zu einem anderen zu wechseln.
Zusammenfassung: Wenn Sie keine Suchanforderung haben, bietet Mongo einen einfachen und leistungsstarken Ansatz. Wenn jedoch die Suche der Schlüssel zu Ihrem Angebot ist, ist es wahrscheinlich besser, sich an eine Technologie (Solr / Lucene) zu halten und das Beste daraus zu machen - weniger bewegliche Teile.
Meine 2 Cent, hoffe das hat geholfen.
quelle
Sie können ein Dokument in solr nicht teilweise aktualisieren. Sie müssen alle Felder erneut buchen, um ein Dokument zu aktualisieren.
Und Leistung ist wichtig. Wenn Sie kein Commit durchführen, wird Ihre Änderung an solr nicht wirksam. Wenn Sie jedes Mal ein Commit durchführen, leidet die Leistung.
Es gibt keine Transaktion in solr.
Da solr diese Nachteile hat, ist manchmal nosql die bessere Wahl.
quelle
Wir verwenden MongoDB und Solr zusammen und sie arbeiten gut. Sie finden meinen Blog-Beitrag hier, in dem ich beschrieben habe, wie wir diese Technologien gemeinsam einsetzen. Hier ist ein Auszug:
quelle
Bitte beachten Sie auch, dass einige Leute Solr / Lucene in Mongo integriert haben, indem sie alle Indizes in Solr gespeichert haben und auch Oplog-Operationen überwachen und relevante Updates in Solr kaskadieren.
Mit diesem hybriden Ansatz können Sie das Beste aus beiden Welten mit Funktionen wie Volltextsuche und schnellem Lesen mit einem zuverlässigen Datenspeicher erzielen, der auch eine hervorragende Schreibgeschwindigkeit aufweisen kann.
Das Einrichten ist etwas technisch, aber es gibt viele Oplog-Tailer, die sich in solr integrieren lassen. Lesen Sie in diesem Artikel, was Rangespan getan hat.
http://denormalised.com/home/mongodb-pub-sub-using-the-replication-oplog.html
quelle
Aus meiner Erfahrung mit beiden eignet sich Mongo hervorragend für die einfache und unkomplizierte Verwendung. Der Hauptnachteil von Mongo ist die schlechte Leistung bei unerwarteten Abfragen (Sie können keine Mongo-Indizes für alle möglichen Filter- / Sortierkombinationen erstellen, das können Sie einfach nicht).
Und hier, wo Lucene / Solr besonders beim FilterQuery-Caching eine große Rolle spielt, ist die Leistung hervorragend.
quelle
Da es sonst niemand erwähnt hat, möchte ich hinzufügen, dass MongoDB schemalos ist, während Solr ein Schema erzwingt. Wenn sich also die Felder Ihrer Dokumente wahrscheinlich ändern, ist dies ein Grund, MongoDB anstelle von Solr zu wählen.
quelle
schema.xml
, ABER es hat auch 'dynamische Felder', dh Felder, deren Typen über Platzhalter bestimmt werden, so dass Sie alle Felder, die übereinstimmen, beispielsweise*_i
als ganzzahlige Felder indizieren lassen können. wenn Dokumente hinzufügen, können Sie dann Dokumente conaining Felder wiecount_i
,foo_i
,bar_i
die ohne erscheinen in allen verstanden als Integer - Felder sindschema.xml
buchstäblich. ziemlich schemalos, würde ich sagen. Weitere Informationen finden Sie unter youtube.com/watch?v=WYVM6Wz-XTw .@ mauricio-scheffer erwähnte Solr 4 - für diejenigen, die daran interessiert sind, beschreibt LucidWorks Solr 4 als "NoSQL Search Server" und es gibt ein Video unter http://www.lucidworks.com/webinar-solr-4-the-nosql -search-server / wo sie detailliert auf die NoSQL (ish) -Funktionen eingehen. (Die -ish ist für ihre Version von schemaless tatsächlich ein dynamisches Schema.)
quelle
Wenn Sie nur Daten im Schlüsselwertformat speichern möchten, wird Lucene nicht empfohlen, da der invertierte Index zu viel Speicherplatz verschwendet. Und mit dem Speichern von Daten auf der Festplatte ist die Leistung viel langsamer als bei NoSQL-Datenbanken wie Redis, da Redis Daten im RAM speichern. Der größte Vorteil für Lucene ist, dass viele Abfragen unterstützt werden, sodass Fuzzy-Abfragen unterstützt werden können.
quelle
Die Lösungen von Drittanbietern wie ein Mongo-Op-Log-Schwanz sind attraktiv. Es bleiben einige Gedanken oder Fragen darüber offen, ob die Lösungen unter der Perspektive einer Entwicklung / Architektur eng integriert werden könnten. Ich erwarte aus einigen Gründen keine eng integrierte Lösung für diese Funktionen (etwas spekulativ und klärungsbedürftig und nicht auf dem neuesten Stand der Entwicklungsbemühungen):
quelle
MongoDB Atlas wird in Kürze eine Suchmaschine auf Lucene-Basis haben. Die große Ankündigung erfolgte auf der dieswöchigen MongoDB World 2019-Konferenz. Dies ist eine großartige Möglichkeit, die Verwendung des umsatzstarken MongoDB Atlas-Produkts zu fördern.
Ich hatte gehofft, dass es in die MongoDB Enterprise-Version 4.2 aufgenommen wird, aber es gab keine Neuigkeiten darüber, es in die On-Prem-Produktlinie aufzunehmen.
Weitere Informationen hier: https://www.mongodb.com/atlas/full-text-search
quelle