我们在Cassandra中存储的数据是纯时间序列,没有手动删除。数据仅通过TTL删除。
对于这种用例,真的需要维修吗?不运行维修有什么影响?
答案 0 :(得分:1)
在gc_grace_seconds + compaction之后,碎片数据确实被删除了。如果没有压缩逻辑删除数据的表,您将堆叠这些数据,这将导致性能下降。
如果您未在gc_grace期间内进行修复,则死数据可以再次存在。这是关于此的数据文章(以及为什么需要定期运行修复):
https://docs.datastax.com/en/cassandra/2.1/cassandra/dml/dml_about_deletes_c.html
编辑:
TTLed数据在到期时不会被逻辑删除,但只有在有压缩过程时(至少在3.9中)。即使没有墓碑,您也不会看到过期的数据。
因此,如果节点出现问题,并且TTL数据在压缩时没有得到它的墓碑,它将在下一次压缩时得到一个,或者只是被删除。根据这一点,以及数据永远不会被删除且仅过期的事实,并且您没有任何相同的密钥,您不必为数据一致性进行修复。
而且,就上述所有情况而言,我会建议偶尔进行修理(两者之间的间隔要大得多),万一不小心写了不写你的通行证。
答案 1 :(得分:0)
如果设置了TTL,cassandra会在超过时间后用墓碑标记数据。如果你没有定期进行修复,会产生巨大的墓碑,这会影响cassandra的性能
自列创建超过TTL值后的秒数,TTL数据被视为已过期并包含在结果中。在读取路径上的下一次读取之后,过期数据用逻辑删除标记,但最多保留gc_grace_seconds。经过这段时间后,在正常的压缩和修复过程中会自动删除逻辑删除的数据
https://docs.datastax.com/en/cql/3.1/cql/cql_using/use_expire_c.html