为什么 Cassandra 4.x 不支持 ZSTD 作为压缩线协议?

Why might ZSTD not be supported as the compression wire protocol in Cassandra 4.x?

在挖掘 Cassandra 资源时,我注意到不支持 ZSTD 作为 Cassandra 上的有线协议。唯一的选择是LZ4和Snappy。

https://github.com/apache/cassandra/blob/cassandra-4.0-rc1/src/java/org/apache/cassandra/transport/Compressor.java#L39

https://github.com/apache/cassandra/blob/cassandra-4.0-rc1/src/java/org/apache/cassandra/transport/Compressor.java#L127

即使在即将发布的 Cassandra 4.x 版本中也不支持 ZSTD。然而,4.x https://github.com/apache/cassandra/blob/cassandra-4.0-rc1/src/java/org/apache/cassandra/io/compress/ZstdCompressor.java

中提供了基于 ZSTD 的存储压缩

虽然 Cassandra 是可插拔的,而且制作补丁以添加 ZSTD 支持似乎相当简单 - 我不知道为什么要省略这样的东西。

与 Cassandra 相关的一切似乎都有相当多的部落知识与之相关,因此引起了人们的好奇心。

整体权衡可能是因为压缩、传输压缩数据然后使用 ZSTD 解压缩的总时间比不压缩传输的时间要长。然而,对于存储,较低的 space 要求证明了开销是合理的。

使用诸如 https://quixdb.github.io/squash-benchmark/#transfer-plus-processing 之类的工具,您可以 运行 数字并自己探索这些数据,选择各种处理器和数据集。

例如,它向我展示了 lz4 和 snappy 都比不压缩更快,但是 zstd 压缩的更高开销并没有被其快速解压缩和更小的传输与完全不压缩相比所抵消。