1. 程式人生 > 其它 >壓縮比達到 7:1,TDengine 助力校園智慧用電系統降本增效

壓縮比達到 7:1,TDengine 助力校園智慧用電系統降本增效

TDengine滿足了3萬條/秒的寫入速度,並且壓縮率達到了驚人的1/7左右。對於在校園網環境服務的整個構架中運作的應用來說,TDengine不停機的資料節點擴充套件也保證了穩定的服務。

作者:惠州工業網際網路研究院

小 T 導讀:惠州市新一代工業網際網路創新研究院(以下簡稱研究院)成立於 2018 年 6 月,是以部省聯動實施國家重點研發計劃“寬頻通訊和新型網路”重點專項為契機,在廣東省科技廳和惠州市政府的支援下成立,立足惠州、面向廣東、輻射全國、聯動國際的工業網際網路省級科技創新平臺。

為實現宿舍用電的智慧化管理、保證學生用電的獨立性和安全性,針對學校宿舍用電的收費,研究院打造的智慧用電管控系統採用一室一表一保護的方案,為學生宿舍配置智慧電能計量表計和用電保護裝置,對每個使用者的用電進行獨立計量和保護。

這套系統通過網際網路採集所有終端的資料,再由通訊閘道器將資料通過無線組成的專用網路或區域網將資料傳輸至遠端管理計算機。系統管理軟體再對資料進行儲存、處理,形成學校後勤管理方需要的圖形、文字等形式的檔案,以此實現整個學生宿舍用電的智慧化管理。

在整個系統的構建中,令我們比較頭疼的是關於資料庫的選擇,這套用電系統會產生大量的時序資料,在達成基礎的儲存、壓縮和查詢功能需求外,還需要平衡搭建、學習和維護等各種成本。基於此,我們開始進行資料庫選型,以期找到最適合該用電管控系統的資料庫產品。

從系統架構進行資料庫選型

智慧用電管控系統採用工業網際網路平臺典型的端網邊雲系統架構,通過物聯絡統及閘道器解耦裝置與應用平臺,加速資料的聚合與開放,服務於智慧校園安全用電、用電繳費等場景,同時可支援智慧校園其他專案快速接入需要。下圖為具體的架構示意圖:

為了找到合適的資料庫產品,我們先對整個系統架構進行了分析。

在整體架構中,該資料庫的資料需要作為基礎設施的資料儲存,通過校園網路提供包括物聯絡統在內的如下資料輸出:

  • 工業通訊終端:高效能通訊閘道器能同時接入多臺水電氣表及智慧保護開關,支援多種工業協議,能同時解析不同型別裝置資料,並能按自設定的上報頻率上報資料到物聯絡統伺服器。
  • 物聯絡統:包括裝置模型管理、裝置管理、專案管理、歷史訊息管理、規則引擎等功能,能接入任意物聯網型別裝置,可支援智慧校園其他專案快速接入需要。
  • 用電系統:實時監測、抄表系統、收費應用、能耗監測、安全管理、系統管理,所有宿舍可以按小時/天/月/季/年顆粒度查詢用電量,電錶電閘實時讀數和開關狀態查詢,告警查詢,宿管分權分域管理。
  • 收費系統:實現學校公寓宿舍管理,根據校園階梯計費的要求,實現學生階梯計費拆帳演算法,生成的帳單由校園宿舍管理人員確認後釋出到收費系統進行查詢並繳費,學生繳費後生成繳費歷史清單。
  • 大屏展示、Web 門戶:通過數字大屏、Web 門戶中的 Dashboard 面板,直觀形象的進行資料展示。

這一整套系統產生的資料量之龐大可見一斑,除了儲存外,各種查詢操作也十分考驗效能優劣,還需要能夠快速接入其他專案。經過對各種資料庫進行分析後,TDengine 這款時序資料庫產品浮現在我們眼前,它的很多特性非常符合我們整體架構的設計初衷,也能夠完美匹配系統的資料處理需求:

  • 多樣化的資料寫入支援。校園網複雜的系統環境和網路環境提高了資料寫入的多樣性要求,TDengine 支援多種介面寫入資料,包括 SQL、Prometheus、Telegraf、collectd、StatsD、EMQ MQTT Broker、HiveMQ Broker、CSV 檔案等,不僅幫助我們實現了工業終端層的資料寫入,而且部分其他系統的整合資料也得以用更低的成本進行了實施。
  • 較低的學習成本。我們的研發團隊是做智慧校園系統的,得益於 TDengine 運維方便、支援 SQL 等特性,整個團隊僅用很低的安裝、運維、使用方面的學習成本就完成了基於 TDengine 系統實施。
  • TDengine 在整個構架最核心的時序場景的資料讀寫和壓縮率方面,表現優異。智慧校園的工業物聯裝置的資料寫入量,不論在種類、資料點、併發數量方面都有極高的要求,而且在大量資料的情況下,寫入資料的壓縮率也非常影響儲存的成本。TDengine 滿足了 3 萬條/秒的寫入速度,並且壓縮率達到了驚人的 1/7 左右。
  • TDengine 毫秒級別的資料查詢、基於時間軸的滑動視窗聚合計算等特性,以及查詢結果與 Grafana、BI 外掛等快捷便利地整合,為最終的資料視覺化提供了很好的支援。
    以上幾點原因,讓我們堅定地選擇了 TDengine 作為智慧用電管控系統的資料庫產品,並開始實施搭建。

基於 TDengine 的建庫、建表思路

作為一個專門為物聯網結構化資料流設計的時序資料庫,TDengine 的建庫、建表思路與關係型資料庫完全不同,其遵循一個數據流隔離的原則。

物聯網裝置產生的資料是按照時間順序產生的資料流,在校園智慧用電管控系統系統,我們高頻收集宿舍用電資料,一是用來統計每小時宿舍用電情況,二是用來判斷宿舍大功率使用情況,及時發出大功率電器使用報警。

這種背景下,用諸如 SQL Server 的關係型資料庫來儲存時序資料時,做法通常是將所有同類裝置的資料都建到同一張表中,每條記錄會包含裝置 ID、資料採集(或入庫)時間戳、採集到的值,並按照時間範圍來分表提速。這種做法的弊端在於查詢麻煩且低效,從關係型資料庫中查詢某一個裝置的資料時,還需要通過裝置 ID 把其他裝置的資料從大表中過濾掉,且每查詢一個裝置,就要面臨過濾其他裝置資料的開銷。

與關係型資料庫不同,TDengine 的設計思路是一個數據源(裝置)一張表,每個資料來源按照時間順序產生的訊息流可以流入一個表中,不與其他資料流混合。表的主鍵是資料記錄採集或入庫的時間戳,其他欄位是採集的值。這樣在 TDengine 中查詢某個裝置的指定時間段資料時,查詢就簡化為找到該裝置的表並按照主鍵(時間戳)過濾搜尋資料記錄,效率大幅提升。

此外,在 TDengine 中,我們為了方便管理裝置,對不同裝置模型建立了不同的超級表,比如電錶模型是一個超級表,智慧保護開關是另一個超級表。

具體到我們的場景中,建庫、建表思路如下:

  • 超級表

超級表的結構非常簡單,採集欄位就是時間戳 ts 和採集值 val。但此處定義了兩個標籤,用於描述具體的點位靜態資訊。

  • 普通表

搭載 TDengine 的效果和優勢

上文中我們講解了資料庫選型思路和基於 TDengine 建庫、建表的思路,那具體 TDengine 的表現如何呢?下面為大家一一揭祕。

  • 高寫入速度

現在我們伺服器接入的裝置數是 4000 多個,包括 2000 多臺電錶和 2000 臺智慧保護開關,每臺電表以每分鐘頻率採集一次資料,包括電流、電壓、電能、有功功率、無功功率等 7 個測點,每臺保護開關同樣也以每分鐘頻率採集一次資料,包括智慧開關狀態、最近故障、最近故障值、當前故障狀態、當前電壓值、當前電流值、當前漏電電流值、過流次數、過壓次數、漏電次數等 10 個測點。

目前系統總共有 4000 多張裝置表,每張表每天新增 1440 條資料 13000 個測點,一天新增大約 500 多萬條資料 4000 萬個測點,由此可見 TDengine 的寫入效能之高。

此外,使用 TDengine 帶來的最大好處是不用再考慮 SQLServer 中的分庫分表操作,即使資料不斷寫入一年,查詢時延也不會增加。

  • 低記憶體、高壓縮比

在使用中,我們發現 TDengine 在處理 4000 多個裝置、百萬量級的資料量的寫入任務時,記憶體開銷只有 1.5GB,進行查詢時,記憶體增長也不會有明顯提升。在資料落盤後,我們查看了 var/lib/taos 下的資料檔案大小,原來 5GB 的原始資料,經 TDengine 壓縮後只有 80MB,壓縮比為 1.6%。

  • 雙機備份

TDengine 還採用叢集方案做了雙機備份,具體的方案是兩資料節點、兩資料副本的叢集方式。這一叢集方式,不僅在運維底層實現了資料的備份,伴隨著對 TDengine 功能的進一步深入使用,其去中心的多資料節點叢集開始作用,使得應用可以對所有節點進行寫入和讀取,從而得以有效利用服務端的資源,以資料層提供的高效讀寫速度有效提升整個系統的響應時間。

在剛開始使用 TDengine 時,其還沒有雙機熱備份,以叢集方式在兩臺主機上使用時出現了一些問題,在和濤思資料的小夥伴充分溝通後,我們通過“充分發揮底層資料庫的功能,再進一步優化平臺的系統架構”的方式成功解決了此問題。

之後在 TDengine 雙節點叢集方案出爐後,整個系統在很多方面都獲益匪淺:

  • 對於在校園網環境服務的整個構架中運作的應用來說,不停機的資料節點擴充套件保證了穩定的服務。
  • 實現了便利的服務能力擴容。服務能力從原來的一臺資料節點硬體資源支撐能力,線性增長為 2 臺節點的硬體資源支撐能力。
  • 穩定可靠的資料備份。資料節點自動對資料副本進行備份,不僅從運維角度上輕鬆實現了多節點資料備份的效果,而且並沒有對原有節點的執行效率有任何影響。
  • 兩節點去中心化叢集,提供了資料層兩節點寫入和讀取的支撐能力擴充套件。

值得一提的是,在 TDengine 這次單節點升級雙機熱備叢集的過程中,通過監控可以看到,對於資料節點增加、減少或者離線時的負載機制,TDengine 底層穩定地將計算負載均衡到兩個節點之上,這也為日後隨著接入點和應用的增多而繼續擴充 TDengine 節點提供了保障。

寫在最後

我們的系統在採用 TDengine 後不僅節省了其他方案搭建叢集的費用,而且在寫入速度和查詢效能方面完全滿足了業務的需求。作為一款為物聯網場景設計的時序資料庫,在多裝置、採集頻率高的業務形態下,TDengine 展現出了高效能、架構簡單的優勢,其超級表的設計也省去了很多聯表查詢邏輯,極大簡化了業務層的開發工作。


✨想了解更多TDengine的具體細節,歡迎大家在GitHub上檢視相關原始碼哦。✨