在cassandra中,默认的\u time \u to \u live如何删除没有墓碑的行?

xj3cbfub  于 2021-06-15  发布在  Cassandra
关注(0)|答案(2)|浏览(500)

如何删除数据?
cassandra允许您为整个表设置默认的\u time \u to \u live属性。用常规ttl标记的列和行如上所述进行处理;但是,当一条记录超过表级ttl时,cassandra会立即删除它,而不进行逻辑删除或压缩。
这里也有答案
如果表有默认的\u生存时间\u,则超过此时间限制的行将立即删除,而不会写入逻辑删除。
并在lastpickle的帖子中评论了删除和墓碑
另一个需要探索的线索是,如果合适的话,可以使用ttl作为默认值。在c*3.0+中,在表级别设置为“default\u time\u to\u live”的TTL不应生成任何逻辑删除。我手上没有测试,但我读到了。
我做了一个最简单的测试 LeveledCompactionStrategy :

CREATE KEYSPACE IF NOT EXISTS temp WITH replication = {'class': 'SimpleStrategy', 'replication_factor': '1'};

CREATE TABLE IF NOT EXISTS temp.test_ttl (
    key text,
    value text,
    PRIMARY KEY (key)
) WITH  compaction = { 'class': 'LeveledCompactionStrategy'}
  AND default_time_to_live = 180;
``` `INSERT INTO temp.test_ttl (key,value) VALUES ('k1','v1');` nodetool flush temp `sstabledump mc-1-big-Data.db` ![](https://i.stack.imgur.com/Lqxqf.png)
等待180秒(默认\u时间\u到\u活动) `sstabledump mc-1-big-Data.db` ![](https://i.stack.imgur.com/sLUQU.png)
墓碑还没造出来
nodetool compact temp `sstabledump mc-2-big-Data.db` ![](https://i.stack.imgur.com/IGUrN.png)
创建墓碑(由于gc\u grace\u seconds,压缩时不会删除)
测试是使用apachecassandra3.0.13执行的
从这个例子我得出结论那不是真的 `default_time_to_live` 不需要墓碑,至少对于版本3.0.13。不过,这是一个非常简单的测试,我正在用 `nodetool compact` 所以我可能不会重新创建一个场景,在这个场景中,默认的实时魔法开始发挥作用。
但是没有墓碑c*怎么删除呢?为什么这与每次插入使用ttl不同?
r1wp621o

r1wp621o1#

但是墓碑记录和过期的TTL没有很大的区别。在您的例子中,强制主要压缩将ttl过期记录转换为墓碑,但由于gc\U grace\U秒,它没有被清除。根据此演示,墓碑/ttl过期记录将消失:
从来没有在它几秒钟前
在压缩过程中,对于超过gc\u宽限期的tombstone/ttl,将对照给定表的所有其他sstable的bloom过滤器检查它的分区密钥
如果存在bloom过滤器冲突,则墓碑将保留,即使冲突为假阳性。
如果任何sstable中存在任何数据,甚至该分区的其他墓碑,则不会清除墓碑
如果bloom过滤器指示分区键上没有重叠的可能性,那么逻辑删除就会被清除。
所以从技术上讲,墓碑/ttl可能会在gc\u grace之后消失,但这并不能保证。

qyyhg6bp

qyyhg6bp2#

我被你在我们博客(最后一个pickle博客)上回答这个问题时提到的一段文档愚弄了。我可能回答得太快了,尽管我写了一个“探索”的东西,甚至说我没有明确尝试过。
另一个需要探索的线索是,如果合适的话,可以使用ttl作为默认值。在c3.0+中,在表级别设置为“default\u time\u to\u live”的TTL不应生成任何逻辑删除。我手上没有测试,但我读到了。
所以我上面的句子是错的。基本上,缺省值可以在查询级别被ttl覆盖,我看不出cassandra如何在没有tombstones的情况下处理这个问题。
从这个例子我得出结论那不是真的 default_time_to_live 不需要墓碑,至少对于版本3.0.13。
另外,我很高兴看到你不相信我,也不相信我,但你自己尝试过。这绝对是正确的方法。
但是没有墓碑c
怎么删除呢?为什么这与每次插入使用ttl不同?
是的,就是这个,
希尔斯。
阿兰·罗德里格斯-@arodream-alain@thelastpickle.com 法国/西班牙
最后的泡菜-ApacheCassandra咨询公司http://www.thelastpickle.com

相关问题