Solr-Entwicklungstagebuch: Solr und Fast-Echtzeit-Suche
Der UpdateHandler von Solr ist ein wenig verkrustet. Viele der Implementierungsdetails sind auf alte, müde und entfernte Anforderungen und Funktionen zurückzuführen. Für diejenigen, die es nicht wissen: Dokumente, die Sie zu Solr hinzufügen, werden vom UpdateHandler tatsächlich in den Index aufgenommen.
Es gibt zwei Details der aktuellen UpdateHandler-Implementierung, die besonders einschränkend sind.
Erstens verwendet Solr seine eigenen Sperren auf Lucene und fügt damit eine weitere, unnötige Ebene von Sperren auf dem IndexWriter hinzu. Diese Sperren hatten einmal eine Daseinsberechtigung, aber jetzt sind sie überflüssig. Es gibt keinen Grund, das Hinzufügen weiterer Dokumente zu blockieren, während eine Übertragung durchgeführt wird, aber genau das tut Solr derzeit. Das Entfernen dieser Sperren wird die Komplexität und die Wartungskosten reduzieren, da wir nun „größtenteils“ nur noch die Sperren von Lucene verwenden können. Solr wird auch leichter Verbesserungen von Lucene in diesem Bereich übernehmen können.
Zweitens wird Solr aufgrund historischer Anforderungen bei jeder Übertragung einen neuen IndexWriter schließen und öffnen. Das bedeutet, dass bei jeder Übertragung gewartet wird, bis alle Threads zur Zusammenführung von Indizes im Hintergrund beendet sind. Das kann eine nicht unerhebliche Zeitspanne sein – und während dieser Zeit können Sie dem Index keine Dokumente hinzufügen. Außerdem können Sie die Dokumente, die gerade dem Index hinzugefügt wurden, nicht sehen, bis die Zusammenführung und die Übertragung abgeschlossen sind. Eigentlich sollte der UpdateHandler einfach nur eine Übergabe durchführen und einen neuen SolrIndexSearcher öffnen – während die Hintergrund-Threads fröhlich *im Hintergrund* zusammengeführt werden.
Es gibt auch noch ein paar andere Dinge, die mich stören.
Nun, ich werde sie jetzt alle beheben. Es ist an der Zeit, die Kruste zu entfernen und die Lucene-Unterstützung für Solr nahezu in Echtzeit einzuführen. Sie sollten in der Lage sein, mit Solr eine neue Ansicht für kürzlich hinzugefügte Inhalte in einem Bruchteil der jetzt möglichen Zeit zu öffnen. Es ist nicht richtig, dass Sie mit SolrCore jonglieren müssen, um Indexaktualisierungen nahezu in Echtzeit zu versuchen – es ist an der Zeit, die Dinge einfacher zu machen. Es ist an der Zeit, die Dinge schneller zu machen.
Und wenn Lucene seine Echtzeitunterstützung beendet und IndexWriter-Flushes nicht mehr das Hinzufügen von Dokumenten blockieren, wird Solr noch besser in der Lage sein, die Vorteile zu nutzen, wo immer es geht. Es bleibt noch mehr zu tun – noch ist nicht alles, was Solr tut, pro Segment, und die Replikation ist derzeit nicht sehr echtzeitfreundlich – aber wir werden die Dinge in die richtige Richtung lenken.
Ich nehme diese Änderungen hier in Angriff: https://issues.apache.org/jira/browse/SOLR-2193
– Mark