如何在Cassandra DB中更新现有记录的生存时间(TTL)



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

:

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

需求:当用户通过UI更改过期时间时,我们希望更改数据库中的TTL。是否有任何选项来更新记录的TTL在Cassandra DB。

我对这个问题做了一些研究,得出以下几点结论:

  1. 我们可以为Cassandra DB中的任何记录增加TTL,但它需要重置所有字段,并为单个记录更新查询
  2. 我们不能以任何代价降低任何记录的TTL值。即使你更新记录的TTL值更少,记录将保留在数据库中,直到最大的TTL值,无论是旧的或新的。更新过的值

你可以执行一个"fake update"

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,卡洛

Cassandra 2.0.7版本


INSERT INTO Table (col1, col2) VALUES ('001','aaa') USING TTL 200;
INSERT INTO Table (col1, col2) VALUES ('001','aaa') USING TTL 2;等待2秒,行消失;

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

查看此链接

最新更新