有一个将TTL设置为7天的表,我希望Cassandra在7天后会删除行。
我的表包含布尔型列,这些布尔型列在表上创建新行时将其设置为True。这些列永远不会更新为新值,因此这些列不会用新的TTL值更改TTL值(因为Cassandra是面向列的数据库)。
但是,我注意到在7天之后,所有列均设置为NULL值(预期将被删除),但布尔列保持为True,因此行从未被删除。 检查了所有列的TTL值,并且它们具有NULL值,这意味着TTL在包括布尔列的所有列上均已过期。
将布尔列手动设置为NULL(7天后)时,将按预期立即删除行。
我不明白为什么TTL过期后Cassandra为何不将布尔列设置为NULL,所以行将被自动删除。 Cassandra是否使用布尔列和TTL值以其他方式工作?
使用:
答案 0 :(得分:0)
解决方案:运行nodetool flush
后,此问题已解决,并且TTL过期后,该行将被删除。
那真的很奇怪,但是它正在起作用,我可以看到这些行立即被删除了。我找不到不删除表上已过期行的原因,即使这些行已在sstables上标记为已过期( expires = true )。