【问题标题】:Invoke a Major Compaction in one node or in all nodes在一个节点或所有节点中调用主要压缩
【发布时间】:2015-04-11 14:28:45
【问题描述】:

大家好。我仍然是 Cassandra 的菜鸟,所以请多多包涵。

我的问题是,当我运行主要压缩时,我是否必须在所有节点中运行它,或者我只需要在一个节点中运行它,这将触发所有剩余节点中的主要压缩?

【问题讨论】:

    标签: cassandra


    【解决方案1】:

    如果使用nodetool compact,它将仅在您运行 nodetool 的 cassandra 节点上执行主要压缩。我会避免在生产中同时对所有节点进行主要压缩,因为压缩会影响性能。您还应该有充分的理由进行重大压缩,因为这是一项昂贵的操作,而且在大多数用例中您都不会这样做。

    【讨论】:

    • 我们的用例是使用 cassandra 来存储我们用来验证我们处理的事务的数据。我们的应用程序只需要不超过 5 分钟的数据。我们会在执行验证后立即删除该数据。我们的用例产生了很多墓碑,这就是我们考虑安排定期主要压缩的原因
    • 您是否考虑过使用 TTL (docs.datastax.com/en/cql/3.1/cql/cql_using/use_expire_c.html) 并将 gc_grace_seconds 设置为 0 而不是显式删除您的数据?这样你就没有墓碑了,过期的数据会更快地消失(但仍会保留一段时间)。
    • 另一件需要研究的是最近引入的日期分层压缩策略 (datastax.com/dev/blog/datetieredcompactionstrategy),它根据创建的时间将突变保持在一起。
    【解决方案2】:

    您的数据模型听起来很像队列,这是众所周知的 cassandra 反模式。

    一般来说,如果您希望您的数据一次只存在 5 分钟,那么强制执行主要压缩可能是您能做的最糟糕的事情 - 理想情况下,您希望使用 TTL,或者可能将 GCGS 降到非常低并且考虑使用 Date Tiered Compaction 而不是 Size tiered 或 Leveled,以便可以快速有效地删除整个 sstable。

    【讨论】:

      猜你喜欢
      • 2012-03-14
      • 1970-01-01
      • 1970-01-01
      • 2017-09-29
      • 2011-09-18
      • 2022-10-17
      • 2017-09-11
      • 2012-12-03
      • 1970-01-01
      相关资源
      最近更新 更多