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
英文地址,請注明出處:http://en.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…