2013-10-08 7 views

Antwort

12

Der Hauptunterschied besteht darin, dass sekundäre Indizes in Cassandra nicht auf die gleiche Weise verteilt werden wie ein manueller invertierter Index. Mit den integrierten Sekundärindizes indiziert jeder Knoten die lokal gespeicherten Daten (mit dem LocalPartitioner). Bei der manuellen Indexierung werden die Indizes unabhängig von den Knoten verteilt, die die Werte speichern.

Dies bedeutet, dass für die integrierten Indizes jede Abfrage zu jedem Knoten gehen muss, während Sie bei umgekehrter Indexierung manuell zu einem Knoten (plus Replikaten) gehen würden, um den Wert abzufragen, den Sie gesucht haben. Ein Vorteil des lokalen Speicherns des Index besteht darin, dass Indizes mit den Daten atomar aktualisiert werden können. (Obwohl seit Cassandra 1.2 stattdessen die atomaren Batches verwendet werden könnten, obwohl sie etwas langsamer sind.)

Aus diesem Grund werden Cassandra-Indizes nicht für wirklich hohe Kardinalitätsdaten empfohlen. Wenn Sie auf jedem Knoten eine Suche durchführen, aber es nur ein oder zwei Ergebnisse gibt, ist dies ineffizient und ein manueller invertierter Index ist besser. Wenn Ihr Lookup viele Ergebnisse liefert, müssen Sie trotzdem auf jedem Knoten nachsehen, damit die eingebauten Indizes gut funktionieren.

Ein weiterer Vorteil der Verwendung der integrierten Indizierung von Cassandra besteht darin, dass die Indizes nur langsam aktualisiert werden, sodass Sie nicht bei jedem Update einen Lesevorgang durchführen müssen. (Siehe CASSANDRA-2897.) Dies kann eine erhebliche Geschwindigkeitsverbesserung für indizierte Tabellen mit hohem Schreibdurchsatz sein.

+3

Inspiriert von dieser Frage schrieb ich eine ausführlichere Antwort auf meinem Blog: www.wentnet.com/blog/?p=77 – Richard

+0

die Ironie eines Datenbankverbindungsfehlers – devshorts

Verwandte Themen