【问题标题】:Offline compaction/merging of multiple SSTables into one将多个 SSTable 离线压缩/合并为一个
【发布时间】:2019-10-19 00:24:08
【问题描述】:
$ cd /tmp
$ cp -r /var/lib/cassandra/data/keyspace/table-6e9e81a0808811e9ace14f79cedcfbc4 .
$ nodetool compact --user-defined table-6e9e81a0808811e9ace14f79cedcfbc4/*-Data.db

我希望将两个 SSTable(其中第二个仅包含墓碑)合并为一个,这相当于第一个减去第二个中的墓碑掩盖的数据。

但是,最后一个命令返回 0 退出状态,table-6e9e81a0808811e9ace14f79cedcfbc4 目录中没有任何变化(仍然有两个表)。任何想法如何以离线方式无条件地将潜在的多个 SSTable 合并为一个(如上,不在运行集群当前使用的 SSTable 文件上)?

【问题讨论】:

    标签: cassandra nosql datastax nodetool


    【解决方案1】:

    只是nodetool compact <keyspace> <table>没有真正的离线压缩,只是告诉cassandra哪些sstables要压缩。用户定义的压缩只是给它一个自定义的 sstable 列表,一个主要的压缩(上面的例子)将包括一个表中的所有 sstable。

    虽然它确实取决于您使用的版本是否可以工作,但 https://github.com/tolbertam/sstable-tools#compact 可用。如果绝望可以为您的版本导入 cassandra-all 并喜欢它:https://github.com/tolbertam/sstable-tools/blob/master/src/main/java/com/csforge/sstable/Compact.java

    【讨论】:

    • 很好的指点,很有帮助,谢谢!同时,我将重新实现这个 Java 应用程序,并让这个问题浮出一段时间,以防其他人有更多想法。否则,愿意接受你的回答。
    • @AlexanderShukaev 您是否设法离线压缩 SSTables?你愿意分享你的所作所为吗?这将非常有帮助。谢谢
    • @BuckBazooka,你到底在找什么?我所做的只是从sstable-tools 命令行实用程序中删除必要的代码来创建我自己的代码,它只是为了简单和企业使用而合并。您也可以按原样使用sstable-tools,那里不需要任何工作。
    • 嗯,我问的原因主要是代码原样,对我来说有点可疑。首先似乎存在泄漏,如果您查看代码,您会看到诸如海龟/海龟之类的表名键空间的占位符之类的东西。我想知道生成的压缩文件是否真的正确。
    • 从 cassandra-all lib 构建的 sstable-tools 项目主要是针对 PoC 的东西,这些东西慢慢地转移到 C* 中(该项目的多个部分现在在 C* ,稳定转储,稳定元数据)。紧凑的工具将来也可能在 C* 中。不过,它是安全的,使用相同的压缩代码而不使用 Purgers(这可能比普通压缩更安全)。如果您自己编写,您可以使用 sstabledump 中的代码来避免海龟/海龟黑客等生成 TableMetadata。
    猜你喜欢
    • 1970-01-01
    • 2023-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    • 2018-11-05
    相关资源
    最近更新 更多