In der Cassandra-Dokumentation heißt es:
Verwenden Sie in folgenden Situationen keinen Index:
- In Spalten mit hoher Kardinalität, weil Sie dann ein großes Datensatzvolumen nach einer kleinen Anzahl von Ergebnissen abfragen. Siehe Probleme bei der Verwendung eines Spaltenindex mit hoher Kardinalität weiter unten.
Es geht weiter,
Wenn Sie einen Index für eine Spalte mit hoher Kardinalität erstellen, die viele unterschiedliche Werte aufweist, führt eine Abfrage zwischen den Feldern zu vielen Suchanfragen nach sehr wenigen Ergebnissen. In der Tabelle mit einer Milliarde Songs ist es wahrscheinlich sehr ineffizient, Songs nach Autoren (ein Wert, der normalerweise für jeden Song einzigartig ist) anstatt nach Künstlern zu suchen. Es wäre wahrscheinlich effizienter, die Tabelle manuell als eine Form eines Index zu verwalten, anstatt den integrierten Cassandra-Index zu verwenden. Bei Spalten mit eindeutigen Daten ist es manchmal in Bezug auf die Leistung in Ordnung, der Einfachheit halber einen Index zu verwenden, solange das Abfragevolumen für die Tabelle mit einer indizierten Spalte moderat ist und nicht ständig geladen wird.
Aber beantwortet nie wirklich die Frage: Warum ist es ineffizient? Ich habe keine Ahnung, was "manuelles Verwalten der Tabelle als Form eines Index" bedeutet. Aber dann widerspricht es sich etwas mit "... es ist manchmal in Bezug auf die Leistung in Ordnung, einen Index der Einfachheit halber zu verwenden, solange das Abfragevolumen moderat ist ..."
Versucht das nur, mir zu sagen, dass ich die PK verwenden soll, wann und wo ich kann? Was ist die Ineffizienz? Mein Verständnis ist, dass eine Abfrage, die einen Index treffen würde, jeden Knoten im Cluster abfragen müsste, und dann würde jeder Knoten eine Suche in seinem lokalen Index durchführen und die Ergebnisse würden dann aggregiert. Dies ist nicht unbedingt teuer (jede Indexsuche sollte ziemlich billig sein), außer dass wir die Netzwerklatenz bezahlen, da wir auf den langsamsten Knoten des Loses warten müssen. Vermisse ich hier etwas?
Aber wenn ich eine Sammlung habe, die Bajillion Gegenstände enthält, die - in seltenen Fällen - durch ein anderes, aber fast einzigartiges Attribut nachgeschlagen werden müssen ... ist dies eine angemessene Verwendung, oder?
¹Jedes? IDK, wenn Replikation bedeutet, dass dies 1/3 des Clusters für einen Replikationsfaktor von 3 treffen kann oder nicht?