使用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/