Ich füge in eine Cassandra 3.12 über den Python (DataStax) Treiber und CQL BatchStatements [1]. Mit einem Primärschlüssel, der zu einer kleinen Anzahl von Partitionen (10-20) führt, funktioniert alles gut, aber die Daten sind nicht gleichmäßig über die Knoten verteilt.Kardinalität der Primärschlüssel verursacht Partition zu große Fehler?
Wenn ich eine Spalte mit hoher Kardinalität, z. B. Uhrzeit oder Client-IP, zusätzlich zum Datum einfüge, führen die Stapeleinfügungen zu einem zu großen Partitionsfehler, obwohl die Anzahl der Zeilen und die Zeilenlänge identisch sind.
Höhere Kardinalitätsschlüssel sollten zu mehr, aber kleineren Partitionen führen. Wie führt ein Schlüssel, der mehr Partitionen generiert, zu diesem Fehler?
[1] Obwohl alles, was ich gelesen habe deutet darauf hin, dass Batch-Einsätze können ein Anti-Muster sein, mit einer Charge nur eine Partition abdeckt, habe ich noch den höchsten Durchsatz im Vergleich zu async oder aktuellen Einsätzen für diesen Fall sehen.
CREATE TABLE test ( date date, time time, cid text, loc text, src text, dst text, size bigint, s_bytes bigint, d_bytes bigint, time_ms bigint, log text, PRIMARY KEY ((date, loc, cid), src, time, log) ) WITH compression = { 'class' : 'LZ4Compressor' } AND compaction = {'compaction_window_size': '1', 'compaction_window_unit': 'DAYS', 'class': 'org.apache.cassandra.db.compaction.TimeWindowCompactionStrategy'};
Wie groß ist die Größe der Spalte, die Sie in den Partitionsschlüssel verschoben haben? –
@AlexOtt In der obigen Tabelle wurde das Datum (Datum) durch eine Zeitstempelspalte ersetzt. Wenn ich sowohl Daten als auch Zeitspalten einschließe, bekomme ich das gleiche Problem. Ich verweise auf die Kardinalität, weil die Addition von Zeit zu viel mehr Partitionen führen sollte (wegen der Auflösung), aber die Zeilengröße nicht ändert. Ich glaube nicht, dass ich so viele Partitionen brauche, aber ich versuche die Beziehung zwischen dem Primärschlüssel und dem Fehler zu verstehen. – MattK