
小 T 導讀:在(zai) TDengine 平穩(wen)運(yun)行(xing)的(de)(de)數周時間里,中天鋼鐵的(de)(de)新(xin)系統平均每(mei)周收(shou)錄 3000 多(duo)輛車輛表與 100 多(duo)條船只表,每(mei)張表中數據(ju)或多(duo)或少(shao),累計數量已達百(bai)萬(wan),業務(wu)的(de)(de)實際效果也達到了(le)預期(qi)。本文分享了(le)他(ta)們對于新(xin)項目的(de)(de)數據(ju)庫(ku)選型、應用的(de)(de)思(si)考,同時也進(jin)行(xing)了(le)業務(wu)效果分析。
為了滿足業務(wu)發展需(xu)求,我們需(xu)要新開(kai)發一套功能,對(dui)(dui)廠內每輛(liang)(liang)運(yun)(yun)輸車輛(liang)(liang)的(de)實時 GPS 位置進(jin)(jin)行追(zhui)蹤,通過大數(shu)據(ju)平(ping)臺(tai)對(dui)(dui) GPS 坐標進(jin)(jin)行處(chu)理、分(fen)(fen)(fen)析、可視化展示(shi)。同時也需(xu)要對(dui)(dui)公司貨運(yun)(yun)船只進(jin)(jin)行實時監控,運(yun)(yun)用 GPS 平(ping)臺(tai)的(de)分(fen)(fen)(fen)析處(chu)理能力對(dui)(dui)船只的(de)航運(yun)(yun)軌跡進(jin)(jin)行預判(pan),計算其是否(fou)偏離航線。這些 GPS 數(shu)據(ju)來自于(yu)中天(tian)云商 App,只要運(yun)(yun)輸車輛(liang)(liang)司機打開(kai)云商 App,系(xi)統(tong)每隔 10 秒會自動發送該車輛(liang)(liang) GPS 信號到大數(shu)據(ju)平(ping)臺(tai),再由大數(shu)據(ju)平(ping)臺(tai)分(fen)(fen)(fen)析處(chu)理。
數(shu)(shu)(shu)據處(chu)理(li)路徑主要為,大數(shu)(shu)(shu)據平(ping)(ping)臺(tai)(tai)將 ERP 中關聯過(guo)合同(tong)的(de)(de)(de) MMSI 信息同(tong)步(bu)到(dao)(dao) GPS 平(ping)(ping)臺(tai)(tai),由 GPS 平(ping)(ping)臺(tai)(tai)挑(tiao)選出(chu) 300 條(tiao)船(chuan)舶的(de)(de)(de) MMSI 同(tong)步(bu)至(zhi)船(chuan)達通(tong)平(ping)(ping)臺(tai)(tai),同(tong)時將接收數(shu)(shu)(shu)據接口地(di)址發送(song)到(dao)(dao)船(chuan)達通(tong)平(ping)(ping)臺(tai)(tai),船(chuan)達通(tong)平(ping)(ping)臺(tai)(tai)會根據 MMSI 編號以(yi)及推送(song)地(di)址,每隔 10 分鐘(zhong)將該船(chuan)只(zhi)的(de)(de)(de)最新位置以(yi)及動靜(jing)態信息推送(song)至(zhi) GPS 平(ping)(ping)臺(tai)(tai)。基(ji)于此,調研到(dao)(dao)一個(ge)合適的(de)(de)(de)數(shu)(shu)(shu)據庫,對于實現項目的(de)(de)(de)數(shu)(shu)(shu)據處(chu)理(li)需求(qiu)至(zhi)關重(zhong)要。
關于數據庫選型調研的思考
本質上來講,行車(che)(che)(che)記(ji)錄、行船記(ji)錄都是(shi)時(shi)(shi)序(xu)(xu)數(shu)(shu)據(ju)(ju),天然帶(dai)有時(shi)(shi)間戳,這些時(shi)(shi)序(xu)(xu)數(shu)(shu)據(ju)(ju)到(dao)達服務(wu)器時(shi)(shi)都是(shi)有序(xu)(xu)遞增的(de)(de),且時(shi)(shi)序(xu)(xu)數(shu)(shu)據(ju)(ju)的(de)(de)特點是(shi)流量平穩卻(que)非常巨大,這點和電商數(shu)(shu)據(ju)(ju)不太一(yi)(yi)樣(yang),比如雙十一(yi)(yi)時(shi)(shi)電商數(shu)(shu)據(ju)(ju)會出現(xian)(xian)陡增,平常卻(que)沒有那么(me)高流量。作為典型的(de)(de)時(shi)(shi)序(xu)(xu)數(shu)(shu)據(ju)(ju),車(che)(che)(che)聯網數(shu)(shu)據(ju)(ju)每隔(ge) 10 秒或 10 分鐘(zhong)發送一(yi)(yi)條,相(xiang)對固定,在調研時(shi)(shi)我們發現(xian)(xian),TDengine “一(yi)(yi)輛車(che)(che)(che)一(yi)(yi)張表”的(de)(de)模型很(hen)契合這一(yi)(yi)場景。
同時(shi),時(shi)序(xu)數(shu)據(ju)(ju)在查(cha)詢(xun)時(shi)要匹配特定的(de)(de)(de)時(shi)間(jian)(jian)線或數(shu)據(ju)(ju)標簽,且(qie)實時(shi)狀態(tai)查(cha)詢(xun)、數(shu)據(ju)(ju)降精度、整(zheng)體趨勢(shi)分析較(jiao)多(duo),普通數(shu)據(ju)(ju)庫無法提(ti)供這種函數(shu)。基于“一輛車一張表”這樣的(de)(de)(de)設(she)(she)計,TDengine 能(neng)夠實現任何一臺設(she)(she)備采集的(de)(de)(de)數(shu)據(ju)(ju),在存(cun)(cun)儲(chu)介質(zhi)里都是一塊一塊連續(xu)存(cun)(cun)放的(de)(de)(de),且(qie)按照(zhao)時(shi)間(jian)(jian)排序(xu),保(bao)證了在查(cha)詢(xun)單個設(she)(she)備一個時(shi)間(jian)(jian)段的(de)(de)(de)數(shu)據(ju)(ju)時(shi),查(cha)詢(xun)性能(neng)能(neng)夠有數(shu)量級的(de)(de)(de)提(ti)升。
另外一(yi)方面,雖(sui)然不同(tong)設(she)備(bei)由于網絡的(de)(de)原因,到達服務(wu)器(qi)的(de)(de)時間無法控(kong)制,是(shi)完全亂序(xu)的(de)(de),但(dan)對于同(tong)一(yi)個(ge)設(she)備(bei)而(er)言(yan),數(shu)(shu)據(ju)點的(de)(de)時序(xu)卻是(shi)可以保(bao)證(zheng)(zheng)的(de)(de)。“一(yi)個(ge)設(she)備(bei)一(yi)張表(biao)”就保(bao)證(zheng)(zheng)了一(yi)張表(biao)插入的(de)(de)數(shu)(shu)據(ju)是(shi)有(you)時序(xu)保(bao)證(zheng)(zheng)的(de)(de),這樣一(yi)來數(shu)(shu)據(ju)插入操作(zuo)就變成了一(yi)個(ge)簡單地(di)追加(jia)操作(zuo),插入性能也有(you)了大幅度提升。
在壓縮性能上,通過(guo)下表幾家(jia) Database 的(de)對(dui)比,也(ye)可看(kan)出 TDengine 的(de)優秀(xiu):

同時 TDengine 針(zhen)對同類型設(she)備(bei)(bei)間的聚(ju)合問(wen)題,創新(xin)性(xing)地提(ti)出超級表(biao)的概念,讓多設(she)備(bei)(bei)間的聚(ju)合變得靈活方(fang)便,也讓實時數據大屏顯示(shi)、監測設(she)備(bei)(bei)分(fen)類管理變得極其簡(jian)單(dan)。總(zong)結而言,TDengine 針(zhen)對時序數據的寫(xie)入、存儲、索引、查(cha)詢(xun)等方(fang)面(mian)都進行了特定的優化,從而實現了更優的數據加(jia)載(zai)、壓縮、查(cha)詢(xun)、寫(xie)入性(xing)能,非常(chang)匹配工業傳(chuan)感器數據的應用分(fen)析場景。
雖然接入(ru)設備繁多,但 TDengine 兼容性很強(qiang),寫入(ru)、讀取和(he)統計效率也大大高于其他同類型數據庫。對比 InfluxDB 來看,其測試數據顯示如下:

為了(le)評(ping)估(gu)不(bu)同長度的(de)時(shi)間(jian)(jian)(jian)窗口對查詢性(xing)能(neng)的(de)影響,我們選取(qu)了(le)第四個查詢場(chang)景,設(she)定并行執行的(de) work 數量 16, 時(shi)間(jian)(jian)(jian)區間(jian)(jian)(jian)是隨(sui)機選取(qu)的(de) 1h / 2h / 4h / 8h / 12h 等連續(xu)時(shi)間(jian)(jian)(jian)段,單(dan)個聚合時(shi)間(jian)(jian)(jian)窗口維持在(zai) 1min 不(bu)變。獲得的(de)查詢響應時(shi)間(jian)(jian)(jian)如下所示:

平臺架構的實現
下圖是我們的(de)數(shu)據(ju)處(chu)(chu)理路徑圖,數(shu)據(ju)通過(guo)中天云(yun)商、船達通平臺(tai)將數(shu)據(ju)抽到 GPS 平臺(tai),通過(guo) GPS 平臺(tai)分析處(chu)(chu)理后將數(shu)據(ju)存入(ru)數(shu)據(ju)倉庫(TDengine)。

基(ji)于 TDengine,GPS 平臺會(hui)對實時獲取的 GPS 數據以(yi)及(ji) AIS 數據進行分析處理(li)和存儲,再通過每輛(liang)車(che)、每條(tiao)船對應的表,實現(xian)車(che)輛(liang)船只軌跡可(ke)視化。
根據業務不(bu)同,我們創建(jian)(jian)了(le)兩(liang)張超級(ji)(ji)(ji)表(biao)(biao)(biao)(biao),分別為車超級(ji)(ji)(ji)表(biao)(biao)(biao)(biao)與船超級(ji)(ji)(ji)表(biao)(biao)(biao)(biao)。超級(ji)(ji)(ji)表(biao)(biao)(biao)(biao)是具有溝(gou)通的 Schema 共同元(yuan)數據表(biao)(biao)(biao)(biao)的集合,可以認為創建(jian)(jian)一個(ge)超級(ji)(ji)(ji)表(biao)(biao)(biao)(biao),它(ta)下面能夠再(zai)次創建(jian)(jian)很多子表(biao)(biao)(biao)(biao),對超級(ji)(ji)(ji)表(biao)(biao)(biao)(biao)的查詢相當(dang)于作(zuo)用(yong)到(dao)它(ta)下面所有的子表(biao)(biao)(biao)(biao)。
比如當你要(yao)查一(yi)個(ge)(ge)超級(ji)表(biao)的(de)平均(jun)值,假設它下面有(you) 100 萬張(zhang)表(biao),我就(jiu)相當于(yu)對這 100 萬張(zhang)表(biao)做了(le)(le)查詢,這樣用(yong)一(yi)個(ge)(ge)超級(ji)表(biao)就(jiu)解決了(le)(le)這個(ge)(ge)問題。每新(xin)增一(yi)條信(xin)息則依照(zhao)對應載具信(xin)息新(xin)建子表(biao)或者在已有(you)子表(biao)中插入最新(xin)數據。
測試與查詢
目前 TDengine 在我們的生產環境中運行平穩,通過對生產環境的機器進行檢測,CPU 使用率平常不到 1%,內存使用率穩定在 25%。下(xia)圖(tu)(tu)為(wei)集群中一臺機(ji)器的(de)監控圖(tu)(tu)表(biao):

在 TDengine 平穩運行的數(shu)周時間里,中天(tian)鋼鐵的新系統平均(jun)每周收錄 3000 多輛(liang)車輛(liang)表與 100 多條船只表,每張表中數(shu)據或(huo)多或(huo)少,累計(ji)數(shu)量已達(da)(da)百(bai)萬,業務的實際(ji)效(xiao)果也達(da)(da)到了預期。

現在(zai)可以根據(ju)車(che)(che)(che)(che)輛(liang)(liang)車(che)(che)(che)(che)牌號(hao)、需要查詢的時(shi)(shi)間(jian)區間(jian)來可視(shi)化車(che)(che)(che)(che)輛(liang)(liang)軌跡。在(zai)數(shu)據(ju)庫中(zhong)存(cun)儲上車(che)(che)(che)(che)輛(liang)(liang)信息(xi)時(shi)(shi)間(jian)、經緯(wei)度、車(che)(che)(che)(che)牌信息(xi),在(zai)展示(shi)頁面中(zhong)就會(hui)實(shi)時(shi)(shi)顯(xian)(xian)示(shi)當前廠(chang)內所有提貨車(che)(che)(che)(che)輛(liang)(liang)的最新(xin)位置(zhi)(前提是必須(xu)保持中(zhong)天(tian)云商處于(yu)打開狀(zhuang)態(tai)),當車(che)(che)(che)(che)輛(liang)(liang)提貨出廠(chang)后,則不(bu)再(zai)發送 GPS 信息(xi),系統會(hui)將該(gai)車(che)(che)(che)(che)輛(liang)(liang)判斷(duan)為離(li)線狀(zhuang)態(tai),不(bu)再(zai)顯(xian)(xian)示(shi)。或者(zhe)當司機異常關閉中(zhong)天(tian)云商超過(guo) 8 個小(xiao)時(shi)(shi),系統也將視(shi)該(gai)車(che)(che)(che)(che)輛(liang)(liang)為離(li)線,從屏幕顯(xian)(xian)示(shi)中(zhong)去除,直(zhi)到重新(xin)接(jie)收到 GPS 信號(hao)。


根據船舶名稱、需要查(cha)詢的時(shi)間區間,就可(ke)以查(cha)詢該艘船只的歷史 AIS 軌跡圖(tu),如果有(you)的船只中(zhong)(zhong)途異常關(guan)閉(bi) AIS 信息發送裝置,則系統無法接(jie)收到該船只的 AIS,展示(shi)的歷史軌跡中(zhong)(zhong)則會出現間斷。船只 AIS 信息永久保存在 TDengine 庫中(zhong)(zhong),在其中(zhong)(zhong)可(ke)以查(cha)詢任意(yi)時(shi)間段內的 AIS 軌跡。

未來規劃
本次在中(zhong)天鋼鐵 GPS 平臺車輛(liang)調度中(zhong)使用(yong)了(le) TDengine,我們發現它不僅性能高效,在設(she)計上也很(hen)人性化,其支持的 SQL 查詢語句,讓(rang)人無(wu)需學習(xi)就能立刻上手。再就是關于 TDengine 在監控領域的應用(yong),監控無(wu)非是做一(yi)個(ge)數(shu)據(ju)的存(cun)儲,數(shu)據(ju)庫的存(cun)儲性能相(xiang)當重要,TDengine 表現很(hen)突出(chu)。
總而言之,TDengine 的應用真(zhen)正讓車聯(lian)網(wang)、工(gong)業(ye)互聯(lian)網(wang)、運(yun)維監測大數據平臺的搭建變得簡單,不(bu)僅降低(di)硬件成(cheng)本、運(yun)維成(cheng)本,還能(neng)大幅(fu)降低(di)對研發和運(yun)維人員的需求。后續(xu)我們也會繼續(xu)分(fen)享 TDengine 的更多應用場景(jing)和實踐經驗等,給到大家參考。
當然,對(dui)于 TDengine 我們也有一些(xie)建(jian)議,希望它能夠發(fa)展地越來越好(hao):
- 支持更加豐富的 SQL 語句:能夠針對特有的場景,提供更加靈活的 SQL 語句,便于做更加復雜的計算分析,這也是 AIOps 的進階部分。
- 子表自動清理功能:由于域名會存在下線問題,目前的 TTL 策略只是針對數據而不是 Table 本身,淘汰子表還需要人工運維介入。
- 現在 TDengine 對于數據的更新只有相同時間戳覆蓋這種辦法,希望能提供數據刪除功能(小T提示:TDengine 2.6 企業版已經提供刪除功能 ??點擊鏈接文章看詳情)。
- 提供簡潔易操作的可視化界面,如 Navicat 之于 MySQL。


























