首页 > 其他分享 >使用 Easysearch,日志存储少一半

使用 Easysearch,日志存储少一半

时间:2023-05-15 18:32:45浏览次数:45  
标签:存储 source Easysearch 膨胀率 索引 Elasticsearch 日志

在海量日志存储场景中,索引膨胀率是一个关键指标,直接影响存储成本和查询性能。它表示原始数据与索引数据在磁盘上所占空间的比率。较高的索引膨胀率不仅增加了存储成本,而且可能会影响查询速度,尤其是在 I/O 密集型的查询中。因此,我们需要密切关注和优化索引膨胀率。接下来,我们将比较 Elasticsearch 和 Easysearch 在处理相同数据时的索引膨胀率。

测试结果

一图胜千言,下图是 Easysearch v1.1 和 Elasticsearch v6.4.3 的索引大小测试对比,Y 轴单位是 MB。

使用 Easysearch v1.1 的压缩功能,比 Elasticsearch v6.4.3 的索引大小降低了 50%。

使用 Easysearch,日志存储少一半_Elastic

测试说明

以下是对 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

标签:存储,source,Easysearch,膨胀率,索引,Elasticsearch,日志
From: https://blog.51cto.com/u_15963473/6280476

相关文章

  • Logstash关于日志清洗记录学习及应用
    logstash日志清洗:日志清洗任务,给了我乱七八糟资料之后看的一脸懵,最后决定自己动手整理整理这样有头绪点,记录一下自己学习过程。其中涉及到一些ip内容的我都改为ip,其他保持一致,欢迎大家一起讨论,我也是刚开始学习这个,如有写的不对请多指教。一、学习阶段1、首先理解logstash中各个......
  • elk日志收集之rsyslog软连接监控文件深度坑
    业务中通过rsyslog监控本地文件收集了一些redis和mc的慢日志,推到elk集群分析,这些日志一天一个文件,每晚零点5分通过计划任务用软连接的方式将新的文件固定到指定文件下,但是最近发现日志丢了很多,分析中发现了一个深坑,先说下现有的配置:rsyslog的配置如下,监控固定的文件:local6.*......
  • 修改 Docker 的默认存储路径
    通过修改Docker配置文件的方式来修改Docker数据存储路径,以减少系统盘的占用空间。1、停止Docker服务systemctlstopdocker2、备份当前的Docker数据存储目录/var/lib/dockermv/var/lib/docker/var/lib/docker.bak3、创建新的Docker数据存储目录,例如/data/doc......
  • Tomcat日志大
    #LicensedtotheApacheSoftwareFoundation(ASF)underoneormore#contributorlicenseagreements.SeetheNOTICEfiledistributedwith#thisworkforadditionalinformationregardingcopyrightownership.#TheASFlicensesthisfiletoYouundertheA......
  • JDBC学习日志五,JDBC操作事务
    事务:要么成功,要么失败ACID原则原子性:要么全部完成,要么都不完成一致性:最终的结果总数据不发生改变隔离性:多个进程互不干扰持久性:数据一旦提交不可逆,持久化到数据库模拟转账事务//模拟转账publicclassTransferDemo{publicstaticvoidmain(String[]args)th......
  • Java日志体系
    转载:https://juejin.cn/post/6905026199722917902前言对于一个应用程序来说日志记录是必不可少的一部分。线上问题追踪,基于日志的业务逻辑统计分析等都离不日志。java领域存在多种日志框架,目前常用的日志框架包括Log4j1,Log4j2,CommonsLogging,Slf4j,Logback,Jul。但是在我们的......
  • JDBC学习日志四,PreparedStatement
    PreparedStatement可以防止sql注入问题,效率更高先进行预编译sql,将要设置的字段值使用占位符本质:预编译会将传递进来的参数包裹成字符,而单引号会被转义字符转换为空内容,有效的防止sql注入的问题CRUD--SELECTStringsql="select*fromuserswhereid=?";st=......
  • MySQL的varchar存储原理:InnoDB记录存储结构
    摘要:varchar(M)能存多少个字符,为什么提示最大16383?innodb怎么知道varchar真正有多长?记录为NULL,innodb如何处理?某个列数据占用的字节数非常多怎么办?影响每行实际可用空间的因素有哪些?本篇围绕innodb默认行格式dynamic来说说原理。本文分享自华为云社区《MySQL的varchar水真的太深......
  • python-flask 技能点使用-03 请求钩子实现审计日志
    场景分析     使用pythonflask开发web系统,该系统是基于用户认证鉴权的web系统,系统中涉及到关键数据的操作,因此需要针对业务操作进行记录(也就是审计日志),便于管理员后期查看,在基于java的Spring系列框架中我们可以借助于AOP面向切面的编程来完成,在使用Flask时可以借助......
  • JDBC学习日志二,第一个JDBC程序与JDBC对象解释
    第一步,创建user表,测试数据库CREATEDATABASE`jdbcstudy`/*!40100DEFAULTCHARACTERSETutf8mb3*//*!80016DEFAULTENCRYPTION='N'*/usejdbcstudy;CREATETABLE`users`(`id`intNOTNULL,`NAME`varchar(40)DEFAULTNULL,`PASSWORD`varchar(40......