表行为的cassandra TTL

时间:2017-01-09 07:20:36

标签: cassandra

假设我在second-1处插入了一列,而在second-2处插入了另一列。表的默认TTL设置为10秒,例如:

问题1 :10秒后数据1和数据2将被删除,10秒后数据1将被删除,11秒后数据2被删除(因为它插入第2秒) ?

问题2 :是否可以在表级设置TTL,使表中的每个条目都以FIFO方式基于TTL到期? (data-1将在second-10到期,data-2在second-11到期),而不是在为每个数据点插入时指定TTL? (应该能够在表级指定吗?)

感谢您的帮助:)

修改

https://docs.datastax.com/en/cql/3.1/cql/cql_using/use_expire_c.html处的页面

  

为表格设置TTL

     

CQL表定义支持default_time_to_live属性,   它将特定的TTL应用于表中的每一列。之后   default_time_to_live TTL值已经超过,Cassandra墓碑   整个桌子。使用此方法将此默认TTL应用于CQL中的表   CREATE TABLE或ALTER TABLE

他们说"整张桌子"这让我很困惑。

2 个答案:

答案 0 :(得分:2)

表级别的TTL与级别的TTL没有任何不同:它指定每行的默认 TTL时间。

TTL指定必须在多长时间后将值视为过时并因此删除。参考点是INSERT / UPDATE时间戳,因此如果您在09:53:01插入/更新行:

  • TTL为10秒,将于09:53:11到期
  • TTL为15秒,将于09:53:16到期
  • TTL为0秒,永不过期

您可以通过在查询中指定USING TTL X子句来覆盖默认 TTL时间,其中X是您的新TTl值。

请注意,明智地使用TTL 而不是会导致墓碑问题。并且还要注意TTL的使用有一些怪癖。有关详细信息,请查看this最近的答案。

答案 1 :(得分:1)

问题1答案:数据1将在10之后删除,数据2将在11 秒后删除

问题2答案: Cassandra使用表格的ttl插入每一列,因此每列都将在插入时间+ ttl到期。