Maximale Anzahl von Spalten, die Cassandra in einer Tabelle unterstützt
Ich bin in der Lage, eine Tabelle zu entwerfen, um einzelne Zeitreihendaten zu speichern.
CREATE TABLE timeseries( partition bitint, timestamps bigint, key text, value text, PRIMARY KEY((partition,key),timestamps);
Partition ist eine Funktion (zB: Division) von Zeitstempeln selbst. Dadurch wird jeweils ein einzelner Wert für einen Schlüssel gespeichert.
Was ist, wenn wir jeweils 1000 Werte für einen Schlüssel speichern müssen. Es wird Wert_1, Wert_2,...Wert_1000 geben. dh 1000 weitere Felder in der Tabelle.
CREATE TABLE timeseries(partition bitint,timestamps bigint, key text, value_1 text,value_2 text,value_3 text,
. . .
value_999 text,
value_1000 text,
PRIMARY KEY((partition,key),timestamps);
Hat die Cassandra-Tabelle eine Beschränkung in der Anzahl der unterstützten Felder? Gibt es einen besseren Weg für dasselbe?
Stattdessen sollten Sie tun, PRIMARY KEY((partition,key), timestamps, value_id);
wo value_id 1-1000 und ein einzelner value
Text ist. Dann können Sie 1000 Werte ohne riesige Zeilen in Ihrer Partition haben. Das Problem ist, dass die gesamte Zeile beim Paging als eine einzelne Einheit betrachtet wird. Die kleinste Einheit von 1000 Werten macht es unmöglich, sie in kleinere Stücke aufzuteilen. Der JVM fällt es schwer, große zusammenhängende Blöcke für das Senden zuzuweisen, was den alten Genspace und lange GC-Pausen stark belastet.
Es ist auch die Gesamtgröße der Partition zu berücksichtigen. Während das Zellenlimit für eine Partition 2 Milliarden beträgt, gibt es einige praktische Grenzen, die in Warum ist es so schlimm, große Partitionen in Cassandra zu haben? .