使用Java,我可以扫描Cassandra表并仅更新一行的TTL吗?我不想更改任何数据。我只想扫描Cassandra表并设置几行的TTL。

另外,可以使用Java设置绝对的TTL。例如(2016-11-22 00:00:00)。因此,我不想以秒为单位指定TTL,而是要及时指定绝对值。

最佳答案

Cassandra不允许为设置TTL值,它仅允许为的值设置TTL。

如果您想知道为什么遇到到期,这是因为如果 all 记录的所有列的值都被设置为TTL,那么当您尝试对其进行SELECT编码时,该行就会消失。

但是,仅当您使用INSERT执行USING TTL时,这才是正确的。如果您在没有TTL的情况下使用INSERT,然后在使用TTL的情况下进行UPDATE,则仍会看到该行,但其值为空。这是一些示例和一些陷阱:

仅使用TTLed INSERT的示例:

CREATE TABLE test (
    k text PRIMARY KEY,
    v int,
);

INSERT INTO test (k,v) VALUES ('test', 1) USING TTL 10;

... 10 seconds after...

SELECT * FROM test ;

 k             | v
---------------+---------------

带有TTLed INSERT和TTLed UPDATE的示例:
INSERT INTO test (k,v) VALUES ('test', 1) USING TTL 10;
UPDATE test USING TTL 10 SET v=0 WHERE k='test';

... 10 seconds after...

SELECT * FROM test;

 k             | v
---------------+---------------

带有TTLed INSERT的非TTLed UPDATE的示例
INSERT INTO test (k,v) VALUES ('test', 1);
UPDATE test USING TTL 10 SET v=0 WHERE k='test';

... 10 seconds after...

SELECT * FROM test;

 k             | v
---------------+---------------
          test |          null

现在您可以看到解决问题的唯一方法是用新的TTL重写 all 您行的所有列的值。

此外,无法指定明确的到期日期,但是您可以使用简单的数学运算在中获得一个简单的TTL值(如其他建议)。

查看有关数据过期的官方documentation。并且不要忘记查看DELETE部分以更新TTL。

HTH。

关于cassandra - 只需连续设置TTL,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40730510/

10-14 10:58