【问题标题】:Max value for TTL in cassandracassandra 中 TTL 的最大值
【发布时间】:2015-01-06 22:38:19
【问题描述】:

我们可以分配给 TTL 的最大值是多少?

在 cassandra 的 java 驱动程序中,TTL 设置为 int。这是否意味着它仅限于 Integer.MAX(2,147,483,647 秒)?

【问题讨论】:

  • 我们说的是多少年?你真的需要比这更大的东西吗?
  • 这大约是 68 年......你计划在 68 年内生产 Cassandra 吗?即使你是对的,我认为这个问题不会由你处理:-)
  • 遗留代码是程序员死的时候!

标签: cassandra ttl


【解决方案1】:

最长的 TTL 实际上是 20 年。来自org.apache.cassandra.db.ExpiringCell

public static final int MAX_TTL = 20 * 365 * 24 * 60 * 60; // 20 years in seconds

我认为这在 CQL 和 Thrift 查询路径中都得到了验证。

【讨论】:

  • 供参考Integer.MAX_VALUE,因为秒相当于68.0511年。
【解决方案2】:

我不知道你为什么需要这个,但在 Cassandra 中默认 TTL 为空,这意味着在你强制之前不会删除它。

Cassandra 提供的一个非常强大的功能是能够 过期不再需要的数据。这个过期时间很灵活 并在单个列值的级别上工作。活着的时间 (或 TTL)是 Cassandra 为每个列值存储的值 指明该值的保留时间。

TTL 值默认为 null,表示写入的数据将 不会过期。

https://www.oreilly.com/library/view/cassandra-the-definitive/9781491933657/ch04.html

【讨论】:

    【解决方案3】:

    20 年最大 TTL 不再正确。根据 Cassandra news 阅读此通知:

    请阅读:最大 TTL 到期日期通知 (CASSANDRA-14092)

    可以表示的最大过期时间戳 存储引擎为 2038-01-19T03:14:06+00:00,表示插入 当前不支持在此日期后过期的 TTL。经过 默认情况下,TTL 超过最大支持日期的 INSERTS 是 被拒绝,但可以选择不同的过期溢出 政策。有关详细信息,请参阅 CASSANDRA-14092.txt。

    在 3.0.16 (3.0.X) 和 3.11.2 (3.11.x) 之前没有保护 针对 TTL 在最大支持日期后过期的 INSERTS, 导致过期时间字段溢出和记录 立即过期。 2.X 及更低系列中的集群不 启用断言时受此约束。备份的 SSTables 可以 可能恢复和恢复说明可以在上找到 CASSANDRA-14092.txt 文件。

    如果您使用或计划使用非常大的 TTLS(10 到 20 年),请阅读 CASSANDRA-14092.txt 了解更多信息。

    【讨论】:

      猜你喜欢
      • 2016-12-09
      • 2023-03-17
      • 2014-11-06
      • 1970-01-01
      • 2020-08-30
      • 2017-08-17
      • 2013-10-04
      • 1970-01-01
      • 2017-05-23
      相关资源
      最近更新 更多