【问题标题】:How to update time-to-live(TTL) of existing records in Cassandra DB?如何更新 Cassandra DB 中现有记录的生存时间(TTL)?
【发布时间】:2014-07-14 08:35:20
【问题描述】:

由于 Cassandra DB 提供了一个选项来设置生存时间(TTL)值,以根据记录设置的 TTL 值自动删除记录。我有一个用户可以更改数据到期日期的案例,这意味着用户可以随时更改数据到期日期。

案例:

  1. 假设默认有效期为 10 天。
  2. 然后插入一些记录,设置 TTL 为 10 天。
  3. 2 天后,用户将有效期更改为 30 天。
  4. 但是之前插入的 10 天 TTL 周期的数据会在 10 天而不是 30 天后自动删除。

要求: 每当用户通过 UI 更改有效期时,我们都想更改数据库中的 TTL。 是否有任何选项可以更新 Cassandra DB 中记录的 TTL。

【问题讨论】:

  • 我还阅读了有关这个新数据库的详细信息,它非常好地管理具有过期期限的数据。我也需要这个问题的答案,以便我也将使用这个数据库。

标签: database


【解决方案1】:

我在这个问题上做了一些研究,总结了以下几点。

  1. 我们可以为 Cassandra DB 中的任何记录增加 TTL,但它需要通过更新查询来重置所有字段
  2. 我们不能不惜一切代价减少任何记录的 TTL。即使您更新具有较少 TTL 值的记录,该记录仍将保留在数据库中,直到最大 TTL 值(旧的或新的)。更新值

【讨论】:

  • 感谢您的关注。现在,在 cassandra 2.2.4 中,第 2 点无效。您可以减少一个条目的 TTL。第一点总是有效的。 DROP TABLE test; CREATE TABLE test ( a text PRIMARY KEY, b text, c text ); select a, b, TTL(b), c, TTL(c) from test; INSERT INTO test (a,b,c) VALUES ('a', 'b', 'c') USING TTL 60; select a, b, TTL(b), c, TTL(c) from test; UPDATE test USING TTL 200 SET b = 'b' WHERE a = 'a'; select a, b, TTL(b), c, TTL(c) from test; UPDATE test USING TTL 10 SET c = 'c' WHERE a = 'a'; select a, b, TTL(b), c, TTL(c) from test;
【解决方案2】:

您可以执行“虚假更新”

INSERT INTO ttl_example (k, v) VALUES ('somekey', 'somevalue') USING TTL 60;
UPDATE ttl_example USING TTL 200 SET v = 'somevalue' WHERE k = 'somekey';

第二条语句执行后 TTL 为 200 秒。

HTH, 卡罗

【讨论】:

  • 谢谢....它有效。但是我的表有 20 多列,所以在进行虚假更新时,我必须首先获取所有数据,然后需要在更新查询中进行设置。由于实际表包含 10000 多个数据,因此这是一个非常耗时的过程。有没有更短的方法呢?我需要一种简单的方法,只需一个查询即可。
  • 我还得出结论,我们不能不惜一切代价减少 TTL。
【解决方案3】:

这项工作在 Cassandra 2.0.7 上
您可以重新插入仅更改 TTL 的相同数据。

使用 TTL 200 插入表 (col1, col2) 值 ('001','aaa');
使用 TTL 2 插入表 (col1, col2) 值 ('001','aaa'); 等待 2 秒,该行消失;

我也通过 DataStax 找到了这个: 要更改特定列的 TTL,您必须使用新的 TTL 重新插入数据。 Apache Cassandra™ 用新的 TTL 更新列,用旧的 TTL 替换旧值(如果存在)。

看到这个link

【讨论】:

  • 是的,但是如果在这 2 秒内刷新和压缩数据,我认为“幽灵”会存在于某些 sstables 中
猜你喜欢
  • 1970-01-01
  • 2015-11-29
  • 2019-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多