【问题标题】:When TTL expires in non primary key columns the row does not get deleted after update当非主键列中的 TTL 过期时,更新后不会删除该行
【发布时间】:2016-08-04 23:28:31
【问题描述】:

根据 Cassandra 文档,插入和更新的行为相同。但如果我尝试以下命令:

CREATE TABLE IF NOT EXISTS my_keyspace.users (
   userId UUID,
   name TEXT,
   surname TEXT,
   phone TEXT
   PRIMARY KEY (userId, name, surname)
);

INSERT INTO my_keyspace.users (userId, name, surname, phone) 
VALUES (6f4c9ece-d47e-4582-a9e3-6c6f740f47d6, 'John', 'Doe', '555 5555 555') USING TTL 20;

UPDATE my_keyspace.users  USING TTL 10 SET phone = '777 777 777'
WHERE userId = 6f4c9ece-d47e-4582-a9e3-6c6f740f47d6 AND name = 'John' AND surname = 'Doe'
IF phone = '555 5555 555';

10s列值置NULL,20s整行删除

但如果我试试这个:

UPDATE my_keyspace.users  USING TTL 20 SET phone = '777 777 777' WHERE userId = 6f4c9ece-d47e-4582-a9e3-6c6f740f47d6 AND name = 'John' AND surname = 'Doe';

UPDATE my_keyspace.users  USING TTL 10 SET phone = '777 777 777' WHERE userId = 6f4c9ece-d47e-4582-a9e3-6c6f740f47d6 AND name = 'John' AND surname = 'Doe' IF phone = '555 5555 555';

10s后删除整行

谁能解释为什么在这种情况下行为不同,以及主键列如何实际决定何时删除自己?

【问题讨论】:

    标签: java cassandra


    【解决方案1】:

    当主键的 TTL 已过期且其所有列的 TTL 已过期时,该行将被删除。

    您不能在更新语句中更改主键列的 TTL,您可以使用新的 TTL 值对其进行更新(从 Cassandra 2.2.1 开始,这适用于 TTL 小于原始值)。

    您执行第二组更新语句所花费的时间很可能足以使整行过期。我不能像你自己说的那样复制它。尝试将 INSERT 的 TTL 设置为更高的值,然后按照您所说的那样尝试观察它。

    【讨论】:

      猜你喜欢
      • 2019-12-20
      • 1970-01-01
      • 2019-09-23
      • 2015-02-01
      • 2014-04-11
      • 1970-01-01
      • 2021-11-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多