【问题标题】:How does the data overhead of multiple columns with TTL in Cassandra work?Cassandra 中带有 TTL 的多列的数据开销是如何工作的?
【发布时间】:2017-12-15 00:49:37
【问题描述】:

在 Cassandra (here) 的过期数据文档中提到

与标准数据相比,过期数据在内存和磁盘上(用于记录 TTL 和过期时间)有 8 个字节的额外开销。

如果在表级别设置 TTL(生存时间),这是否意味着对于每个数据条目,内存和磁盘上的开销会增加 8 个字节乘以列数,或者它是与列数无关?

例如,在文档中还可以找到示例 here 来确定列的 TTL,即使数据插入超过 1 列并且 TTL 是为插入的实际数据条目定义的,而不是在每列基础。

【问题讨论】:

    标签: cassandra cql ttl


    【解决方案1】:

    不,至少不再是了。该文档已过时,仅适用于 3.0 之前的版本。

    目前,如果分区中的所有列或分区中的行在插入时设置了相同的 TTL,则只需为其设置一次。如果它们被存储,它们会从 sstables minTimestamp 写入 delta 编码为无符号变量 int,而不是 8 个字节。

    【讨论】:

      【解决方案2】:

      根据 Cassandra documentation,在创建表部分它说:

      default_time_to_live

      TTL(生存时间)以秒为单位,其中零是 禁用。指定时,为生存时间 (TTL) 设置该值 表格中每一列的标记;默认值:0。当表 超过了 TTL,表被墓碑化了。

      意思是当你为表定义一个TTL时,它对每一列都有效(除了主键)。

      【讨论】:

      • 那么这意味着对于每一行,我们将有 8 字节的开销乘以列数? (按照这个思路)
      • 是的,组成主键的列除外。
      猜你喜欢
      • 2018-11-24
      • 2014-11-06
      • 2019-07-09
      • 1970-01-01
      • 2019-05-11
      • 2013-11-14
      • 2018-06-08
      • 1970-01-01
      • 2020-03-01
      相关资源
      最近更新 更多