1Ein Index (früherer Name: Sekundärindex) bietet die Möglichkeit, auf Daten in Cassandra zuzugreifen, indem andere Nicht-Primärschlüsselfelder als der Partitionsschlüssel verwendet werden. Der Vorteil ist die schnelle und effiziente Suche nach Daten, die einer bestimmten Bedingung entsprechen. Wenn in einer normalen Spalte kein Index vorhanden ist, darf die Spalte nicht einmal bedingt abgefragt werden.
Ein Index indiziert Spaltenwerte in einer separaten, ausgeblendeten Spaltenfamilie (Tabelle) als diejenige, die die zu indizierenden Werte enthält. Die Daten eines Indexes sind nur lokal, was bedeutet, dass sie nicht auf andere Knoten repliziert werden. Dies bedeutet auch, dass für die Datenabfrage nach indizierter Spalte die Anforderungen an alle Knoten weitergeleitet werden müssen, auf alle Resonanzen warten und dann die Ergebnisse zusammengeführt und zurückgegeben werden. Wenn Sie also viele Knoten haben, verlangsamt sich die Abfrageantwort, wenn dem Cluster mehr Maschinen hinzugefügt werden.
Achtung:
Mit der aktuellen Version (2.0.7) von Apache Cassandra konnten Sie nur nach einer indizierten Spalte mit Gleichheitsvergleichsbedingung abfragen. Range select oder order-by von einer indizierten Spalte wird nicht unterstützt. Der Grund dafür ist, dass die in der versteckten Spaltenfamilie gespeicherten Schlüssel unsortiert sind.
Wann wird ein Index verwendet?
2Die integrierten Indizes von Cassandra eignen sich am besten für eine Tabelle mit vielen Zeilen, die den indizierten Wert enthalten. Je mehr eindeutige Werte in einer bestimmten Spalte vorhanden sind, desto mehr Aufwand haben Sie für die Abfrage und Pflege des Index. Angenommen, Sie hatten eine Wiedergabelistentabelle mit einer Milliarde Songs und wollten Songs des Künstlers nachschlagen. Viele Songs teilen sich den gleichen Spaltenwert für Künstler. Die Künstlerspalte ist ein guter Kandidat für einen Index.
Wann sollte man keinen Index verwenden?
2Verwenden Sie in diesen Situationen keinen Index:
- In Spalten mit hoher Kardinalität, da Sie dann eine große Menge von Datensätzen nach einer kleinen Anzahl von Ergebnissen abfragen
- In Tabellen, die eine Zählerspalte verwenden
- In einer häufig aktualisierten oder gelöschten Spalte
- , um nach einer Zeile in einer großen Partition zu suchen, es sei denn, sie werden eng abgefragt