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
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...