【问题标题】:Setting TTL in Cassandra在 Cassandra 中设置 TTL
【发布时间】:2019-07-12 15:06:53
【问题描述】:

在 Cassandra 中更新 TTL 时是否需要设置一些东西?

我有一张这样的桌子,

CREATE TABLE session(
  tokenId text PRIMARY KEY,
  username text);

我这样插入数据,

INSERT INTO session(tokenId, username) VALUES ('123123123123','admin') USING TTL 30;

我这样更新 TTL,

UPDATE session USING TTL 30 SET username = 'admin' WHERE tokenid = '123123123123' IF EXISTS;

它让我强制更新“用户名”,更新需要一组,有什么方法可以更新 TTL?

【问题讨论】:

    标签: cassandra cassandra-3.0 ttl


    【解决方案1】:

    这是一个非常棘手的问题。让我尽量解释一下我的理解。

    基本上,cassandra 不允许您更新一行的 TTL。如here 所述,为 每个 列维护 TTL。回到您的示例,具有TTL 值的insert 语句将为插入语句中的所有列创建相同的TTL。同时,update 语句仅适用于预期列(例如username)。希望对您有所帮助。

    INSERT 和 UPDATE 命令都支持为数据设置时间 要过期的列。使用 CQL 设置过期时间(TTL)。

    【讨论】:

    • 谢谢你的解释,我还是不能完全理解,我的问题是,是否可以只更新TTL而不更新任何列?
    • 答案是否定的。由于每列都维护 TTL,因此我们必须提及此类更新的列名。根据更新语句的当前语法,它必须是 = 。即使我们可以传递相同的值,但它仍然需要存在。我假设您正在寻找类似 @​​987654326@ 的东西,但当前的 CQL 语法不支持它。
    • 感谢您的解释:)
    • 哦,不好意思,我又查了一下,其实主键没有TTL的概念(这是我的错,抱歉)。一旦所有非主键都过期,该行将被删除。您可以使用 ttl 函数来检查列是否已经过期,例如select tokenid, ttl(username) from session.
    • 不客气,希望现在清楚。很抱歉造成混乱
    猜你喜欢
    • 1970-01-01
    • 2019-07-25
    • 1970-01-01
    • 1970-01-01
    • 2017-01-23
    • 1970-01-01
    • 2015-11-29
    • 2017-08-17
    • 1970-01-01
    相关资源
    最近更新 更多