2017-04-10 2 views
1

Wenn ich eine zufällig generierte eindeutige ID verwende, ist es richtig, dass die Kardinalität ziemlich groß wäre?Was ist die Kardinalität eines Partitionsschlüssels?

Wenn ich einen Schlüssel mit einer niedrigen Kardinalität wie 5 Kategoriewerte habe, den der Partitionsschlüssel annehmen kann, und ich möchte ihn verteilen, dann ist der empfohlene Ansatz, den Partitionsschlüssel in einen zusammengesetzten Schlüssel zu setzen.

Aber dies erfordert, dass ich alle Teile eines zusammengesetzten Schlüssels in meiner Abfrage angeben müssen, um alle Datensätze dieses Schlüssels abzurufen.

Auch dann könnte das generierte Token für den gleichen Knoten sein.

Gibt es eine Möglichkeit, über eine zusätzliche Spalte für den zusammengesetzten Schlüssel zu entscheiden, die garantieren würde, dass die Daten verteilt werden?

Antwort

1

Die Sache ist, dass Sie mit Cassandra tatsächlich Partitionierungsschlüssel "bekannt" haben möchten, damit Sie auf die Daten zugreifen können, wenn Sie sie benötigen. Ich bin mir nicht sicher, was Sie meinen, wenn Sie auf Partitionierungsschlüssel große Kardinalität sagen. Sie würden viele Partitionen im Cluster erhalten. Dies ist normalerweise o.k.

Wenn Sie die Daten im Cluster verteilen möchten. Sie können künstliche Spalten verwenden. Und dieser Ansatz wird manchmal auch Bucketing genannt. Grundsätzlich, wenn Sie 100k + oder in nie Version 1 Million + Spalten behalten möchten, ist es o.k. um diese Daten in Partitionen aufzuteilen.

Einige Leute verwenden einfach einen Trick und wenn sie die Daten einfügen fügen sie einige künstliche Eimer Spalte zu Partition ... Sagen wir zufällig (1-10) und dann, wenn sie die Daten auslesen sie einfach 10 Abfragen oder Verwenden Sie einen Operator in und rufen Sie dann die Daten ab und führen Sie sie auf der Clientseite zusammen. Dieser Ansatz hat viele Vorteile, da er das Auftreten von "heißen Zeilen" im Cluster verhindert.

Die Chancen für jeden Schlüssel sind mehr oder weniger 1/NUM_NODES, dass es auf dem gleichen Knoten endet. Ich würde also sagen, dass Sie sich die meiste Zeit nicht zu viel Sorgen machen sollten. Es sei denn, die Anzahl der Partitionen ist kleiner als die Anzahl der Knoten im Cluster.

Grundsätzlich gibt es zwei Möglichkeiten für zusätzliche zufällige Spalten (bereits beschrieben) oder eine Funktion basierend auf einigen Eingabedaten, dh wenn Zeitreihendaten verwendet werden und Sie basierend auf dem Monat entscheiden, können Sie den Monat basierend auf den Daten immer berechnen das du einfügen wirst und dann legst du es einfach in den Eimer. Wenn Sie die Daten abrufen, wissen Sie ... o.k. Ich suche etwas im Mai 2016 und dann wissen Sie, wie man den passenden Eimer auswählt.

Verwandte Themen