卡桑德拉ttl连续

snd*_*snd 14 row ttl cassandra

我知道Cassandra的列上有TTL.但是也可以在一行上设置TTL吗?在每列上设置TTL并不能解决我的问题,如以下用例所示:

在某些时候,进程想要删除带有TTL的完整行(假设行"A",TTL为1周).它可以通过使用相同内容替换所有现有列但TTL为1周来实现此目的.

但是可能有另一个进程同时在该行"A"上运行,该行插入新列或替换现有的没有TTL的进程,因为该进程无法知道该行将被删除(它同时运行!).因此,在1周后,除了这些新插入的行之外,由于TTL,所有行"A"的列都将被删除.而且我也希望它们被删除.

那么Cassandra是否会支持这个用例,或者我必须自己实现一些东西?

亲切的问候
Stefan

Ric*_*ard 11

目前无法在Cassandra中的某一行上设置TTL.TTL设计用于在写入时知道其生命周期时删除单个列.

您可以通过延迟您的过程来实现您想要的 - 而不是想要插入1周的TTL,一周后运行它并删除该行.行删除具有以下语义:之前插入的任何列都将被删除,但之后插入的列将不会被删除.

如果仍然需要删除将来插入的列,您可以在将来插入带有时间戳的行删除以确保这一点但要非常小心:如果您以后想要插入该行,则不能,列只会写入该行时消失(直到墓碑被垃圾收集).


小智 7

您可以使用Cassandra 3为行设置ttl

INSERT INTO Counter(key,eventTime,value) VALUES ('1001',dateof(now()),100) USING ttl 10;
Run Code Online (Sandbox Code Playgroud)

  • 它不适合提问者的用例。如果你更新一列,它的 ttl 将会改变(如果你在更新查询中没有指定任何 ttl,则该 ttl 将为 null)。因此,在 ttl 过期后,该行将与那些更新的列一起存在。 (2认同)