小 T 導讀:在地災專業監測物聯網平臺項目中,由于原本(ben)的(de)關系型(xing)數據(ju)庫 Oracle 已經無法滿足實時(shi)寫入(ru)與(yu)高性能查詢要求,蒼穹數碼選擇接入(ru) TDengine Database 以(yi)解(jie)(jie)決海量時(shi)序數據(ju)的(de)存儲(chu)和計算問題。本(ben)文詳細闡述了他們的(de)業務(wu)痛(tong)點、解(jie)(jie)決思路以(yi)及具體效果,以(yi)供參考。
公司簡介
蒼穹數碼技術(shu)股(gu)份有限公司(si) 2001 年(nian)創建于北京,是(shi)一(yi)家專業(ye)(ye)從(cong)事 3S 技術(shu)研究、開發與(yu)應用服務,致力于政(zheng)府、國(guo)防和企業(ye)(ye)信(xin)息化建設的高新技術(shu)企業(ye)(ye),也是(shi)業(ye)(ye)內(nei)率先(xian)打通地理信(xin)息全產業(ye)(ye)鏈的平臺級產品、技術(shu)與(yu)服務提供商,在信(xin)息化相關(guan)技術(shu)領域具有核心(xin)競爭優(you)勢。

我國(guo)常見的地(di)(di)質(zhi)災(zai)害(hai)共有(you)(you) 12 類(lei)、48 種。在所有(you)(you)的地(di)(di)質(zhi)災(zai)害(hai)中,崩塌、滑坡(po)、泥(ni)石流是最為嚴(yan)重的,其具有(you)(you)分布(bu)廣、災(zai)發性(xing)(xing)、破(po)壞性(xing)(xing)強,具有(you)(you)隱蔽性(xing)(xing)及容易(yi)鏈(lian)狀成災(zai)等特點,不僅會對(dui)工程建筑、交通運(yun)輸、居民生命財產等造成直接(jie)危害(hai),也會間接(jie)影響社會安定、引發生態環(huan)境惡化、加劇各種自然災(zai)害(hai)等。

在國(guo)家(jia)突發事件(jian)應(ying)急體系建(jian)(jian)設(she)“十三(san)五”規劃中(zhong)早有(you)強(qiang)調,預防(fang)與準備是應(ying)對地質災(zai)害的有(you)效手(shou)段,只有(you)提(ti)高(gao)綜合風險(xian)研判能(neng)力(li)、災(zai)害監測(ce)和預警(jing)預報能(neng)力(li),才能(neng)真正體現風險(xian)防(fang)范的效益。基于此,建(jian)(jian)設(she)地災(zai)專業監測(ce)物聯網平(ping)臺勢在必行。
一、分析場景與痛點,進行數據庫選型調研
該物聯網(wang)監測平臺主要包含以下 5 個方面的(de)功能:
- 數據采集:不同時期不同采集頻率,自動提高采集頻率,同時支持設備自適應、設備反控及異常數據監測
- 數據傳輸:考慮斷網、斷電情況(由于天氣原因,丘陵地區時常陰雨綿綿,監測對設備穩定性特殊性要求較高)
- 數據存儲(強依賴入庫性能):考慮后期設備增多,數據存儲問題 、高頻采集數據入庫效率問題都要考慮在內
- 數據分析(強依賴查詢性能):一點一策,一設備一策。基于人工智能模型,充分考慮災害發育特征,基于主要誘因設置閾值模型(單因子、多因子模型設置)
- 預警預報:虛報不漏報,寧愿聽罵聲也不聽哭聲
要(yao)實現(xian)以上功能,首先需(xu)要(yao)解決(jue)的就是(shi)海量時(shi)序數據(ju)的存儲和計算(suan)問題,其有(you)著體(ti)量大(da)、時(shi)間(jian)長,寫入、查(cha)詢(xun)要(yao)求(qiu)高等特點,傳(chuan)統關(guan)系型數據(ju)庫已(yi)經無法滿足實時(shi)寫入與(yu)高性能查(cha)詢(xun)要(yao)求(qiu)。
我們的地災(zai)物(wu)聯網(wang)專業監測平臺研發于(yu) 2018 年,當時選用的大(da)型企業級(ji)數(shu)(shu)(shu)據(ju)庫 Oracle,隨著接入的設(she)備(bei)傳感器(qi)越(yue)來(lai)(lai)越(yue)多、數(shu)(shu)(shu)據(ju)量(liang)越(yue)來(lai)(lai)越(yue)大(da),數(shu)(shu)(shu)據(ju)入庫與(yu)數(shu)(shu)(shu)據(ju)查詢也變得越(yue)來(lai)(lai)越(yue)慢。特別是當雨季(ji)來(lai)(lai)臨(lin),傳感器(qi)數(shu)(shu)(shu)據(ju)采集(ji)頻率提高到秒(miao)級(ji)、毫秒(miao)級(ji)別,數(shu)(shu)(shu)據(ju)入庫就會阻塞,效率非常低(di)下。
因此從 2019 年我們便開始關注一些國內外的時序數據庫(Time-Series Database),通過調研發現 TimescaleDB、 TDengine 兩款比較合適,接下來(lai)主(zhu)要從數據寫入、查詢、團隊上手難度等指標項(xiang)考察了(le)這兩款時序數據庫。
下面以近(jin) 10 年全省的雨量站小時雨量數據為測試數據,從常(chang)用的應用場景對兩個數據庫進行對比分析。
- 測試機器配置信息如下:

- 歷史數據批量入庫場景對比結果:

- 入庫后數據文件大小對比結果:

- 常見查詢場景比對:
- 查詢全省全部站點累計降雨(10-30 天),按站點分組,匯總累計降雨
- 查詢單一站點、區縣所有站點年數據,按照年、月、日、小時統計匯總 (全省 2138 個雨量站點,單位 S)

結論:從入庫、壓縮比及查詢 3 個維度來看,TDengine 都是完勝。基于以上信息綜合比對如下:

二、數據庫設計與應用
TDengine 在(zai)物聯網監測平臺中的數據采集側架構圖(tu)如下(xia)所示:

TDengine 的(de)存儲是從空(kong)間(jian)與時間(jian)兩個(ge)維(wei)度進(jin)行分層分級(ji)存儲,具體實現路徑如下(xia):

- 建庫建表:
- 創建數據庫
地災專(zhuan)業監測數據庫(ku)設置保存 20 年,分片參(can)數 90 天,每個(ge) Vnode 30 個(ge)內(nei)存塊(根據機(ji)器內(nei)存調大),允許(xu)編輯(ji),建庫(ku)語句如下:
CREATE DATABASE IF NOT EXISTS geohazard_monitor KEEP 7300 DAYS 90 BLOCKS 30 UPDATE 1 ;
2. 創建超級表
根據傳(chuan)感器(qi)(qi)類(lei)型 創(chuang)建超(chao)級(ji)(ji)表(biao)(biao),以水壓(ya)力(li)計含水率為例 ,假設傳(chuan)感器(qi)(qi)類(lei)型編(bian)碼(ma)為 201,則超(chao)級(ji)(ji)表(biao)(biao)命(ming)名 m_201 ,按照統(tong)一命(ming)名規則,其他傳(chuan)感器(qi)(qi)超(chao)級(ji)(ji)表(biao)(biao)命(ming)名為 m_xxx(傳(chuan)感器(qi)(qi)類(lei)型編(bian)碼(ma))。統(tong)一約(yue)定 t20 為采(cai)集(ji)時間, t30 為同步入(ru)庫時間 ,超(chao)級(ji)(ji)表(biao)(biao)包(bao)含 2 個 tag ,對(dui)傳(chuan)感器(qi)(qi)進行編(bian)碼(ma)編(bian)號(注意(yi)每個子表(biao)(biao) tag值(zhi)一樣)。建超(chao)級(ji)(ji)表(biao)(biao)語句如下:
CREATE STABLE IF NOT EXISTS m_201 (t20 TIMESTAMP, t30 TIMESTAMP ,v_water FLOAT) TAGS (sensor_code BINARY(20), sensor_id INT);
3. 數據入庫
使(shi)用超級表模(mo)板操(cao)作數據入(ru)庫 ,子表命名規(gui)則為 m_XXX( 傳感器(qi)編碼)。入(ru)庫語句(ju)如下:
INSERT INTO m_05162300008 USING m_201 TAGS ('05162300008', 2) VALUES ('2021-01-01 00:00:00.000','2021-01-01 00:00:00.001', 0.02);
4. 查詢
進行時(shi)(shi)間窗口(interval)avg聚(ju)合滾動查(cha)詢(xun)時(shi)(shi),時(shi)(shi)間窗口單(dan)位可以是 b(納秒)、u(微(wei)秒)、a(毫(hao)秒)、s(秒)、m(分)、h(小時(shi)(shi))、d(天(tian))、w(周)、 n(自然月) 和 y(自然年) 。查(cha)詢(xun)每天(tian)含水率平均值語句如下:
SELECT AVG(v_water) FROM m_05162300008 WHERE t20 >= '2020-01-01 00:00:00.000' AND t20<'2020-01-03 00:00:00.000' interval(1d) ;
- 開發經驗
在 Java 應(ying)用程序(xu)數據(ju)庫(ku)連接(jie)上,我(wo)們的開發環境選擇了(le) JDBC-RESTful 方式,生產環境選擇了(le)安裝客戶(hu)端的 JDBC-JNI 方式,相比 JDBC-RESTful 有(you)一(yi)定的性能優(you)(you)勢,最(zui)大(da)化發揮 TDengine 的性能。但是 JDBC-RESTful 具(ju)有(you)輕便、問題易定位等優(you)(you)勢,所以大(da)家(jia)可以酌情選擇。JDBC-RESTful 到(dao) JDBC-JNI 的切換(huan)十分簡單,一(yi)般只需(xu)要修改(gai)配置文件即可。如下圖(tu)所示:

- 典型應用
某個滑(hua)坡監測(ce)項目(mu)——

某含(han)水(shui)率傳感器監測曲線——

某省累計降雨等值(zhi)線——

對于本項目(mu)來說,TDengine 主要發揮了(le)如(ru)下特色功能:
- 使用超級表模板,數據快速入庫,自動創建子表
- 滑動窗口統計功能
- 速度足夠快,資源占用足夠少,屬于節能減排綠色產品
- 開發、部署非常方便
- 支持國產芯片與國產操作系統,屬于信創名錄產品,應用于保密項目沒有后顧之憂
三、寫在最后
在本(ben)項目中,TDengine Database 展現出了強大(da)的讀寫(xie)性能和數(shu)據(ju)壓縮能力(li),聚(ju)合類查詢(xun)速度非常快,也幫助我們有效降低了機器使用(yong)成本(ben)。超級表、子表、標簽、時(shi)間窗口(kou)、狀態(tai)窗口(kou)等概念非常適配物(wu)聯網大(da)數(shu)據(ju)應(ying)用(yong)場(chang)景,相信隨(sui)著產品功能的越(yue)加完(wan)善,TDengine 未來潛力(li)無限。百(bai)舸爭(zheng)流,奮楫(ji)者先;千帆竟發,勇進者勝。祝愿濤(tao)思數(shu)據(ju)越(yue)來越(yue)好,爭(zheng)做(zuo)物(wu)聯網大(da)數(shu)據(ju)的 Oracle。


























