Cassandra在表中支持的最大列数

问题描述 投票:0回答:2

我能够设计一个表来存储单个时间序列数据。

CREATE TABLE timeseries( partition bitint, timestamps bigint, key text, value text, PRIMARY KEY((partition,key),timestamps);

分区是时间戳本身的函数(例如:除)。这将为密钥一次存储一个值。

如果我们需要一次为一个键存储大约1000个值,该怎么办?将有value_1,value_2,... value_1000。即表中的1000多个字段。

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);

cassandra表在它支持的字段数量方面有限制吗?还有更好的方法吗?

database-design cassandra time-series
2个回答
3
投票

相反,你应该做PRIMARY KEY((partition,key), timestamps, value_id);,其中value_id为1-1000和单个value文本。然后,您将能够在分区中拥有1000个没有大行的值。问题是分页时整行被视为一个单元。最小的单位是1000个值,因此无法分解并以较小的块进行。 JVM很难为发送分配大的连续块,这给旧的gen空间和长GC暂停带来了巨大的负担。

还需要考虑分区的总大小。虽然细胞对分区的限制是20亿,但Why is it so bad to have large partitions in Cassandra?中描述了一些实际限制。


0
投票

Cassandra每个分区的硬限制为20亿个单元。很可能你在达到“硬”数字之前会遇到麻烦。

要计算分区中的单元格数,可以使用以下公式:

nv = nr(nc - npk - ns) + ns

哪里:

  • nv =分区中的单元格数
  • nr =行数
  • ns =静态列数
  • nc =列数
  • npk =主键列数

nc - npk - ns也称为每行的值数。

更多Cassandra limitations

© www.soinside.com 2019 - 2024. All rights reserved.