在海量日志存储场景中,索引膨胀率是一个关键指标,直接影响存储成本和查询性能。它表示原始数据与索引数据在磁盘上所占空间的比率。较高的索引膨胀率不仅增加了存储成本,而且可能会影响查询速度,尤其是在 I/O 密集型的查询中。因此,我们需要密切关注和优化索引膨胀率。接下来,我们将比较 Elasticsearch 和 Easysearch 在处理相同数据时的索引膨胀率。
测试结果
一图胜千言,下图是 Easysearch v1.1 和 Elasticsearch v6.4.3 的索引大小测试对比,Y 轴单位是 MB。
使用 Easysearch v1.1 的压缩功能,比 Elasticsearch v6.4.3 的索引大小降低了 50%。
测试说明
以下是对 Elasticsearch v6.4.3 版本,测试数据 500 万条大小 1.054G(1080M)的 nginx 日志,使用 es 默认的 mapping,分别用 best_compression 和 default 的压缩策略进行写入。
Elasticsearch v6.4.3
索引 | 大小(MB) | 膨胀率 | 条数(万) |
---|---|---|---|
nginx_default_1g | 1812.61 | 1.61 | 500 |
nginx_best_1g | 1551.36 | 1.42 | 500 |
然后我们对比下,使用极限科技的 Easysearch 进行索引膨胀率的压测.
Easysearch 是什么?
INFINI Easysearch 衍生自基于开源协议 Apache 2.0 的 Elasticsearch 7.10 版本。 Easysearch 的目标是提供一个轻量级的 Elasticsearch 可替代版本,并继续完善和支持更多的企业级功能,与 Elasticsearch 相比,Easysearch 更关注在搜索业务场景的优化和继续保持其产品的简洁与易用性。
安装包大小只有 54 兆,相比 Elasticsearch 动辄一两百兆的安装包更加轻量级。
Easysearch v1.1
索引 | 大小(MB) | 膨胀率 | 条数(万) |
---|---|---|---|
nginx_default_1g | 1514 | 1.33 | 500 |
nginx_best_1g | 1286 | 1.138 | 500 |
nginx_zstd_1g | 1015.3 | 0.94 | 500 |
nginx_reuse_1g | 758.39 | 0.70 | 500 |
注意上面使用到的 Easysearch 的压缩策略有 4 种:
压缩策略 | 描述 |
---|---|
default | 和 Elasticsearch 的 default 压缩策略一致。 |
best_compression | 和 Elasticsearch 的 best_compression 一致。 |
ZSTD | ZSTD(Zstandard)是一种开源的压缩算法和压缩库,旨在提供高性能和高压缩比的数据压缩解决方案。由 Facebook 开发并开源的一个压缩库,Easysearch 1.1 版引入了这个压缩算法作为一个可选的压缩策略,分别对存储字段,doc_values,和词典文件进行了压缩,并且 Easysearch 使用的 zstd 是纯 java 版,不依赖底层的操作系统和 cpu 架构,无需单独编译可以直接部署在国产的操作系统和芯片上。 |
index.source_reuse | Easysearch v1.1 新增加的一个索引配置项,表示是否对 source 中的字段进行复用,熟悉 Elasticsearch 存储结构的都知道,es 底层依赖 lucene 作为核心的存储和查询引擎,默认 mapping 下,在将 es 的字段解析成 lucene 的对应字段后,一个 keyword 类型的字段会分别存储在 _source 和 doc_values 字段里,Easysearch 将 keyword 字段在 source 存储时进行了过滤,然后在查询阶段又利用 doc_values 对 source 里过滤的 keyword 字段进行了无缝拼接,用户层面感知不到对 keyword 字段的特殊处理。 |
default 和 best_compression 比之前 6.43 版的膨胀率降低是因为得益于 lucene 版本的升级到了 8.11.2,新版的 lucene 的压缩比之前的版本有了很大提升。
重点是最后利用 ZSTD 加 index.source_reuse,存储资源的占用比之前 6.43 版本的 best_compression 的 1.5G 减少了 50%,对比相同 lucene 版本的 best_compression,存储资源也减少了 40%,带来以下几点好处:
- 降低存储成本:较低的索引膨胀率意味着存储相同量的数据需要更少的磁盘空间,这将直接减少硬件和维护成本。
- 提高系统扩展性:由于索引占用的存储空间较小,可以在相同的硬件上处理更多的数据,或者在扩展存储时,需要添加的硬件更少。
- 更高效的数据备份和传输:小的索引文件意味着备份和传输数据的时间和带宽需求都会减少。
使用方法
##启用ZSTD
PUT nginx_zstd
{
"settings": {
"codec": "ZSTD"
}
}
##启用index.source_reuse
PUT nginx_reuse
{
"settings": {
"index.source_reuse": true
}
}
##结合使用
PUT nginx_reuse
{
"settings": {
"codec": "ZSTD",
"index.source_reuse": true
}
}
最后附上 Easysearch 的下载地址,欢迎大家下载试用。
https://www.infinilabs.com/download/?product=easysearch