Mehrstufiges Composite-id-Routing in SolrCloud

SolrCloud hat sich im Laufe des letzten Jahres zu einem ziemlich intelligenten System mit vielen interessanten und nützlichen Funktionen entwickelt.…

SolrCloud hat sich im Laufe des letzten Jahres zu einem ziemlich intelligenten System mit vielen interessanten und nützlichen Funktionen entwickelt. Eine davon ist die Arbeit an der intelligenten Weiterleitung von Dokumenten und Abfragen.

SolrCloud begann mit einem einfachen hashbasierten Routing in 4.0. Interessant wurde es dann mit der Einführung des Composite Id Routers in 4.1, der ein intelligenteres Routing von Dokumenten und Abfragen ermöglichte, um Dinge wie Multi-Tenancy und Co-Location zu erreichen. Mit 4.7 wird das 2-stufige Composite-ID-Routing auf 3 Stufen erweitert(SOLR-5320).

Einen guten Beitrag darüber, wie Dokumenten-Routing im Allgemeinen funktioniert, finden Sie hier. Schauen wir uns nun an, wie sich das Composite-ID-Routing auf 3 Ebenen ausdehnt und wie wir es wirklich nutzen können, um bestimmte Dokumente in unserem Korpus abzufragen.

Wichtig dabei ist, dass der 3-Ebenen-Router den 2-Ebenen-Router nur erweitert. Es handelt sich um denselben Router und dieselbe Java-Klasse, d.h. Sie müssen ihn nicht wirklich „einrichten“.

Wo würden Sie den mehrstufigen Composite-ID-Router verwenden wollen?

Die Multi-Level-Implementierung erweitert die Unterstützung für Multi-Tenancy und Co-Location von Dokumenten, die der bereits vorhandene Composite-ID-Router bietet. Stellen Sie sich ein Szenario vor, in dem ein einziges System verwendet wird, um Daten für mehrere Anwendungen (oder Abteilungen) zu hosten, und jede von ihnen eine Reihe von Benutzern hat. Jedem Benutzer sind außerdem Dokumente zugeordnet. Mit einem 3-stufigen Composite-ID-Router kann ein Benutzer die Dokumente zum Indexzeitpunkt an die richtigen Shards weiterleiten, ohne sich wirklich um das eigentliche Routing kümmern zu müssen. Dies würde es den Benutzern auch ermöglichen, Abfragen für bestimmte Benutzer oder Anwendungen mithilfe des Parameters shard.keys zur Abfragezeit gezielt zu steuern.

Wie funktioniert das?

Jedes Dokument in Solr, das weitergeleitet werden soll, muss eine eindeutige Dokument-ID haben.
z.B. doc1

Es wird ein Hash-Wert der ID berechnet, der dann für das Routing verwendet wird.

Diese id kann so geändert werden, dass sie auch Routing-Schlüssel für den Zweck des Composite-id-Routers enthält.
z.B. routekey1!routekey2!doc1

Bei einem Composite-ID-Router wird jedes Dokument sowohl anhand des Routing-Schlüssels (Komponenten) als auch anhand der ursprünglichen Dokument-ID weitergeleitet. Das Routing erfolgt über einen 32-Bit-Wert, der aus den verschiedenen Komponenten des Routing-Schlüssels abgeleitet wird.

Im Falle des 2-stufigen Composite-ID-Routings werden die ersten 16 Bits (MSB) des Hashes aus dem Hash des Routenschlüssels abgeleitet, während die letzten 16 Bits aus der Dokument-ID selbst stammen

Im Falle eines 3-stufigen Composite-ID-Routings bestimmen die drei Komponenten standardmäßig 8, 8 und 16 Bits des Routing-Hashes.

ID: myapp!user1!doc

composite-id router

Die ersten 8 Bits aus dem murmur3-Hash von myapp

2. 8 Bits aus murmur3 Hash von user1

3. 16 Bits von doc

Dies kann für benutzerdefinierte Fälle geändert werden, in denen der Benutzer vielleicht mehr (oder weniger) Bits von jeder der Komponenten beisteuern möchte. Hier ist das Beispiel:

ID : myapp/6!user1/14!doc

composite-id router

Die ersten 6 Bits von myapp

2. 14 Bits von user1

3. 12 (32-20) Bits von doc

Wie verwenden Sie es eigentlich in Ihrer Anwendung?

Während der Indizierung:
Fügen Sie für jedes Dokument eine Dokument-ID mit routingbezogenen Informationen hinzu. z.B. myapp!user1!doc

Zum Zeitpunkt der Abfrage:
Um alle Datensätze für myapp abzufragen: shard.keys=myapp/8!

Beachten Sie die explizite Erwähnung von 8 Bits im Falle einer Abfrage nur durch Komponente 1, d.h. der App-Ebene. Dies ist erforderlich, weil die Verwendung des Routers auf Ebene 2 oder 3 nicht implizit ist. Die Angabe von ‚8‘ Bits für die Komponente unterstreicht die Verwendung eines Routers der Ebene ‚3‘.

Um alle Datensätze von user1 für myapp abzufragen: shard.keys=myapp!user1!

 

Ich hoffe, dies klärt ein wenig über das Wie/Warum und Was des mehrstufigen Composite-ID-Routers auf.

You Might Also Like

Vom Suchunternehmen zum praktischen KI-Pionier: Unsere Vision für 2025 und darüber hinaus

CEO Mike Sinoway gibt Einblicke in die Zukunft der KI und stellt...

Read More

Wenn KI schief geht: Fehlschläge in der realen Welt und wie man sie vermeidet

Lassen Sie nicht zu, dass Ihr KI-Chatbot einen 50.000 Dollar teuren Tahoe...

Read More

Lucidworks Kernpakete: Branchenoptimierte KI-Such- und Personalisierungslösungen

Entdecken Sie unsere umfassenden Core Packages, die Analytics Studio, Commerce Studio und...

Read More

Quick Links