ES压缩算法优化

背景

Lucene 当前针对 Document Fields 数据的存储,支持两种压缩算法:

  • LZ4
  • Deflate

LZ4 具有更快的压缩与解压速度,而 Deflate 在压缩率上更占优势。两者在性能与压缩率上存在明显的差异,基于现有的压缩算法,用户不能很好的兼容压缩比和性能,Lucene 默认的压缩算法是 LZ4。

优化方案

整合业内先进的压缩算法 Zstandard(ZSTD),提升压缩率的同时,性能损耗小。

Zstandard 压缩算法的优势

Zstandard 压缩算法可以说兼顾了 LZ4 与 Deflate 两者的优点:在性能上与 LZ4 相当(针对日志数据的测试中,发现 Zstandard 算法比 LZ4 略优),而压缩率略弱于 Deflate。

如下是关于三种压缩算法的对比测试结果:

压缩算法加载时间(1 Shard)加载时间(5 Shards)Fields(*fdt)文件大小索引总大小
LZ41143769ms420447ms4.15 GB6.3 GB
Deflate1270408ms448738ms2.56 GB4.7 GB
Zstandard(16K Chunk)1109414ms415256ms2.93 GB5.1 GB
Zstandard(32K Chunk)1088959ms406661ms2.67 GB4.8 GB

注意:

  1. 测试数据:基于某典型日志应用类数据。
  2. 测试方法:基于 Elasticsearch Rest High Level Client API。

使用方式

基于 Rest High Level Client API

在创建 Index 时,为 CreateIndexRequest 添加"index.codec"配置项,value 设置为"zstandard":

CreateIndexRequest createRequest = new CreateIndexRequest(indexName);
createRequest.settings(Settings.builder()
  .put("index.number_of_shards", shards)
  .put("index.number_of_replicas", replicas)
  .put("index.codec", "zstandard")
);

基于 HTTP 请求

类似的,也在 settings 中添加"index.codec"配置项,并将 value 设置为"zstandard":

PUT /newIndex 
{
  "settings": {
    "**index.codec**": "**zstandard**",
    "index.number_of_shards": 1
  }
} 

优化效果

ZSTD 行存压缩率相较 LZ4 提升35%,性能和 LZ4 相当

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值