【问题标题】:Should Compaction within gc_grace_seconds Preserve Tombstones?gc_grace_seconds 内的压缩是否应该保留墓碑?
【发布时间】:2014-04-29 18:19:40
【问题描述】:

如果我删除一行(创建一个 tombstone),并在gc_grace_seconds 内运行一个主要的压缩,人们会期望 tombstone 至少在gc_grace_seconds 过去之前仍然存在吗?

【问题讨论】:

    标签: java cassandra


    【解决方案1】:

    是的,墓碑预计会存活 gc_grace_seconds。原因是如果一个节点在您删除该行的时间点关闭,则删除必须有机会稍后传播到该节点。当节点重新联机并且您运行 nodetool repair 时,它可以获取删除。如果您没有在 gc_grace_seconds 内运行修复,那么您删除的记录可能会死而复生。

    如果您正在运行单节点集群,那么您可以安全地将 gc_grace_seconds 设置为 0。因为没有其他节点可能会丢失删除。

    Cassandra operations、repair 和 gc_grace_seconds 上查看此页面。

    【讨论】:

    • 谢谢 - 我们认为我们在 Cassandra 中发现了一个错误,即当表格被截断时不会保留墓碑。
    • 我会说这是设计使然,而不是错误。截断表会物理删除 SSTable 文件。所以不可能给他们写墓碑。由于完全缺乏数据,因此也没有进程可以将其传播到集群的其他节点。
    • 从表中删除最后一个数据时也会发生这种情况。如果您在某个节点关闭时从表中删除了所有行,然后该节点又恢复了,它将恢复该表中的所有数据。 IMO SSTable 结构应该使得墓碑可以持续存在,即使表中没有其他任何东西可以防止上述情况发生。
    • 所以您是说如果您从表中删除所有数据(而不是截断表),SSTable 文件会被删除?我想这确实是一个错误。你运行的是哪个 Cassandra 版本?
    • 我们使用的是 2.0.5。我们正在尝试编写一个 RSpec 测试来重现该问题,然后希望我们会在 JIRA 中提出问题。
    猜你喜欢
    • 1970-01-01
    • 2017-10-03
    • 2020-12-18
    • 2013-07-09
    • 2017-12-26
    • 2017-02-09
    • 1970-01-01
    • 2019-10-26
    • 2014-12-24
    相关资源
    最近更新 更多