【问题标题】:Major Compaction on ScyllaDBScyllaDB 上的主要压缩
【发布时间】:2019-07-21 13:09:38
【问题描述】:

简单查询:- 我用 gc_grace_seconds 10 天删除了 Scylla 上的数据。 Scylla 创建了墓碑并等待 gc_grace_seconds 过期。

现在,我在删除后的第二天运行了主要压缩(gc_grace_seconds 到期还剩下 8 天)。

1) 压缩会做什么?它会考虑所有的墓碑并清除2天前删除的那些?

2) 我应该在运行主要压缩之前更改 gc_grace_seconds=0 吗?

请帮忙

提前致谢。

【问题讨论】:

    标签: database cassandra scylla tombstone


    【解决方案1】:

    1) 至少在 Cassandra(不知道 scylla)中,它不会清除墓碑,直到 gc_grace_seconds 过去。这就是宽限秒的用途 - 告诉数据库将墓碑保留至少那么长时间。

    2) 如果你真的想清除它们,你可以这样做。使用 0 gc grace 也意味着提示不会存储在 Cassandra 中,因此可能需要设置为 1,除非您认为新写入数据的持久性降低。还需要确保在您的数据被写入后修复已经完成,或者墓碑清除的数据可能(尽管不太可能)被复活。如果设置 only_purge_repaired_tombstones 将阻止清除甚至超过 gc 宽限,如果数据没有被修复(我会建议设置它的价值)

    【讨论】:

    • 谢谢。但是我仍然怀疑如果我将 gc_grace_sceonds 更改为 0 那么它将适用即将删除或已使用 gc_grace_seconds 10 删除或两者兼而有之?另外,从上面的评论来看,major compaction 不会清除总是以 gc_grace_second 为界的墓碑,对吧?
    • @LetsNoSQL Tombstones 仅包含有关删除发生时间的信息。在决定到期时,压缩总是在启动时从模式中获取 gc_grace_seconds。所以改变 gc_grace_seconds 也会影响已经存在的墓碑过期。
    • @LetsNoSQL Scylla 还不支持“only_purge_repaired_tombstones”。见github.com/scylladb/scylla/issues/3560。我认为目前的主要压缩不会留下任何过期的墓碑。
    • @Tomek,您的意思是更改 gc_grace_seconds 0 将更改 2 天前删除的该表的先前墓碑到期(先前的 gc_grace_seconds 10)。下一次压缩会清除那些墓碑,对吗?
    • @LetsNoSQL 是的,将 gc_grace_seconds 更改为 0 然后压缩应该清除所有墓碑。请注意,如果您使用 CQL 删除数据,这样做是不安全的,因为复制失败可能会导致数据复活。
    猜你喜欢
    • 2019-10-18
    • 1970-01-01
    • 2014-12-25
    • 1970-01-01
    • 2016-09-16
    • 1970-01-01
    • 1970-01-01
    • 2019-06-11
    • 1970-01-01
    相关资源
    最近更新 更多