3招解決時序數據高基數難題,性能多維度提升!

来源:https://www.cnblogs.com/huaweiyun/archive/2023/11/27/17859260.html
-Advertisement-
Play Games

本文分享自華為雲社區《DTSE Tech Talk | 3招解決時序數據高基數難題,性能多維度提升!》,作者:華為雲開源。 本期《openGemini全新列存引擎,為您解決時序數據高基數難題》的主題直播中,華為雲開源DTSE技術佈道師&資料庫創新Lab技術專家黃飛騰,與開發者朋友們分享了時序資料庫的 ...


本文分享自華為雲社區《DTSE Tech Talk | 3招解決時序數據高基數難題,性能多維度提升!》,作者:華為雲開源。

本期《openGemini全新列存引擎,為您解決時序數據高基數難題》的主題直播中,華為雲開源DTSE技術佈道師&資料庫創新Lab技術專家黃飛騰,與開發者朋友們分享了時序資料庫的特點和遙測數據應用場景下的優勢,通過解析openGemini的框架引出了資料庫行業長期存在的一大痛點—由於高基數導致的性能大幅下降,並向大家介紹了openGemini時序資料庫針對這一難題而開發的列存引擎是如何有效改善高基數帶來的不利影響。

為什麼面對海量遙測數據,時序資料庫才是更佳選擇?

市面上有很多不同類型的數據存儲系統,它們在不同場景具有不同的優勢和局限性。那海量遙測數據場景下,我們應該選擇什麼類型的資料庫呢?先感受一下遙測數據的龐大,全國每天光智能電錶就能生成500億條記錄,10萬輛車的企業每天採集約1PB數據。海量的數據產生後給存儲帶來了巨大的壓力,傳統資料庫已不能滿足如今的實際業務需求。因此,面向運維監控、物聯網等眾多領域,專註海量遙測數據存儲與分析的時序資料庫應運而生。

以openGemini時序資料庫為例,它具有高併發、低時延、低成本的特性,完美契合企業的需要。更重要的是,openGemini框架中自帶全新開發的“列存引擎”,重點解決時序高基數問題,為性能保駕護航。

高基數會帶來什麼樣的問題?

首先瞭解一下基數是什麼,基數:表示某一列數據中唯一值的個數。

那高基數就可以理解為一個列中不同值的數量很大。不同的標簽或者列有不同的基數,如 ip 地址基數可能達到億級,時間戳則與採樣頻率相關,採樣頻率越高則基數越高。

在高基數的場景下,tag組合數量、SID數量會急劇膨脹,倒排索引中的 SID lists 膨脹,導致倒排索引的維護與查詢開銷增大。

最終,對外表現的性能會急劇下降,那高基數給時序引擎帶來的具體問題為:

  • 記憶體資源
  • 讀寫性能下降

openGemini如何應對高基數問題?

openGemini目前解決該問題應對措施為:列式存儲+排序+聚簇索引。

簡單來說,我們把時間線的約束去掉,採取部分的標簽和列做排序,排序完成後會按照排序鍵排序列示存儲,存儲之後再構造一個稀疏(聚簇)索引,這樣的優勢是:索引相對於數據而言,總是稀疏的,與時間線無關,構建開銷不會隨時間線的增加而增加。聚簇索引存儲每個 Block 的第一條記錄,數據有序時,該索引有良好得過濾效果。

列存引擎和時序引擎最主要的差別是數據排序的方式和索引方式的不同。時序引擎是按照時間線力度來做聚簇,然後再按時間做排序。而高基數列存引擎是按照特定的列做排序,跟時間線無關。時序引擎採用倒排索引,時間線膨脹會導致倒排索引的開銷變大,列存引擎的構建與時間線無關。繼而以上的列存引擎設計思路可以大大提升資料庫的讀寫性能。

時序引擎的倒排索引,本質上存儲了一個 kv 對,其中 key 對應到所有的 tag 列名 + tag 值,value 對應該 tag 值所對應的所有時間線,所以通過倒排索引可以快速查找到特定 tag 列的所有唯一值。如果沒有倒排索引,則需要完全掃描該列數據,併進行去重,查詢開銷與數據量成正比,在數據量較大的情形,開銷非常大。新引入的列式存儲方案,基於現有倒排索引對 key 的去重能力,直接存儲了該列的唯一值。

手把手教你輕鬆使用列存引擎

openGemini 從 v1.1.0 版本開始支持列存引擎以及 Arrow 協議。

文檔:https://docs.opengemini.org/zh/guide/features/high_series_cardinality.html

Arrow Flight 配置


創表


接下來請查看實操演示視頻,複製鏈接查看直播完整版:https://bbs.huaweicloud.com/live/DTT_live/202311151630.html

列存引擎在高基數場景的驗證結果

如下圖所示,與其他資料庫做測試對比,從時間線支持規模來看,openGemini達到無上限;單核寫入性格提升到60萬rows/s/cpu;

在特定4個場景下,億級時間線併發查詢時延都遠遠低於測試產品,最低時延為0.012s。在全量數據統計查詢場景下,openGemini與對比產品基本相當,整體時延都非常低。總體看,openGemini不論是寫入還是查詢,性能都十分優秀。


歡迎大家加入openGemini社區

openGemini社區旨在打造開放、合作、包容的全球性技術社區,社區正在快速發展中,接下來會聚焦於開發更多功能,對性能進行調優。社區尚有理想未達,在此誠邀大家參與openGemini的建設(不限於代碼、文檔、生態貢獻),同社區一起成長,彼此攜手方能到達遠方。

點擊關註,第一時間瞭解華為雲新鮮技術~

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 在 .NET Core 中,日誌是一個非常重要的組件,它可以幫助我們記錄應用程式的運行情況,以便在出現問題時進行排查。在本文中,我們將介紹五個優秀的 .NET Core 日誌框架,它們分別是 Serilog、NLog、Log4Net、Microsoft.Extensions.Logging 和 Lo ...
  • 1. 平均負載 平均負載是指單位時間內,系統處於可運行狀態和不可中斷狀態的平均進程數,也就是平均活躍進程數,它和CPU使用率並沒有直接關係。 可運行狀態的進程是指正在使用CPU或者等待CPU資源的進程。當我們使用類似於"ps"命令時,這些進程通常以"R"狀態(Running或Runnable)顯示。 ...
  • 哈嘍大家好,我是鹹魚 今天我們繼續來講一講 Kafka 當有消息被生產出來的時候,如果沒有指定分區或者指定 key ,那麼消費會按照【輪詢】的方式均勻地分配到所有可用分區中,但不一定按照分區順序來分配 我們知道,在 Kafka 中消費者可以訂閱一個或多個主題,並被分配一個或多個分區 如果一個消費者消 ...
  • Linux 內核從 2.5 版本開始針對 NUMA 架構做了大量優化工作,同時也提供了豐富的工具和介面,可以幫助我們很容易的完成訪問本地記憶體的設置。所以,通過適當的性能調優,可以提供更高的計算能力。 性能優化通常可以通過五個步驟完成 ...
  • Proj4:改進LiteOS中物理記憶體分配演算法 實驗目的 掌握LiteOS系統調用的自定義方法 實驗環境 Ubantu和IMX6ULL mini 實驗內容 (從代碼角度詳細描述實驗的步驟和過程) 原先代碼: 1 /* 2 3 * Description : find suitable free bl ...
  • Shell使用 在圖標和視窗占據電腦屏幕之前。需要輸入命令與大多數電腦進行交互。在UNIX系統(Linux系統派生自該系統)中,用來解釋和管理命令的程式稱為shell。 Shell類型: Bash shell,Bourne Again Shell,預設shell。 BSD UNIX用戶中流行的C ...
  • GMAC網卡Fixed-Link模式GMACfixed-link固定鏈接模式,mac與對端的連接方式是寫死的,通常用於mac to mac(不排除mac to phy的情況)。內核要支持fixed-link模式,需要打開CONFIG_FIXED_PHY配置。 社區版linux的gmac網卡platf ...
  • SQL RIGHT JOIN關鍵字 SQL RIGHT JOIN關鍵字返回右表(table2)中的所有記錄以及左表(table1)中的匹配記錄。如果沒有匹配,則左側的結果為0條記錄。 RIGHT JOIN語法 SELECT column_name(s) FROM table1 RIGHT JOIN ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...