小 T 導讀:水環境綜合治理運維系統中需要對截流井設備中的液位、電流、硫化氫等進行監測,并通過PLC程序進行自動化管理設備的啟停與報警短信推送。傳感器采集的信息通過MQTT協議傳到網關,網關收集到信息后會定時推送到業務后臺服務,由服務層來做數據存儲和實時分析。設備運行業務數據放在MySQL里面,液位、電流頻率、硫化氫、雨量物聯網數據放在TDengine Database中。
TDengine應用場景
1. 時序數據類型及規模
在水環境綜合治理運維系統中,使用TDengine Database的數據存儲各類終端設備的采集數據,比如硫化氫、電壓、電流、雨量、溫度、液位、閘門、風機、排風扇、溶解氧等信息。
目前系統上存在20個點每個點有80+個監測數據上傳,每日新增的監測數據量約為100MB。如果按照此類設備的增量,后面會達到2000個點每天將近10G的數據量。
現場設備監測數據圖例:

時序數據庫部分存儲量圖例:

水環境綜合治理運維系統圖例:

2. 數據模型的設計
目前已每個監測點的id作為TAGS創建了超級表STable。
首先創建超級表:
CREATE TABLE DevTagValue (createTime timestamp,sampleTime timestamp,tagName binary(100),updateTime binary(50),tagValue binary(50),devID binary(50),Id binary(50))
TAGS (location binary(100))
創建子表:
CREATE TABLE devtagvalue_300219010764 USING DevTagValue TAGS ('300219010764');
CREATE TABLE devtagvalue_300219030026 USING DevTagValue TAGS ('300219030026');
一個點一張表,這樣做的優勢是非常明顯,監測點的數據根據id插入到對應子表中,其中子表是根據業務動態創建的。對其作指定時間范圍的查詢,不用考慮子表的數據,直接從時間戳索引得到想要時間范圍的數據,效率很高。

選擇TDengine的理由
在系統前期的版本中,我們使用了MySQL數據庫來存儲設備上報數據。但接入系統的設備量日益增長、用戶對數據實時性反饋的要求也越來越高,MySQL已經無法滿足業務需求。我們發現將設備數據轉移到時序數據庫TDengine中存儲是個更好的解決方案。
剛開始MySQL中存儲了一個點上報的所有數據頻率普遍在秒級,對一個表的插入與查詢的壓力過大,然后以站點進行了分表操作。效果好了點,由于數據量太大查詢效率極低。總結規律后根據監測數據的類型進行分表操作,這樣對于一個點效果明顯提升,但是業務在不斷擴張,站點在不斷增加的情況下頻繁的跨表操作MySQL查詢出現了延時甚至超時死鎖的情況。
時序庫的選型
OpenTSDB + HBase
這個方案目前使用的人比較多,但有寫缺陷。
1. HBase集群配置要求高,需要很好的調優,需要專門精通人員去維護增加了不少人員成本。
2. OpenTSDB默認的compaction策略每到整點都會對上一小時的數據查詢出來compact成一行,寫入到HBase,刪除原始數據,這個相當耗費cpu。即使關閉compaction,修改tsd.storage.enable_appends = true 啟用append的方式低配機器 cpu也是相當高。綜合考慮人員及服務器等成本還是放棄了。
TDengine
TDengine是一個簡單快捷高性能的時序數據庫(Time-Series Database),提供高性能的同時大大降低了安裝、部署、維護的成本,是當前水環境綜合運維系統底層采用的變量數據存儲引擎。TDengine解決了我們幾個之前較為頭疼的問題。
1. 安裝簡單
下載rpm包,一個命令安裝完畢即可運行。
2. 性能強勁
測試場景:
十萬張點表,每個點表1s需要存儲1條記錄。在實際測試過程中,使用http接口,采用單機4C16G的配置,8線程每次寫500條記錄,10萬條記錄寫入只需要300ms(如果使用java客戶端更快);單變量采樣查詢基本在2ms內完成。整個測試持續了48小時,測試期間cpu在20%-30%之間,內存維持在6G左右,寫入相當穩定,沒有出現超時。
綜合考慮,使用TDengine硬件成本和開發維護成本大大降低,寫入和查詢速度還比OpenTSDB等高一個級別。使用MySQL查詢3個點一年的數據直接請求超時,使用TDengine基本就2s左右就能返回給頁面進行渲染。

總結
萬朗智水采用TDengine后節省了其他方案搭建集群的費用,并且在寫入速度和查詢性能方面完全滿足了業務的需求,作為一款為物聯網場景設計的時序數據庫,TDengine確實展現了在設備多、采集頻率高的情形下顯示出其性能高、架構簡答的優勢。相同的設備實時數據查詢場景。其超級表的設計省去了不少聯表查詢邏輯,大大簡化了業務層的開發工作。我們當前的系統已經發揮出其數據緩存和時序索引的能力,會在后面繼續探索使用下TDengine的流式計算和訂閱的功能,充分發揮底層數據庫的功能,再進一步優化平臺的系統架構。
作者介紹:
武擇豐,上海萬朗智水科技有限公司研發部研發工程師,開源社區愛好者,目前負責智水公司所有項目后臺框架搭建,業務研發等工作。
原發首發于:



























