【问题标题】:Cassandra add TTL to existing entriesCassandra 将 TTL 添加到现有条目
【发布时间】:2015-08-15 23:09:05
【问题描述】:

如何更新整个表并为每个条目设置 TTL?

当前场景(Cassandra 2.0.11):

表:

CREATE TABLE external_users (
  external_id text,
  type int,
  user_id text,
  PRIMARY KEY (external_id, type)
) 

目前此表中有 ~40mio 条目,我想添加一个 TTL,比如说 86 400 秒(1 天)。 使用 USING TTL(86400) 或 UPDATE current entries 的新条目没有问题,但是如何为每个已经存在的条目应用 ttl?

我的想法是选择所有数据并使用一个小脚本更新每一行。我只是想知道是否有更简单的方法来实现这一点(因为即使进行批量更新,这也需要一段时间,而且需要很大的努力)

提前致谢

【问题讨论】:

    标签: cassandra cassandra-2.0 cqlsh ttl


    【解决方案1】:

    无法更改 C* 中现有数据的 TTL。 TTL 只是一个内部列属性,它与所有其他列数据一起写入不可变的 SSTable。来自the docs的引用:

    如果要更改过期数据的 TTL,则必须使用新的 TTL 重新插入数据。在 Cassandra 中,数据的插入实际上是插入或更新操作,这取决于是否存在先前版本的数据。

    【讨论】:

    • 有没有办法删除所有 TTL = null 的条目? @shutty
    • 没有简单的方法:只需遍历所有行并删除 ttl=0 的行。
    • 有没有办法在 cqlsh 中做到这一点?
    • 你必须为此编写一个脚本,cqlsh 无法遍历所有数据库行。
    猜你喜欢
    • 2020-09-13
    • 2013-09-15
    • 2012-01-03
    • 2015-05-10
    • 2013-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多