【问题标题】:Override TTL Cassandra覆盖 TTL Cassandra
【发布时间】:2017-08-17 06:00:13
【问题描述】:

我正在为我的应用程序使用 Cassandra 数据库,并且我正在为每个请求设置一个 TTL。出于测试目的,我正在使用另一个数据库(相同的架构,但在本地)并且我愿意保留数据,我想知道是否有办法覆盖 ttl,我不知道,通过在创建时将其设置为默认值表格或类似的东西。

谢谢。

【问题讨论】:

    标签: cassandra cql ttl


    【解决方案1】:

    为特定列设置 TTL

    使用 CQL 设置数据的 TTL。

    要更改特定列的 TTL,您必须重新插入数据 使用新的 TTL。 Cassandra 使用新的 TTL 插入列, 如果有的话,用旧的 TTL 替换旧的值。

    为表设置 TTL

    CQL 表定义支持 default_time_to_live 属性, 它将特定的 TTL 应用于表中的每一列。之后 已超过 default_time_to_live TTL 值,Cassandra 墓碑 整张桌子。将此默认 TTL 应用于 CQL 中的表,使用 创建表或更改表。

    如果您的表在本地环境中的 TTL 值不等于 0,请使用

    ALTER TABLE table_name
      WITH  default_time_to_live= 0
    

    这将改变表级别的 TTL。

    如果设置了列级 TTL,请更改代码以插入 0 或更高 TTL 的记录。

    Details

    【讨论】:

    • 例如,在我的表创建中,如果我将默认 TTL 设置为 9999,并且我使用 2 的 TTL 插入数据,将应用哪一个?
    • 在插入数据时,ttl 应用于列级别,因此在该列将被删除之后...即,如果所有数据都以 2 的 ttl 插入,它将被应用
    【解决方案2】:

    我不认为它朝那个方向起作用;因为您在 CQL 中而不是在表级别指定 TTL。

    http://cassandra.apache.org/doc/latest/cql/dml.html

    如果表有 default_time_to_live,则 TTL 为 0 将删除插入或更新值的 TTL。 null 的 TTL 相当于插入 TTL 为 0。

    CQL TTL 会覆盖默认值。如果你在表级别有 9999 TTL,在 CQL 中使用 50;将使用 50 个。

    参考这里-http://www.mail-archive.com/user@cassandra.apache.org/msg50873.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-31
      • 1970-01-01
      • 1970-01-01
      • 2016-12-09
      • 1970-01-01
      • 2017-05-23
      • 2017-06-08
      • 1970-01-01
      相关资源
      最近更新 更多