用于表行为的cassandra TTL

46qrfjad  于 2022-11-05  发布在  Cassandra
关注(0)|答案(3)|浏览(264)

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

问题1:是数据1和数据2将在10秒后删除,还是数据1将在10秒后删除,而数据2将在11秒后删除(因为它是在第2秒插入的)?
问题2:是否可以在表级别设置TTL,使表中的每个条目都将以FIFO方式基于TTL过期?(数据1将在第10秒过期,数据2将在第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将对整个表进行逻辑删除。使用CREATE TABLE或ALTER TABLE将此默认TTL应用于CQL中的表
他们说“整张table”,这让我很困惑。

drkbr07n

drkbr07n1#

表级别的TTL与 * 值 * 级别的TTL完全相同:它为每一行指定了 default TTL时间。
TTL指定在多少秒后必须将值视为过期并删除。参考点是INSERT/UPDATE时间戳,因此,如果您在09:53:01插入/更新行:

  • 如果TTL为10秒,它将在09:53:11到期
  • 如果TTL为15秒,它将在09:53:16到期
  • 如果TTL为0秒,则它永远不会过期

您可以通过在查询中指定USING TTL X子句来覆盖 default TTL时间,其中X是新的TTL值。
请注意,使用TTL明智可能会导致墓碑问题。也请注意TTL的用法有一些怪癖。请查看this最近的答案以了解更多细节。

70gysomp

70gysomp2#

问题1回答:数据1将在10秒后删除,数据2将在11秒后删除
问题2回答:Cassandra使用表的ttl插入每一列,因此每一列将在插入时间+ ttl时过期。

3bygqnnd

3bygqnnd3#

我读了这个主题和很多其他的主题,但我仍然感到困惑,因为在https://docs.datastax.com/en/cql-oss/3.3/cql/cql_using/useExpire.html
他们是这样说的:

  • 如果任何列超过TTL,则整个表将被逻辑删除。*

他们是什么意思?我知道当只有一个列超过default_time_to_live时,没有任何意义对表中的所有列进行逻辑删除,但他们写的正是这样!
UPD:我做了几个测试。default_time_to_live只表示列级别上的默认TTL。当这个TTL过期时,只有TTL过期的具体列才会被删除。
他们在那篇文章里用了很奇怪的句子。

相关问题