【问题标题】:gc_grace_seconds to remove tombstone rows in cassandragc_grace_seconds 删除 cassandra 中的墓碑行
【发布时间】:2017-10-03 23:25:57
【问题描述】:

我正在使用很棒的 Cassandra DB (3.7.0),但我对墓碑有疑问。

我有一个名为raw_data 的表。此表的默认 TTL 为 1 小时。该表每秒获取新数据。然后另一个处理器读取一行并删除该行。

这个raw_data 表在运行几天后似乎读写速度变慢了。

这是因为删除的行保留为墓碑吗?该表已经将 TTL 设为 1 小时。我应该将gc_grace_period 设置为少于 10 天(默认值)以快速删除墓碑吗? (顺便说一下,我是单节点DB)

提前谢谢你。

【问题讨论】:

    标签: cassandra


    【解决方案1】:

    删除数据是有墓碑问题的方法。 TTL 是另一种方式。

    Cassandra 集群在每次删除后变得越来越慢是很正常的,并且您的集群最终会拒绝从此表中读取数据。

    gc_grace_period 设置为小于默认10 days 只是方程式的一部分。另一部分是您使用的压缩策略。实际上,为了移除墓碑,需要进行压实。

    我会改变我对单节点集群的想法,我会选择具有 RF=3 的最低标准 3 个节点。然后我会围绕不明确删除数据的东西来设计我的项目。如果您绝对需要删除数据,请确保 C* 定期运行压缩并删除墓碑(或强制 C*​​ 运行压缩),并确保有足够的 IOPS,因为压缩非常消耗 IO。

    【讨论】:

    • 谢谢你,xmas79。顺便说一句,C* 是什么?我最终应该考虑 RF=3。 :)
    • @diehard98 C* 是 Cassandra 的快捷方式。
    【解决方案2】:

    简而言之,Cassandra 使用 Tombstones 来标记数据已删除,并将其复制到其他节点,因此已删除的数据不会重新出现。这些墓碑将存储在 Cassandra 中,直到 gc_grace_period。创建更多的 tobestones 可能会减慢您的餐桌速度。由于您使用的是单节点 Cassandra,因此您不必在其他节点中复制任何内容,因此您可以将 gc grace seconds 更新为 1 天,这不会产生影响。将来,如果您计划添加新节点和数据中心,请更改此 gc 宽限秒数。

    【讨论】:

    • 谢谢。似乎通过将 gc_grace_period 设置为非常短的时间,我的数据库到目前为止运行良好。 (已经连续运行了将近 3 天)所以,墓碑确实减慢了我的查询速度。
    猜你喜欢
    • 2015-06-04
    • 2014-12-24
    • 2017-12-26
    • 2019-02-16
    • 1970-01-01
    • 2023-03-08
    • 2021-04-22
    • 1970-01-01
    • 2019-07-09
    相关资源
    最近更新 更多