小T導(dǎo)讀:上海宇佑船舶科技有限公司是專注于船舶及海洋信息化一體解決方案的高科技公司。公司主要專注于智慧船舶以及船舶新材料相關(guān)產(chǎn)品的研發(fā)、設(shè)計(jì)、生產(chǎn)、銷售及國際貿(mào)易,為船舶行業(yè)提供新材料和智能化信息化解決方案。公司目前提供的產(chǎn)品和解決方案,將會(huì)填補(bǔ)船舶行業(yè)特別是郵輪游艇行業(yè)缺乏信息化和智能化解決方案和最新船舶新材料的空白。
在大數(shù)據(jù)時(shí)代背景下,船舶智能化已經(jīng)成為船舶制造與航運(yùn)領(lǐng)域發(fā)展的必然趨勢。同時(shí),智能船舶也是《中國制造 2025》中明確重點(diǎn)發(fā)展的領(lǐng)域,代表了船舶未來的方向,關(guān)乎航運(yùn)業(yè)的轉(zhuǎn)型升級(jí)。
2021 年 4 月初公司接到一個(gè)國家級(jí)船舶試驗(yàn)基地的智能化改造方案,在制定技術(shù)協(xié)議的過程中,業(yè)主指定要求數(shù)據(jù)采集使用 TDengine 時(shí)序數(shù)據(jù)庫(Time-Series Database)。選擇 TDengine 的核心原因如下:
- 國產(chǎn)化要求:國產(chǎn)開源,對于國家信息安全有保障,符合國家大趨勢發(fā)展。
- 物聯(lián)網(wǎng)場景:團(tuán)隊(duì)之前正好開發(fā)過一個(gè)小型的物聯(lián)網(wǎng)項(xiàng)目,當(dāng)時(shí)用的是 MySQL Database,針對數(shù)據(jù)窗口統(tǒng)計(jì)以及返回最新數(shù)據(jù)查詢紛繁復(fù)雜。在研究 TDengine 時(shí)發(fā)現(xiàn)這些問題都能夠被解決。
- 學(xué)習(xí)成本低:我們的技術(shù)團(tuán)隊(duì)對關(guān)系型數(shù)據(jù)庫(MySQL、Oracle)的 SQL 語法都比較熟悉,而 TDengine 采用的也是標(biāo)準(zhǔn) SQL 語句,團(tuán)隊(duì)成員上手都比較快。
值得一提的是,TDengine 學(xué)習(xí)成本低這一優(yōu)勢使得我們的團(tuán)隊(duì)成員,僅用了很短的時(shí)間就掌握了其使用技能,技術(shù)風(fēng)險(xiǎn)大大降低。也因此,我們沒有再進(jìn)行其他更多的技術(shù)選型對比,將 TDengine 作為我們的底層時(shí)序數(shù)據(jù)存儲(chǔ)引擎開始投入使用。
一、技術(shù)選型
我們對 TDengine 的選型依據(jù),不是憑借著測試數(shù)字的論證,而是業(yè)務(wù)實(shí)現(xiàn)的實(shí)踐檢驗(yàn)。
1. 與MySQL相比
團(tuán)隊(duì)之前正好開發(fā)過一個(gè)小型的物聯(lián)網(wǎng)項(xiàng)目,當(dāng)時(shí)用的是 MySQL Database,一些數(shù)據(jù)窗口的統(tǒng)計(jì)以及返回最新數(shù)據(jù)的查詢略顯復(fù)雜,但又沒有更好的解決方案,在研究 TDengine Database 時(shí)發(fā)現(xiàn)這些問題不攻自破??紤]到我們之后要啟動(dòng)的物聯(lián)網(wǎng)項(xiàng)目都比較大,上述這一問題存在共性,若是能夠利用 TDengine 簡化代碼邏輯甚至節(jié)省物理存儲(chǔ)空間,那公司和業(yè)主都將受益匪淺。
2. 通用大數(shù)據(jù)對比
這一點(diǎn)主要是查詢效率和開發(fā)成本的優(yōu)勢。事實(shí)上,在項(xiàng)目啟動(dòng)后,我們團(tuán)隊(duì)對 TDengine 的研究已經(jīng)比較深入了。后續(xù)公司的大項(xiàng)目都是船舶行業(yè)的物聯(lián)網(wǎng)項(xiàng)目,其中一個(gè)比較大型的項(xiàng)目的一期是由其他公司開發(fā)的,我們接手維護(hù)。項(xiàng)目接手初期,對于此項(xiàng)目中使用通用大數(shù)據(jù)方案實(shí)現(xiàn)數(shù)據(jù)采集可能會(huì)產(chǎn)生的效率問題,業(yè)主方表示很擔(dān)憂,希望我們可以早點(diǎn)優(yōu)化這一塊。于是團(tuán)隊(duì)開始著手研究 TDengine 數(shù)據(jù)庫在船舶行業(yè)的應(yīng)用,發(fā)現(xiàn) TDengine 的方案比通用大數(shù)據(jù)方案更適合這一場景。
二、數(shù)據(jù)模型
1. 建模方式分析
在我們項(xiàng)目中,是用的 TDengine 推薦的“一個(gè)設(shè)備一張表”的建模方法。這一建模方式的優(yōu)勢,除了 TDengine 官網(wǎng)介紹的通用性的內(nèi)容,還在我們項(xiàng)目中展現(xiàn)了如下幾個(gè)優(yōu)點(diǎn):
- TDengine 中超級(jí)表和子表的設(shè)計(jì)很好地解決了單個(gè)設(shè)備寫入的時(shí)間戳不會(huì)重復(fù)的問題
- 一個(gè)設(shè)備一張表解決了同一類設(shè)備聚合查詢的問題
- 標(biāo)簽的設(shè)計(jì)可以減少大量的數(shù)據(jù)冗余,由此節(jié)省了大量物理存儲(chǔ)空間
2. 數(shù)據(jù)類型分析
由于我們存儲(chǔ)的數(shù)據(jù)是來自船上 PLC 采集數(shù)據(jù),因此,我們首先需要論證的是 PLC 可能的數(shù)據(jù)類型在 TDengine 中能否實(shí)現(xiàn)很好的存儲(chǔ)。在我們對數(shù)據(jù)類型進(jìn)行匹配對比后,發(fā)現(xiàn) TDengine 沒有這類障礙。對比如下:

3. PLC 工控?cái)?shù)據(jù)分析
以我們業(yè)務(wù)中的船舶電站監(jiān)控 PLC 的 I/O 點(diǎn)為例,至少具備如下數(shù)據(jù)量:
- 86個(gè)數(shù)字量輸入
- 80個(gè)數(shù)字量輸出
- 13路模擬量輸入
- 10路模擬量輸出
這里我們定的策略是,按照工業(yè)自動(dòng)化控制的分類選擇不同的 TDengine 數(shù)據(jù)類型進(jìn)行存儲(chǔ):
- 數(shù)字量:TINYINT類型
- 開關(guān)量:INT或者FlOAT類型
- 模擬量和脈沖量:FLOAT類型
4. 業(yè)務(wù)數(shù)據(jù)分析
同時(shí),我們針對性地分析了能夠用于 TDengine 存儲(chǔ)的數(shù)據(jù),包括不限于如下內(nèi)容:
- 柴油機(jī)信號(hào):與柴油機(jī)相關(guān)的轉(zhuǎn)速、油溫、滑油相關(guān)的壓力、冷卻水相關(guān)的溫度、啟動(dòng)空氣壓力、排煙總管溫度等
- 發(fā)電機(jī)信號(hào):發(fā)電機(jī)的繞組溫度、發(fā)電電壓、電流、有功功率、電壓頻率、電壓與電網(wǎng)電壓的相位差
- 電網(wǎng)的信號(hào):電網(wǎng)相關(guān)電壓、電網(wǎng)功率、電路電流及電流頻率
三、特殊場景需求
1. 場景描述
船舶行業(yè)有一種特殊情況,即船舶在海上的時(shí)候很有可能沒有網(wǎng)絡(luò)信號(hào),而這個(gè)時(shí)間可能會(huì)持續(xù)一個(gè)月之久,也就是船舶上的數(shù)據(jù)庫最長有可能一個(gè)月內(nèi)無法與岸上的數(shù)據(jù)中心同步,這就要求船舶在靠港的時(shí)候能夠在短時(shí)間內(nèi)完成大量的數(shù)據(jù)同步工作。 我們應(yīng)用 TDengine 打造的技術(shù)解決方案如下所示:

2. 重點(diǎn)實(shí)現(xiàn)
- 船端實(shí)現(xiàn):在船端增加應(yīng)用程序,用于自動(dòng)連接 Kafka,并向 Kafka 寫入數(shù)據(jù)
- Kafka 實(shí)現(xiàn):直接將船端和服務(wù)端的傳輸?shù)膬?nèi)容,寫入同一個(gè) Topic
- 岸端實(shí)現(xiàn):對岸端服務(wù)端數(shù)據(jù)進(jìn)行寫入
3. 主要設(shè)計(jì)
- 技術(shù)復(fù)用設(shè)計(jì):考慮到宇佑船舶之前使用 Kafka 進(jìn)行同步,這個(gè)方案相對可以復(fù)用之前的技術(shù)經(jīng)驗(yàn)
- 數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì):在船端和集群端建庫時(shí),使用 DB +船 ID 的方式作為庫名,這樣一來,在船端和集群端數(shù)據(jù)結(jié)構(gòu)一致時(shí),兩側(cè)的查詢和高效寫入 SQL 都比較容易處理
- 自動(dòng)傳輸設(shè)計(jì):本方案使用船端程序完成自動(dòng)傳輸,使用 Kafka+TDengine 的更新機(jī)制保證數(shù)據(jù)斷點(diǎn)續(xù)傳(只要寫入 Kafka 數(shù)據(jù)就會(huì)寫入,而且重新寫入數(shù)據(jù)會(huì)覆蓋原有數(shù)據(jù))
- 開發(fā)工作量:藍(lán)色為需要開發(fā)的程序
四、落地效果
1. 寫入性能表現(xiàn)
關(guān)于寫入性能的確認(rèn),我們有個(gè)小的經(jīng)驗(yàn):在前期論證寫入速度時(shí),我們參考了 TDengine 官網(wǎng)的測試報(bào)告,并進(jìn)行了部分功能的復(fù)現(xiàn)確認(rèn)?;诖宋覀儓F(tuán)隊(duì)用較短的時(shí)間和較少的投入就對 TDengine 的性能有了大概的了解。
我們的 PLC 數(shù)據(jù)往 TDengine 中寫入的時(shí)間間隔最小到 100 ms/點(diǎn),寫入性能完全能夠勝任。
2. 查詢性能表現(xiàn)
因?yàn)槲覀兊闹腔鄞跋到y(tǒng)剛開始使用 TDengine,這方面的積累還比較少。除了官網(wǎng)介紹或者參考其他案例的一些比較普遍的查詢外,TDengine 毫秒級(jí)的時(shí)間窗口查詢也讓我們很驚喜,在數(shù)月的時(shí)間跨度上進(jìn)行時(shí)間窗口查詢也能在秒級(jí)完成。
我們原本計(jì)劃使用通用大數(shù)據(jù)解決方案來進(jìn)行此類查詢,現(xiàn)在依托 TDengine 時(shí)間窗口統(tǒng)計(jì)功能的高效性,開發(fā)人員就可以舍棄紛繁復(fù)雜的 SQL 語句,極大地縮減了項(xiàng)目周期。
五、經(jīng)驗(yàn)總結(jié)
我們團(tuán)隊(duì)在使用 TDengine 的落地過程中,覺得有三個(gè)經(jīng)驗(yàn)比較重要,在此進(jìn)行下分享:
- 官網(wǎng)學(xué)習(xí):我們從項(xiàng)目開始就仔細(xì)研究官網(wǎng)上的技術(shù)文檔,確實(shí)印證了那句話——學(xué)習(xí)新技術(shù)最省力的辦法就是看官網(wǎng)
- 技術(shù)提問:除了從官網(wǎng)獲取內(nèi)容,我們團(tuán)隊(duì)也長期混跡于 TDengine 的官方群,只要把技術(shù)細(xì)節(jié)和問題細(xì)節(jié)描述清晰,在群里提問都能快速得到解答
- 代碼示例:在項(xiàng)目支持過程中,TDengine 的支持人員建議我們參考 TDengine 在 GitHub 上的測試代碼,這部分代碼有大量的函數(shù)示例,更加方便進(jìn)行相關(guān)研究
在最近的溝通中,TDengine 技術(shù)人員向我們反饋 TDengine 后續(xù)版本會(huì)上線 TDLite 功能,這個(gè)功能能夠很好地解決我們系統(tǒng)里面[船舶離岸]這種業(yè)務(wù)場景的“端到端”數(shù)據(jù)同步問題。TDengine 技術(shù)人員對我們業(yè)務(wù)需求的關(guān)注和及時(shí)反饋?zhàn)屛覀円矊@個(gè)功能充滿了期待。
我們相信,憑借著 TDengine Database 在內(nèi)部已有項(xiàng)目的投產(chǎn),團(tuán)隊(duì)積累下寶貴的實(shí)踐經(jīng)驗(yàn),這對公司探索開發(fā)船舶行業(yè)物聯(lián)網(wǎng)產(chǎn)品會(huì)大有助益,未來也希望我們能夠和 TDengine 持續(xù)合作,形成直接面向客戶的智能船舶解決方案。



互聯(lián)網(wǎng).png)



-1.png)




.png)


證.png)


伙伴.png)
伙伴.png)
伙伴.png)



