Blog_allgemein

Shard Splitting in Solr

Daniel Wrigley

Daniel Wrigley

Eines des größten Mankos bei der SolrCloud war das Fehlen der Möglichkeit bestehende Indexe zu teilen, wenn diese zu groß und somit bei der Suche zu inperformant geworden sind. In so einem Fall blieb nur den Index komplett neu aufzubauen, was im schlimmsten Fall zu einer Downtime der Suche führen konnte.

Mit dem Solr Release 4.3 wurde nun die Möglichkeit implementiert zur Laufzeit einen bestehenden Index zu teilen. Wie das funktioniert, wird in diesem Artikel grundlegend beschrieben.

How-To Splitting

Für den Test des Shard Splitting habe ich einen Teil der deutschen Wikipedia in einem einzelnen Shard indexiert. Der nachfolgende Screenshot zeigt die Ausgangssituation in der SolrCloud.

Im Index sind ca. 100000 Dokumente indexiert (siehe Screenshot).

Das Shard Splitting wird über die Collection API aufgerufen. Folgender Befehl teilt den Shard „de“ der Collection „wikipedia“:

https://localhost:8983/solr/admin/collections?action=SPLITSHARD&collection=wikipedia&shard=de

Im folgenden Screenshot wird gezeigt, wie die Collection nach dem Splitting aussieht. Es wurden die Shards „de_0“ und „de_1“ erstellt, die sich nun den Dokumentenbestand teilen.

Diese beiden Shards teilen sich nun den Dokumentenbestand (siehe folgende Screenshots).

Der originale Shard bleibt in der aktuellen Implementierung bestehen und muss per Hand bzw. per Administrationsoberfläche entfernt werden. Das Ergebnis danach ist eine Collection, die aus zwei Teilen besteht.

Fazit

Das Shard Splitting ist der richtige Schritt, um die SolrCloud noch flexibler zu gestalten. Sehr positiv ist, dass die Teilung des Indexes zur Laufzeit ohne den Ausfall der Suche durchgeführt werden kann. Und zusätzlich gehen die Dokumente, die während des Splittings indexiert werden, nicht verloren!

Es fehlt momentan jedoch noch eine anständige Integration der Funktionalität in die Solr Administrationsoberfläche. Auch die Tatsache, dass der originale Shard nach dem Splitting noch als Teil der Collection ist, zeigt, dass dies noch eine recht neue Funktionalität ist.