Elasticsearch 8.19.0 和 9.1.0 中 LogsDB 和 TSDS 的性能与存储改进

作者:来自 Elastic Martijn Van Groningen

探索 TSDS 和 LogsDB 的最新增强功能,包括优化 I/O、提升合并性能等。

Elasticsearch 带来了许多新功能,帮助你为你的使用场景构建最佳搜索解决方案。通过我们的示例笔记本深入学习,开始免费云试用,或立即在本地机器上试用 Elastic。

Elasticsearch 存储引擎团队专注于提升存储效率、索引吞吐量和资源利用率。我们很高兴宣布在 Elasticsearch 8.19.0 和 9.1.0 版本中, Time Series Data Streams(TSDS)和 LogsDB 索引模式获得了多项增强。这些改进源于我们致力于帮助 DevOps、SRE 和安全团队更有效、更经济地管理海量日志和指标数据。

LogsDB 和 TSDS 的最新改进自动解决了成本和规模的挑战,实现了显著的性能和效率提升:

  • 通过优化恢复源数据处理,摄取期间的磁盘 I/O 降低了 50%,带来更高的索引吞吐量和更低的资源消耗。

  • 提升带有数组的文档(如 IP 地址列表)的存储效率,进一步减少磁盘使用并加快索引速度。

  • doc_values 的段合并性能提升最高达 40%。段合并是一个资源密集型的后台过程,在数据摄取时持续运行。大多数字段启用了 doc_values 和倒排索引等数据结构,这降低了索引时的整体 CPU 使用率。

  • 通过用更高效的跳表实现替换 BKD 树(仅在 9.1.0 版本提供),_seq_no 字段的存储减少约 50%。这导致整体存储使用减少,具体减少量取决于每个文档的字段数量;在我们的内部时间序列数据基准测试中,总存储使用减少约 10%。

在我们的内部 LogsDB 基准测试中,这些改进相比 Elasticsearch 8.17.0 版本发布时的 LogsDB,实现了约 16% 的存储减少和约 19% 的中位索引吞吐量提升

总的来说,与 8.17 版本中的标准模式相比,LogsDB 现在的存储效率提升最高达 4 倍,而索引吞吐量的损失最多仅为 10%。

Compared to 8.17 standard8.19 logsdb basic8.19 logsdb enterprise9.1 logsdb basic9.1 logsdb enterprise
Median indexing throughput overhead11.00%10.02%11.64%4.94%
Storage (cost) improvement2.68x3.65x2.87x3.83x

除了存储效率,我们还持续关注索引吞吐量的开销,因为我们认识到这是采用 LogsDB 的关键考量。对此,我们已将该开销(overhead)降低至 10% 以内(9.1 企业版中甚至低于 5%),使 LogsDB 能够适用于各种日志管理场景,包括高吞吐量的数据摄取。

基础:LogsDB 和 TSDS 如何优化存储

在深入了解新功能之前,让我们回顾一下 LogsDB 和 TSDS 在管理日志和指标数据方面如此强大的核心原理。这两种模式都会自动触发一系列优化,以提升存储效率,其中两个最重要的优化是 synthetic _source 和索引排序(index sorting)。

  • 索引排序(Index Sorting):该功能确保文档以特定顺序存储在磁盘上。通过对数据排序(例如按 host.name 和 @timestamp 排序),相似数据被聚集在一起,使现有压缩技术更为高效,并启用专门的、依赖顺序的编解码器(如 delta of deltas 和运行长度编码)。这能进一步减少存储使用,代价是在索引过程中略微增加 CPU 消耗。

  • synthetic _source:默认情况下,Elasticsearch 在 _source 字段中存储索引时发送的原始 JSON 文档。而 synthetic _source 的做法是不存储 _source,而是从其他已索引的数据结构(如 doc values)实时重建 _source。其权衡是显著减少存储空间使用,代价是重建后的 _source 可能在细节上略有不同(例如字段顺序可能变化)。这是 LogsDB 和 TSDS 实现存储节省的核心功能之一。注意:该功能仅对 Elastic Cloud 无服务器客户和拥有 Enterprise 许可证的组织开放

这些基础功能已经带来了极大的价值,而最新更新则在此基础上进一步提升了效率。

通过移除恢复源大幅减少磁盘 I/O

即使启用了 synthetic _source,旧版本的 Elasticsearch 仍会将原始 source 写入磁盘的一个特殊字段,用于确保副本分片可以通过主分片重放数据来恢复。然而,即使这些原始数据最终会被丢弃,临时存储它们也会带来显著的磁盘 I/O 开销。

从 8.19.0 和 9.1.0 版本开始,我们已完全移除这一步骤。Elasticsearch 不再写入这个临时恢复源,从而极大提升了索引性能。仅此一项更改,在我们的 TSDS 基准测试中,将写入时的磁盘 I/O 降低了约 50%

这种磁盘 I/O 的大幅减少直接带来了 16% 的中位索引吞吐量提升,让你能够更快地摄取更多数据。

加速段合并以降低 CPU 开销

Lucene 的 doc values 在 Elasticsearch 中作为列式存储使用,支撑了排序、聚合和过滤等多种功能(当没有倒排索引或 BKD 树时)。启用索引排序后,将数据刷新到磁盘以及段合并的开销会增加,因为所有数据结构(包括倒排索引、doc values 和存储字段,例如 source)都需要按照排序配置进行排序。

我们对这个过程进行了重大优化。此前,每个字段在合并时需多次遍历文档(最多四次),每次遍历都执行一次合并排序,这是一项 CPU 密集型操作。

从 8.19.0 和 9.1.0 版本开始,我们将这个流程优化为每个字段只需一次遍历即可完成合并。这一更改使 doc values 的段合并速度提升最多达 40%。结果是索引过程中的整体 CPU 占用显著下降,特别适合高摄取场景,在这些场景下系统需要持续合并段。

更智能的数组处理,实现更高的存储效率

此前,synthetic _source 无法重建数组中值的顺序,因此必须将整个数组存储在一个名为 _ignored_source 的单独字段中。这意味着对于包含数组的字段(如安全标签列表或 IP 地址列表),数据被存储了两次:一次在 doc_values 中,另一次在 _ignored_source 中。

现在,我们改进了对基本类型数组的处理方式。在 8.19.0 和 9.1.0 版本中,叶子(leaf)数组字段的顺序被保存在一个专门的 doc_values 字段中。这消除了将数据存储在 _ignored_source 中的需求,减少了存储使用,并提升了包含大量数组字段的文档的索引性能。

用跳表替代 BKD 树,实现最终的存储压缩

Elasticsearch 中的每个文档都有一个 sequence number,存储在 _seq_no 元数据字段中。该字段原本使用 BKD 树进行索引,以支持高效的范围查询,这对副本同步非常关键。例如,副本分片会请求 _seq_no 在 X 和 Y 之间的操作。然而,BKD 树构建代价高,且占用大量磁盘空间。

在 9.1.0 及更高版本中,LogsDB 和 TSDS 已将 _seq_no 字段的 BKD 树替换为 Lucene 的新 doc value skippers(基于 doc_values 的轻量跳表实现)。这一变更提升了索引性能,使 _seq_no 字段的存储减少约 50%,并在我们的时间序列数据内部基准测试中,整体存储使用进一步降低约 10%。代价是范围查询性能略有下降,这些查询用于主分片到副本分片的复制操作。

整合一切:今天就开始吧

Elasticsearch 8.19.0 和 9.1.0 的最新增强功能,为你的日志和时间序列数据带来了强大的存储节省和性能提升。通过优化 I/O、提升合并性能、更智能地处理数组以及精简元数据,我们让你比以往任何时候都更轻松、更经济地长期保留并分析关键的运维数据。

想要获得这些自动优化带来的好处,今天就升级到 Elastic 8.19.0 或 9.1.0 吧。

准备好深入了解如何优化你的数据存储了吗?

  • 如果你还没有账号,注册 Elastic Cloud

  • 查看 LogsDB 文档

  • 深入了解 Time Series Data Streams(TSDS)

  • 享受存储节省带来的收益

原文:LogsDB and TSDS performance and storage improvements in Elasticsearch 8.19.0 and 9.1.0 - Elasticsearch Labs

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/91763.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/91763.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

cs336之注意pytorch的tensor在哪里?(assert的使用)

问题 记住:无论何时你在pytorch中有一个张量tensor,你应该始终问一个问题:它当前位于哪里? 注意它在CPU还是在GPU中。要判断它在哪里,可以使用python的assert断言语句。 assert断言 在 Python 中,assert 是…

Mysql 分区表

分区表是将一张表分成多张独立子表,每个子表是一个区,目的是提高查询效率。 从 server 层来看,只有一张表。但是从引擎层来看,是多张表,对应多个.idb文件。引擎层访问数据只访问特定分区表,也只对特定分区表…

Makefile 入门与实践指南

Makefile 是用于 make 工具的配置文件,它定义了如何编译和链接你的项目,让构建过程自动化。一、核心概念 make 的核心思想是 “目标”(Target) 和 “依赖”(Dependencies): 目标 (Target)&#…

分布式微服务--Nacos作为配置中心(补)关于bosststrap.yml与@RefreshScope

一、关于bosststrap.yml✅ bootstrap.yml 和 application.yml 的区别对比项bootstrap.ymlapplication.yml加载时机优先于 application.yml 加载(启动早期)程序初始化完成后加载主要用途设置应用的外部配置源、注册中心信息等设置应用内部配置&#xff0c…

[Qt]QString 与Sqlite3 字符串互动[汉字不乱码]

环境:Qt C(msvc c)1.将与数据库交互的代码文件编码转换为utf-8-bom编码,(可使用notepad 进行转换)2.在代码文件头文件中加上下面代码。//vs2010 版本是 1600 #if defined(_MSC_VER) && (_MSC_VER &…

SpringBoot启动项目详解

SpringBoot 的启动过程是一个整合 Spring 核心容器、自动配置、嵌入式服务器等功能的复杂流程,核心目标是 “简化配置、快速启动”。下面从入口类开始,逐步拆解其详细启动步骤:一、启动入口:SpringBootApplication与main方法Sprin…

PCB 控深槽如何破解 5G 基站 120℃高热魔咒?

5G 基站在高频通信下的功耗较 4G 基站提升 3-4 倍,射频模块、电源单元等核心部件的工作温度常突破 120℃,远超设备安全阈值(≤85℃),形成制约通信稳定性的 “高热魔咒”。印制线路板(PCB)作为热…

NEXT.js 打包部署到服务器

在网上查了一下,记录一下1.首先执行打包命令,我这个项目是用的pnpm,可以根据项目需求使用 npm 或者别的pnpm run build2.打包完成后会有一个 .next 的文件夹,需要把下图的这些文件放到服务器。服务器需要有node环境之后就需要执行…

【AI分析】uv库自动安装脚本uv-installer-0.8.3.ps1分析

目录uv 安装脚本完整分析报告1. 脚本概述2. 参数解析3. 环境变量控制4. 核心函数详解a. Install-Binary(主控函数)b. Get-TargetTriple(架构检测)c. Download(下载处理)d. Invoke-Installer(安装…

etcd 的安装与使用

介绍 Etcd 是一个 golang 编写的分布式、高可用的一致性键值存储系统,用于配置共享和服 务发现等。它使用 Raft 一致性算法来保持集群数据的一致性,且客户端通过长连接 watch 功能,能够及时收到数据变化通知,相较于 Zookeeper 框…

conda : 无法将“conda”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正

详细问题 PS C:\Users\wh109> conda init powershell conda : 无法将“conda”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正 确,然后再试一次。 所在位置 行:1 字符: 1conda init pow…

HQChart实战教程58:K线主图仿TradingView实现

本文将详细介绍如何使用HQChart实现类似TradingView风格的K线主图,包含完整的代码实现和详细注释,适合金融图表开发者和量化交易爱好者阅读。 一、TradingView风格特点分析 在开始实现前,我们先分析TradingView的K线主图核心特点: 简洁现代的UI设计:深色背景、清晰的网格…

GitPython08-源码解读

GitPython08-源码解读 1-核心知识 1)gitPython核心代码很多都是对git命令返回的结果进行解析,在此补充git命令的返回内容2)git ls-tree -> 查看某个提交或分支所对应的目录树3)源码中Tree对应的业务逻辑 -> 获取git ls-tre…

中科院开源HYPIR图像复原大模型:1.7秒,老照片变8K画质

目录 前言 一、告别“龟速”艺术家,拥抱“闪电”打印机 二、不止是高清:它看得懂文字,更能理解你的心意 2.1 首先,它是位“文字保卫者” 2.2 其次,它还是个“细节创造家” 2.3 最后,它是一个能“听懂…

设计Mock华为昇腾GPU的MindSpore和CANN的库的流程与实现

在没有华为昇腾GPU可用的情况下用C库写一个Mock MindSpore和CANN的库,调用多核CPU和内存的资源来模拟GPU的算力,调试MindSpore和CANN的C代码,做这个库的基本流程步骤和详细设计是什么? 要创建一个Mock库来模拟华为昇腾GPU&#xf…

【AI问答记录】grafana接收query请求中未携带step参数,后端基于intervalMs和maxDataPoints等参数计算step的逻辑

让我详细分析Grafana源码中计算step的完整逻辑,它确实比简单的intervalMs/1000复杂得多。 完整的Step计算流程 1. 入口点:[models.Parse](file://F:\JavaProject\grafana-release-11.2.0\pkg\promlib\models\query.go#L190-L274)函数 在pkg/promlib/mode…

再谈亚马逊云科技(AWS)上海AI研究院7月22日关闭事件

【科技明说 | 科技热点关注】亚马逊云科技(AWS)上海AI研究院已于2025年7月22日正式解散,这是亚马逊在全球范围内的最后一个海外研究中心的关闭。这个消息是否是真的,目前得到的印证来自其研发中心的首席科学家王敏捷在…

Python中的决策树机器学习模型简要介绍和代码示例(基于sklearn)

一、决策树定义 决策树是一种监督学习算法,可用于**分类(Classification)和回归(Regression)**任务。 它的结构类似树状结构: 内部节点:特征条件(如X > 2)叶子节点&am…

Redis集群分布式(Redis Cluster)底层实现原理详细介绍

文章目录一、Redis集群概念二、集群节点1. 节点如何启动2. 节点的集群数据结构2.1 clusterNode结构2.2 clusterLink结构2.3 clusterState结构3. 节点如何加入集群三、数据分片机制1. 记录节点的槽指派信息2. 传播节点的槽指派信息3. 记录集群所有槽的指派信息4. 节点的槽指派命…

【走遍美国精讲笔记】第 1 课:林登大街 46 号

ACT 1-1 “我可以给您和您的小男孩拍张照吗?” 【故事梗概】 自由摄影艺术家 Richard Stewart,正在为编出自己的影集《走遍美国》到处拍照。今天他在由纽约市曼哈顿区到斯塔滕岛的渡船上工 作,回程中遇到了来自加州的一位黑人妇女 Martha Van…