我正在使用真棒Cassandra DB(3.7.0),我对墓碑有疑问。
我有一个叫raw_data
的表。此表的默认TTL为1小时。该表每秒获取新数据。然后另一个处理器读取一行并删除该行。
似乎这个raw_data
表在运行几天后读取和写入变得缓慢。
这是因为删除的行仍然是墓碑吗?该表已经有1小时的TTL。我应该将gc_grace_period
设置为少于10天(默认值)以快速删除墓碑吗? (顺便说一下,我是单节点DB)
提前谢谢。
答案 0 :(得分:3)
简而言之,Tombstones用于Cassandra标记数据被删除,并将其复制到其他节点,因此删除的数据不会重新出现。这些墓碑将存放在Cassandra中,直到gc_grace_period。创建更多的石头可能会减慢你的桌面速度。当您使用单个节点Cassandra时,您不必复制其他节点中的任何内容,因此您可以将 gc grace seconds更新为1天,这不会影响。将来如果您计划添加新节点和数据中心,请更改此gc宽限秒。
答案 1 :(得分:3)
删除数据是解决逻辑删除问题的方法。 TTL是另一种方式。
每次删除后,Cassandra 群集变得越来越慢,这是很正常的,您的群集最终会拒绝从此表中读取数据。
将gc_grace_period
设置为小于默认10 days
只是等式的一部分。另一部分是您使用的压缩策略。实际上,为了移除墓碑,需要压实。
我改变了对单节点群集的看法,我选择 RF = 3 的最低标准3节点。然后我设计我的项目围绕一些没有明确删除数据的东西。如果你绝对需要删除数据,请确保C *定期运行压缩并删除逻辑删除(或强制C *运行压缩),并确保有足够的IOPS,因为压缩是非常IO密集的。