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)