【问题标题】:Cassandra TTL not working卡桑德拉 TTL 不工作
【发布时间】:2016-08-13 00:11:28
【问题描述】:

我将 datastax 与 cassandra 一起使用。我希望在插入 15 分钟后自动删除一行。但这一行仍然存在。

我的代码如下:

Insert insertStatement = QueryBuilder.insertInto(keySpace, "device_activity");
        insertStatement.using(QueryBuilder.ttl(15* 60));
        insertStatement.value("device", UUID.fromString(persistData.getSourceId()));
        insertStatement.value("lastupdatedtime", persistData.getLastUpdatedTime());
        insertStatement.value("devicename", persistData.getDeviceName());
        insertStatement.value("datasourcename", persistData.getDatasourceName());

该表由 4 列组成:设备(uuid)、数据源名称(文本)、设备名称(文本)、上次更新时间(时间戳)。

如果我查询某个字段的 TTL,它会显示 4126 秒,这是错误的。 //从 device_activity 中选择 TTL(devicename); // 给我 4126 秒

【问题讨论】:

  • 最终执行的查询是 INSERT INTO devicecloud_test.device_activity(device,lastupdatedtime,devicename,datasourcename) VALUES (ca5cff1f-b23a-426a-ba3f-f13300a2d8e6,1461150305100,'TestBench162','259642460471175使用 TTL 60;
  • 不明白,Cassandra使用的TTL,是4126还是60秒?
  • 我给了 900 秒,但 cassandra 显示给我 4126 秒
  • QueryBuilder.ttl(15* 60) // 在这一行中,我给了 900 秒。
  • 在执行之前打印insertStatement.getQueryString(),看看真正分配了哪个TTL

标签: cassandra datastax ttl


【解决方案1】:

在下面的链接中,提供了TTL的解释。

https://docs.datastax.com/en/cql/3.1/cql/cql_using/use_expire_c.html

"TTL 数据的精度是在服务器上计算的,精度为 1 秒。因此,一个非常小的 TTL 可能没有多大意义。此外,服务器上的时钟应该同步;否则可能会观察到精度降低,因为过期时间在接收初始插入但随后由集群上的其他主机解释的主要主机上计算。"

阅读本文后,我可以通过在相应的节点(机器)上设置适当的时间来解决。

【讨论】:

    猜你喜欢
    • 2017-11-14
    • 1970-01-01
    • 2018-04-15
    • 1970-01-01
    • 2015-10-19
    • 2015-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多