MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

java - MongoDB + Solr-Leistungen

Dein Ansatz ist eigentlich gut. Einige beliebte Frameworks wie Compass führen das, was Sie beschreiben, auf einer niedrigeren Ebene aus, um automatisch die Indexänderungen zu spiegeln, die über das ORM-Framework durchgeführt wurden (siehe http://www.compass-project.org/overview.html).

Zusätzlich zu dem, was Sie beschreiben, würde ich auch regelmäßig alle Daten in MongoDB neu indizieren, um sicherzustellen, dass sowohl Solr als auch Mongo synchronisiert werden (wahrscheinlich nicht so lange, wie Sie vielleicht denken, je nach Anzahl der Dokumente). die Anzahl der Felder, die Anzahl der Token pro Feld und die Leistung der Analysatoren :Ich erstelle mit komplexen Analysatoren oft einen Index von 5 bis 8 Millionen Dokumenten (etwa 20 Felder, aber Textfelder sind kurz) in weniger als 15 Minuten, stellen Sie einfach sicher Ihr RAM-Puffer ist nicht zu klein und führen Sie kein Commit/Optimieren durch, bis alle Dokumente hinzugefügt wurden).

In Bezug auf die Leistung ist ein Commit kostspielig und eine Optimierung sehr kostspielig. Je nachdem, was Ihnen am wichtigsten ist, können Sie den Wert von mergefactor in Solrconfig.xml ändern (hohe Werte verbessern die Schreibleistung, während niedrige Werte die Leseleistung verbessern, 10 ist ein guter Wert für den Anfang).

Sie scheinen Angst vor der Erstellungszeit des Index zu haben. Da die Speicherung von Lucene-Indizes jedoch segmentbasiert ist, sollte der Schreibdurchsatz nicht zu sehr von der Größe des Index abhängen (http://lucene.apache.org/java/2_3_2/fileformats.html). Allerdings verlängert sich die Aufwärmzeit, also sollten Sie darauf achten

  • In den Parametern firstSearcher und newSearcher in Ihrer Konfigurationsdatei solrconfig.xml gibt es typische (insbesondere für Sortierungen zum Laden der Fieldcaches), aber nicht zu komplexe Abfragen,
  • useColdSearcher ist auf
      gesetzt
    • false, um eine gute Suchleistung zu erzielen, oder
    • true, wenn Sie möchten, dass am Index vorgenommene Änderungen auf Kosten einer langsameren Suche schneller berücksichtigt werden.

Wenn es für Sie akzeptabel ist, wenn die Daten nur wenige X Millisekunden, nachdem sie in MongoDB geschrieben wurden, durchsuchbar werden, können Sie die Funktion „commitWithin“ von UpdateHandler verwenden. Auf diese Weise muss Solr seltener festschreiben.

Weitere Informationen zu Solr-Leistungsfaktoren finden Sie unter http://wiki.apache.org/solr/SolrPerformanceFactors

Um Dokumente zu löschen, können Sie entweder nach Dokument-ID (wie in schema.xml definiert) oder nach Abfrage löschen:http://lucene.apache.org/solr/api/org/apache/solr/client/solrj/SolrServer.html