首頁
>
資源
>
會議活動

一文了解時序數(shù)據(jù)庫 IoTDB 分區(qū)、同步與備份

9 月 24 日,“保障數(shù)據(jù)永不丟失!數(shù)據(jù)管理實戰(zhàn):分區(qū)、同步與備份”直播中,天謀科技時序數(shù)據(jù)庫內(nèi)核研發(fā)工程師,IoTDB 項目交付負(fù)責(zé)人曹志佳圍繞 IoTDB 分區(qū)同步和備份相關(guān)原理及實踐展開,為大家介紹了數(shù)據(jù)分區(qū)對時序數(shù)據(jù)庫的重要性、IoTDB 的分區(qū)機制和同步方式,以及流處理框架的應(yīng)用場景。

此次直播回放可在這里查看,主要內(nèi)容我們?yōu)槟憧偨Y(jié)如下:

01 數(shù)據(jù)分區(qū)的重要性及特征

(1)時序數(shù)據(jù)背景及特征

隨著 IT 和 OT 行業(yè)技術(shù)的快速迭代,時序數(shù)據(jù)在工業(yè)、能源、軍工等眾多領(lǐng)域的價值日益凸顯,如在 AI 分析、設(shè)備預(yù)警等場景中發(fā)揮著重要作用。

時序數(shù)據(jù)的特點,一是測點數(shù)量巨大,如儲能行業(yè)大型儲能站傳感器數(shù)量可百萬級,全國范圍內(nèi)測點量級能達百億;汽車行業(yè)某品牌在路上行駛車輛的測點量級可達 10 億以上。二是存儲代價大,如鋼鐵制造行業(yè)超大型煉鋼裝置和新能源發(fā)電場景中的風(fēng)機,數(shù)據(jù)產(chǎn)生量大且采集頻率高,對磁盤需求達 PB 級以上。

數(shù)據(jù)分區(qū)同步與備份直播回顧圖1-20251013.png

(2)數(shù)據(jù)分區(qū)的定義及優(yōu)勢

數(shù)據(jù)分區(qū)的定義為將數(shù)據(jù)按照一定規(guī)則進行切分,形成可獨立管理的數(shù)據(jù)單元。以圖書館管理書籍為例,有數(shù)據(jù)分區(qū)時,按類別將書籍放置在不同書架,管理和查找效率更高。

面對海量的時序數(shù)據(jù),傳統(tǒng)數(shù)據(jù)庫難以管理,數(shù)據(jù)分區(qū)可提高數(shù)據(jù)管理和查詢效率。

數(shù)據(jù)分區(qū)同步與備份直播回顧圖2-20251013.png

02 IoTDB 的數(shù)據(jù)分區(qū)機制

(1)分區(qū)維度及概念

IoTDB 的數(shù)據(jù)分區(qū)基于序列和時間兩個維度,涉及概念包括序列分區(qū)槽和時間分區(qū)槽。

序列分區(qū)槽是對時間序列的縱向管理機制,默認(rèn)是數(shù)據(jù)庫級別的,每個數(shù)據(jù)庫持有固定數(shù)量(默認(rèn) 1,000 個)的序列分區(qū)槽,通過哈希算法將序列分配到不同槽位,可避免內(nèi)存映射占用過多問題。

時間分區(qū)槽是對時間序列的橫向管理機制,將數(shù)據(jù)按固定時間范圍(默認(rèn) 7 天)切分,可提高數(shù)據(jù)查詢效率。

數(shù)據(jù)分區(qū)同步與備份直播回顧圖3-20251013.png

(2)分區(qū)在集群中的分布

IoTDB 節(jié)點分為 ConfigNode 和 DataNode,ConfigNode 是集群的管理者和協(xié)調(diào)者,DataNode 處理客戶的讀寫請求。

源數(shù)據(jù)分區(qū)和數(shù)據(jù)分區(qū)位于 DataNode 中,每個 DataNode 上存在一個或多個 SchemaRegion 和 DataRegion。IoTDB 集群通過負(fù)載均衡算法保證數(shù)據(jù)分區(qū)在不同節(jié)點上均勻分布,提高數(shù)據(jù)存儲和寫入的均衡性和效率。

數(shù)據(jù)分區(qū)同步與備份直播回顧圖4-20251013.png

(3)讀寫視角下的分區(qū)執(zhí)行流程

寫入流程中,客戶端將寫入請求發(fā)送給 IoTDB 集群的任意節(jié)點,節(jié)點根據(jù) device_id 做負(fù)載均衡算法,確定數(shù)據(jù)寫入的節(jié)點,再根據(jù)數(shù)據(jù)攜帶的時間判斷其所屬的時間分區(qū)。

查詢流程中,查詢請求發(fā)送到數(shù)據(jù)庫后,查詢引擎通過 device_id 快速判斷數(shù)據(jù)所在節(jié)點,將請求轉(zhuǎn)發(fā)給該節(jié)點生成查詢計劃,再根據(jù)查詢請求中的時間范圍從相應(yīng)時間分區(qū)中撈取數(shù)據(jù),無需掃描其他時間分區(qū),提升查詢效率。

數(shù)據(jù)分區(qū)同步與備份直播回顧圖5-20251013.png

03 IoTDB 的數(shù)據(jù)同步機制

(1)數(shù)據(jù)同步的分類及場景

IoTDB 的數(shù)據(jù)同步機制分為集群內(nèi)同步和集群外同步。

集群內(nèi)同步是指集群不同節(jié)點之間的數(shù)據(jù)同步,基于一致性協(xié)議實現(xiàn),目的是保證集群的高可用和數(shù)據(jù)副本的一致性。

集群外同步是指不同 IoTDB 集群之間的數(shù)據(jù)同步,可用于多集群間的數(shù)據(jù)協(xié)同,如熱備份、容災(zāi)和端邊云協(xié)同等場景。

數(shù)據(jù)分區(qū)同步與備份直播回顧圖6-20251013.png

(2)集群內(nèi)同步的協(xié)議及流程

IoTDB 支持的協(xié)議類型分為強一致性和弱一致性(最終一致性)協(xié)議。IoTDB 源數(shù)據(jù)分區(qū)和 ConfigNode 采用 Ratis 強一致性協(xié)議,確保請求在所有副本間成功更新才認(rèn)為成功,但會產(chǎn)生數(shù)據(jù)延遲;DataNode 的讀寫采用團隊自研的 IoTConsensus 協(xié)議,允許數(shù)據(jù)先寫入本地,再異步同步到其他節(jié)點,可最大化提升寫入性能。

同步流程中,服務(wù)端收到請求后,先由共識層處理,將請求下發(fā)給狀態(tài)機,再由狀態(tài)機下發(fā)給 DataRegion,DataRegion 調(diào)用存儲引擎將請求寫入內(nèi)存表和 WL。日志分發(fā)線程異步將寫入請求同步給副本節(jié)點,維護一個待同步隊列,當(dāng)隊列無元素時向共識層索要請求。若副本節(jié)點掉線,主節(jié)點會記錄同步進度,節(jié)點恢復(fù)后繼續(xù)同步,保證數(shù)據(jù)的最終一致性。

集群內(nèi)協(xié)議可用于集群內(nèi)單點故障的容災(zāi),當(dāng)主節(jié)點出現(xiàn)問題時,備節(jié)點能自動升級為主節(jié)點繼續(xù)提供讀寫服務(wù)。

數(shù)據(jù)分區(qū)同步與備份直播回顧圖7-20251013.png

(3)集群間同步的框架及應(yīng)用場景

IoTDB 提供的流處理框架包括數(shù)據(jù)抽取、數(shù)據(jù)處理和數(shù)據(jù)發(fā)送三個階段。數(shù)據(jù)抽取決定從 IoTDB 中取出的數(shù)據(jù)范圍,包括測點范圍和時間范圍;數(shù)據(jù)處理可對抽取的數(shù)據(jù)進行編程化處理,如刪除離散值、轉(zhuǎn)換數(shù)據(jù)類型等;數(shù)據(jù)發(fā)送由用戶決定將處理后的數(shù)據(jù)發(fā)送到何處??蚣苤С钟脩艋诠俜教峁┑臉?biāo)準(zhǔn)化編程框架自定義邏輯,官方也提供了一些內(nèi)置插件。

IoTDB 的流處理框架可用于備份和容災(zāi),通過簡單 SQL 即可創(chuàng)建數(shù)據(jù)同步任務(wù),無需依賴第三方組件,實現(xiàn)異地容災(zāi),延遲可達毫秒級。還可應(yīng)用于數(shù)據(jù)庫內(nèi)的實時告警、流計算、實時聚合和數(shù)據(jù)寫回等場景,數(shù)據(jù)庫間的雙活集群、降采樣同步、跨網(wǎng)閘傳輸和數(shù)據(jù)加密等場景,以及數(shù)據(jù)庫外的數(shù)據(jù)訂閱、發(fā)送到消息隊列、Flink 數(shù)據(jù)加工和離線歷史備份等場景。

數(shù)據(jù)分區(qū)同步與備份直播回顧圖8-20251013.png

04 問答環(huán)節(jié)信息匯總

(1)Ratis 協(xié)議使用建議

對于追求數(shù)據(jù)高一致性且對寫入性能要求不高的場景,可考慮使用 Ratis 協(xié)議,IoTDB 對數(shù)據(jù)分區(qū)支持 Ratis 協(xié)議,但性能不如 IoTConsensus 協(xié)議。

(2)序列分區(qū)設(shè)計原因

面對超海量的源數(shù)據(jù),如儲能和氣象場景,為減少內(nèi)存管理資源消耗,采用序列分區(qū)槽的降維方式進行管理。

(3)跨網(wǎng)閘傳輸適配

流處理框架已對常見網(wǎng)閘(如南瑞、科東)做過適配,未適配的網(wǎng)閘只需進行簡單適配即可使用。

(4)高性價比軟硬件存儲方案

IoTDB 支持多級存儲,可將高頻數(shù)據(jù)存儲在 SSD 上,低頻數(shù)據(jù)存儲在機械硬盤或 S3 上,且支持查詢時從 S3 拉回數(shù)據(jù),用戶對此過程無感。

(5)主節(jié)點磁盤損壞數(shù)據(jù)丟失問題

主節(jié)點給副本節(jié)點發(fā)數(shù)據(jù)延遲低,基本可控制在 1 毫秒以內(nèi),但極端情況下可能有數(shù)據(jù)丟失,這是最終一致性協(xié)議相對于強一致性協(xié)議的小弊端。

(6)高一致性與最終一致性對比

寫入時,使用 Ratis 協(xié)議和 IoTConsensus 協(xié)議性能相差一半以上;查詢時,IoTDB 默認(rèn)查主節(jié)點,只要數(shù)據(jù)寫入,查詢效率不受影響。

(7)主副本掉線數(shù)據(jù)丟失問題

主節(jié)點會在共識層維護寫入請求的 index,記錄數(shù)據(jù)同步進度,節(jié)點恢復(fù)后能繼續(xù)同步未完成的數(shù)據(jù),不會丟失。

(8)多副本影響

多副本保證數(shù)據(jù)高可用,但會增加存儲空間需求。寫入時,副本同步為異步操作,一般不影響主線程,但在服務(wù)器資源瓶頸時可能有影響。

(9)主節(jié)點帶寬要求

IoTDB 采用多主協(xié)議,每個節(jié)點都可對外提供查詢服務(wù),數(shù)據(jù)查詢負(fù)載相對均衡。若帶寬有限,可在網(wǎng)絡(luò)傳輸中對數(shù)據(jù)進行壓縮,但會降低傳輸效率。

(10)查詢優(yōu)化

客戶端知道每個設(shè)備所在的 leader 節(jié)點,可自動連接該節(jié)點進行查詢,減少請求轉(zhuǎn)發(fā)。

(11)client 存儲配置

cache leader 功能可配置,客戶端資源好時可開啟,資源不足時可關(guān)閉。

(12)指定節(jié)點存儲副本問題

目前不支持指定節(jié)點存儲數(shù)據(jù)副本,但支持手動遷移。可通過創(chuàng)建多個集群進行實時數(shù)據(jù)同步,實現(xiàn)異地雙活。

更多內(nèi)容推薦:

下載時序數(shù)據(jù)庫 IoTDB 開源版

了解如何使用 時序數(shù)據(jù)庫 IoTDB 企業(yè)版