rocksdb-doc-cn

哪些内容会被压缩?

在每个SST文件里,数据块和索引块会被分别压缩。用户可以指定压缩类型。过滤块不会被压缩

配置

压缩配置是针对每个列族的。

使用options.compression来指定使用的压缩方法。默认是Snappy。我们相信LZ4总是比Snappy好的。我们之所以把Snappy作为默认的压缩方法,是为了与之前的用户保持兼容。LZ4/Snappy是轻量压缩,所以在CPU使用率和存储空间之间能取得一个较好的平衡。

如果你想要进一步减少存储的使用并且你有一些空闲的CPU,你可以尝试设置options.bottommost_compression来使用一个更加重量级的压缩。最底层会使用这个方式进行压缩。通常最底层会保存大部分的数据,所以用户通常会选择偏向空间的设定,而不是花费cpu在各个层压缩所有数据。我们推荐使用ZSTD。如果没有,Zlib是第二选择。

如果你有大量空闲CPU并且希望同时减少空间和写放大,把options.compression设置为重量级的压缩方法。我们推荐ZSTD,如果没有就用Zlib

通过一个已经撤销的遗留选项options.compression_per_level,你可以有更好的控制每一层的压缩方式。当这个选项被使用的时候,options.compression不会再被使用,但是options.bottommost_compression仍旧有效。但是我们相信很少有这个选项有用的情况。

请注意,当你针对不同不同的层设定不同的压缩方式,一些压缩里的“不那么重要的移动”,会跟压缩方式有冲突的操作,将不会被执行,文件会被改写为新的压缩方式。

指定的压缩方式总是同时应用在索引和数据块。你可以通过把BlockBasedTableOptions.enable_index_compression设置为false来关闭索引的压缩。

压缩层和窗口大小设定

有些压缩类型支持不同的压缩层和窗口设定。你可以通过options.compression_opts设定他们。如果设定的类型不支持这些设定,他们不会生效

字典压缩

用户可以选择使用一个存储在文件里的字典对每个最底层的SST文件进行压缩。在某些情况下,这可以省下一些空间。参考 字典压缩

压缩库

如果你选择一个库里面不存在的压缩方式,RocksDB会后退到无压缩。RocksDB会在日志的头部打印出支持的压缩方式:

2017/12/01-17:34:59.368239 7f768b5d0200 Compression algorithms supported:
2017/12/01-17:34:59.368240 7f768b5d0200         Snappy supported: 1
2017/12/01-17:34:59.368241 7f768b5d0200         Zlib supported: 1
2017/12/01-17:34:59.368242 7f768b5d0200         Bzip supported: 0
2017/12/01-17:34:59.368243 7f768b5d0200         LZ4 supported: 1
2017/12/01-17:34:59.368244 7f768b5d0200         ZSTDNotFinal supported: 1
2017/12/01-17:34:59.368282 7f768b5d0200         ZSTD supported: 1

通过检查日志,来发现可能出现的兼容性问题。

看到这里或许你有建议或者疑问或者指出错误,请留言评论! 多谢! 你的评论非常重要!也可以帮忙点赞收藏转发!多谢支持! 觉得写的不错那就给点吧, 在线乞讨 微信转账