本文分享自華為雲社區《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的建設(不限於代碼、文檔、生態貢獻),同社區一起成長,彼此攜手方能到達遠方。