Wie kann die Transaktionsverwaltung in Solr mit Solrj gehandhabt werden? Es gibt nicht viel Dokumentation zu diesem Thema im Netz. Aber ich wäre dankbar, wenn jemand Links oder Informationen zum Transaktionsmanagement mit SolrJ bereitstellen könnte.
Antworten
Zu viele Anzeigen?Was Sie bei Solr und Transaktionen beachten müssen, ist, dass es keine Isolierung gibt. Solr unterstützt keine Transaktionen in der Art und Weise, wie es die meisten von uns Datenbankentwicklern gewohnt sind.
Commit macht alle ausstehenden Änderungen aller Clients für neue Abfragen sichtbar. Ebenso werden mit Rollback alle anstehenden Änderungen aller Clients zurückgenommen. Es spielt keine Rolle, welcher Client den Commit/Rollback-Befehl gesendet hat.
Aus diesem Grund sollte die Fehlerbehandlung nicht automatisch zu einem Rollback führen. Denn die Auswirkungen können viel weiter reichen als nur die fehlerhaften Daten. Und die Bereinigung kann dadurch sehr viel schwieriger sein.
Die Solr-Dokumentation empfiehlt die Verwendung von auto-commit. Dies gilt insbesondere für Massenoperationen. Wenn Sie eine Massenindizierung durchführen, vielleicht mit mehreren parallelen Clients, dann ist es besser, Auto-Commit in regelmäßigen Abständen (oder nach so vielen Dokumenten) zu verwenden. Dies führt dazu, dass weniger neue Indexsegmente erstellt werden und der Index insgesamt weniger fragmentiert ist.
Die Details hängen von der Mischung aus Abfrage- und Indizierungsvorgängen auf Ihrer Solr-Instanz (und Ihrem Replikationsansatz) ab.
Hier gibt es einen guten Artikel von Lucidworks: Verstehen von Transaktionsprotokollen, Soft Commit und Commit in SolrCloud
Sie müssten die Transaktionen in SolrJ programmatisch bearbeiten. Beim Umgang mit mehreren Schreibvorgängen.
- Verwenden Sie die Methode SolrServer api add, um die SolrInputDoucments zum Server hinzuzufügen.
- Wenn alle SolrInputDocuments hinzugefügt sind, rufen Sie die commit-Methode der SolrServer-Api auf, um alle Änderungen zu übertragen.
- Wenn Sie im Falle einer Ausnahme von Solr die Schreibvorgänge in Solr zurücksetzen möchten, rufen Sie die SolServer api rollback-Methode auf.
- Wenn Sie auch die Schreibvorgänge in die Datenbank zurücksetzen möchten, werfen Sie einfach eine Laufzeitexception aus dem Catch-Block zurück.
So habe ich das Transaktionsmanagement gehandhabt. Wenn jemand bessere Antworten hat, kann er die Antwort gerne verbessern.