【问题标题】:Maximum number of columns does Cassandra support in a tableCassandra 在表中支持的最大列数
【发布时间】:2018-09-04 23:15:08
【问题描述】:

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

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


    【解决方案1】:

    相反,您应该使用 PRIMARY KEY((partition,key), timestamps, value_id); ,其中 value_id 为 1-1000 和单个 value 文本。然后,您将能够在分区中拥有 1000 个没有大行的值。问题是分页时整行被视为一个单元。最小的单位是 1000 个值,因此不可能分解成更小的块。 JVM 很难为发送分配大的连续块,这会给老一代空间带来巨大的负载和长时间的 GC 暂停。

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

    【讨论】:

    • 主键((partition,key), value_id, timestamps);将采用与您提到的相同的大小,并提供时间范围的查询。对吗?
    【解决方案2】:

    Cassandra 对每个分区有 20 亿个单元的硬性限制。在达到那个“硬”数字之前,您很可能会遇到麻烦。

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

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

    地点:

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

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

    还有一些Cassandra limitations

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-09-08
      • 2013-11-14
      • 1970-01-01
      • 2014-09-14
      • 1970-01-01
      • 2013-01-12
      • 1970-01-01
      相关资源
      最近更新 更多