国产精品免费在线资源,九九热666 http://www.fjzmyy.cn TDengine | 高性能、分布式、支持SQL的時(shí)序數(shù)據(jù)庫(kù) | 濤思數(shù)據(jù) Tue, 21 Apr 2026 07:29:43 +0000 zh-Hans hourly 1 https://wordpress.org/?v=7.0 http://www.fjzmyy.cn/wp-content/uploads/2025/07/favicon.ico 車(chē)聯(lián)網(wǎng) – TDengine | 濤思數(shù)據(jù) http://www.fjzmyy.cn 32 32 海康智聯(lián)車(chē)聯(lián)網(wǎng)平臺(tái)如何基于 TDengine TSDB 構(gòu)建數(shù)據(jù)底座 http://www.fjzmyy.cn/tdengine-user-cases/36587.html Tue, 21 Apr 2026 07:26:32 +0000 http://www.fjzmyy.cn/?p=36587 小T導(dǎo)讀:??抵锹?lián)以物聯(lián)網(wǎng)、大數(shù)據(jù)與人工智能技術(shù)為核心,構(gòu)建了以“邊緣計(jì)算 + 云邊融合”為基礎(chǔ)的整體技術(shù)架構(gòu),形成覆蓋智能網(wǎng)聯(lián)與車(chē)路協(xié)同的一體化產(chǎn)品體系。作為國(guó)家級(jí)高新技術(shù)企業(yè),海康智聯(lián)參與了多項(xiàng)行業(yè)標(biāo)準(zhǔn)制定,業(yè)務(wù)已覆蓋全國(guó) 20 余個(gè)省份,為客戶提供智能網(wǎng)聯(lián)測(cè)試示范、車(chē)路協(xié)同、自動(dòng)駕駛、I2V 運(yùn)營(yíng)、交通治理、數(shù)字公路及智慧高速等解決方案。在這一體系中,海量設(shè)備持續(xù)產(chǎn)生的時(shí)序數(shù)據(jù)成為平臺(tái)運(yùn)行的關(guān)鍵基礎(chǔ)。本文將結(jié)合多個(gè)實(shí)際場(chǎng)景,分析 TDengine TSDB 在海康智聯(lián)產(chǎn)品體系中的落地實(shí)踐及應(yīng)用效果。

車(chē)聯(lián)網(wǎng)之困

作為智慧交通領(lǐng)域的領(lǐng)先企業(yè),我們?cè)谕七M(jìn)新一代車(chē)聯(lián)網(wǎng)云控平臺(tái)的建設(shè)初期,主要面臨以下三大核心痛點(diǎn):

  • 其一,車(chē)端數(shù)據(jù)接入壓力巨大:全市 10 萬(wàn)+ 運(yùn)營(yíng)車(chē)輛需實(shí)時(shí)上報(bào)車(chē)速、電機(jī)轉(zhuǎn)速、電池包 SOC、GPS 軌跡等時(shí)序數(shù)據(jù),傳統(tǒng)數(shù)據(jù)庫(kù)難以支撐高頻次、高并發(fā)的數(shù)據(jù)寫(xiě)入,時(shí)常出現(xiàn)數(shù)據(jù)擁堵或丟失;
  • 其二,路側(cè)感知數(shù)據(jù)處理滯后:路側(cè) RSU、攝像頭、雷達(dá)產(chǎn)生的目標(biāo)級(jí)結(jié)構(gòu)化數(shù)據(jù)(含目標(biāo) ID、坐標(biāo)、速度、類(lèi)型)需用于實(shí)時(shí)碰撞風(fēng)險(xiǎn)計(jì)算與信號(hào)燈協(xié)同,但傳統(tǒng)存儲(chǔ)方案寫(xiě)入延遲超過(guò)秒級(jí),無(wú)法滿足毫秒級(jí)決策需求;
  • 其三,數(shù)據(jù)價(jià)值挖掘低效:車(chē)路協(xié)同產(chǎn)生的 PB 級(jí)歷史數(shù)據(jù)分散存儲(chǔ),缺乏統(tǒng)一的時(shí)序數(shù)據(jù)管理工具,想要聚合特定時(shí)段、路段的流量、平均速度等關(guān)鍵指標(biāo),需耗費(fèi)數(shù)小時(shí)甚至數(shù)天,嚴(yán)重影響交通宏觀決策效率。

TDengine TSDB:開(kāi)啟變革

為破解上述難題,我們引入專為時(shí)序數(shù)據(jù)設(shè)計(jì)的 TDengine TSDB。 憑借“超級(jí)表 + 子表”的獨(dú)特?cái)?shù)據(jù)建模方式,TDengine TSDB 能夠很好地適配車(chē)聯(lián)網(wǎng)場(chǎng)景中“設(shè)備數(shù)量多、數(shù)據(jù)并發(fā)高、采集頻率高”的數(shù)據(jù)特征。同時(shí),TDengine TSDB 原生支持 MQTT、Kafka 等物聯(lián)網(wǎng)數(shù)據(jù)接入方式,可實(shí)現(xiàn)設(shè)備數(shù)據(jù)的直連寫(xiě)入,大幅降低系統(tǒng)接入復(fù)雜度。此外,其內(nèi)置豐富的時(shí)序數(shù)據(jù)聚合函數(shù),可將歷史數(shù)據(jù)查詢時(shí)間從小時(shí)級(jí)縮短至秒級(jí),為車(chē)聯(lián)網(wǎng)系統(tǒng)的實(shí)時(shí)管控與歷史分析提供了堅(jiān)實(shí)的技術(shù)支撐。

亮點(diǎn)一:車(chē)端實(shí)時(shí)數(shù)據(jù)接入飛躍,10 萬(wàn)+ 車(chē)輛毫秒級(jí)在線管控

我們基于 TDengine TSDB 設(shè)計(jì)了 “一車(chē)一子表” 的數(shù)據(jù)模型:以 “車(chē)輛信息超級(jí)表(vehicle_info_st)” 統(tǒng)一定義車(chē)速(speed)、電機(jī)轉(zhuǎn)速(motor_speed)、電池包 SOC(battery_soc)、GPS 經(jīng)度(gps_lng)、GPS 緯度(gps_lat)等字段,每輛車(chē)對(duì)應(yīng)一張獨(dú)立子表(子表名以車(chē)輛 VIN 碼命名,如 vin_123456789)。車(chē)輛通過(guò) T-Box 以 MQTT 協(xié)議實(shí)時(shí)上報(bào)數(shù)據(jù), TDengine TSDB 實(shí)現(xiàn)毫秒級(jí)入庫(kù),穩(wěn)定支撐 10 萬(wàn)+ 車(chē)輛同時(shí)在線,確保每輛車(chē)的動(dòng)態(tài)數(shù)據(jù)無(wú)延遲、無(wú)丟失。

??抵锹?lián)車(chē)聯(lián)網(wǎng)平臺(tái)如何基于 TDengine TSDB 構(gòu)建數(shù)據(jù)底座 - TDengine Database 時(shí)序數(shù)據(jù)庫(kù)

TDengine TSDB SQL 語(yǔ)句(車(chē)輛實(shí)時(shí)數(shù)據(jù)查詢與監(jiān)控):

 --   1. 創(chuàng)建車(chē)輛信息超級(jí)表(定義時(shí)序數(shù)據(jù)結(jié)構(gòu))
CREATE   STABLE vehicle_info_st (
    ts TIMESTAMP,  -- 數(shù)據(jù)采集時(shí)間戳
    speed FLOAT,   -- 車(chē)速(單位:km/h)
    motor_speed INT,  -- 電機(jī)轉(zhuǎn)速(單位:rpm)
    battery_soc INT,  -- 電池包SOC(單位:%)
    gps_lng DOUBLE,   -- GPS經(jīng)度
    gps_lat DOUBLE    -- GPS緯度
)   TAGS (
    vin STRING,    -- 車(chē)輛唯一標(biāo)識(shí)(子表標(biāo)簽)
    vehicle_type STRING  -- 車(chē)輛類(lèi)型(如公交車(chē)、出租車(chē)、私家車(chē))
);
--   2. 查詢某輛車(chē)(VIN:vin_123456789)最近10分鐘的實(shí)時(shí)數(shù)據(jù)(用于大屏實(shí)時(shí)監(jiān)控)
SELECT   ts, speed, battery_soc, gps_lng, gps_lat 
FROM   vin_123456789 
WHERE   ts >= NOW() - 10m 
ORDER   BY ts DESC;
--   3. 統(tǒng)計(jì)全市各類(lèi)型車(chē)輛的平均車(chē)速(用于交通狀態(tài)分析)
SELECT   vehicle_type, AVG(speed) AS avg_speed 
FROM   vehicle_info_st 
WHERE   ts >= NOW() - 5m 
GROUP   BY vehicle_type;

亮點(diǎn)二:路側(cè)感知數(shù)據(jù)接入升級(jí),毫秒級(jí)支撐碰撞風(fēng)險(xiǎn)與信號(hào)燈協(xié)同

針對(duì)路側(cè)感知數(shù)據(jù),我們采用 TDengine TSDB的“一路口一張子表” 建模方案:創(chuàng)建 “路側(cè)目標(biāo)信息超級(jí)表(road_side_target_st)”,定義目標(biāo) ID(target_id)、目標(biāo)坐標(biāo)(target_x/target_y)、目標(biāo)速度(target_speed)、目標(biāo)類(lèi)型(target_type,如機(jī)動(dòng)車(chē)、非機(jī)動(dòng)車(chē)、行人)等字段,每個(gè)路口的路側(cè)設(shè)備(RSU + 攝像頭 + 雷達(dá))對(duì)應(yīng)一張子表(子表名以路口編號(hào)命名,如 crossing_001)。

路側(cè)設(shè)備通過(guò) MQTT、Kafka 協(xié)議將結(jié)構(gòu)化數(shù)據(jù)實(shí)時(shí)推送至區(qū)域云,由 TDengine TSDB 進(jìn)行毫秒級(jí)寫(xiě)入與統(tǒng)一存儲(chǔ)。數(shù)據(jù)隨后實(shí)時(shí)同步至碰撞風(fēng)險(xiǎn)計(jì)算模塊和信號(hào)燈控制系統(tǒng)。當(dāng)系統(tǒng)檢測(cè)到車(chē)輛與行人距離小于安全閾值時(shí),可在 500 毫秒內(nèi)觸發(fā)預(yù)警,并動(dòng)態(tài)調(diào)整信號(hào)燈配時(shí),從而提升路口通行安全。

海康智聯(lián)車(chē)聯(lián)網(wǎng)平臺(tái)如何基于 TDengine TSDB 構(gòu)建數(shù)據(jù)底座 - TDengine Database 時(shí)序數(shù)據(jù)庫(kù)

TDengine TSDB SQL 語(yǔ)句(路側(cè)目標(biāo)數(shù)據(jù)查詢與風(fēng)險(xiǎn)預(yù)警) :

--   1. 創(chuàng)建路側(cè)目標(biāo)信息超級(jí)表
CREATE   STABLE road_side_target_st (
    ts TIMESTAMP,  -- 數(shù)據(jù)采集時(shí)間戳
    target_id INT,  -- 目標(biāo)唯一標(biāo)識(shí)
    target_x DOUBLE,  -- 目標(biāo)x坐標(biāo)(單位:m,基于路口坐標(biāo)系)
    target_y DOUBLE,  -- 目標(biāo)y坐標(biāo)(單位:m,基于路口坐標(biāo)系)
    target_speed FLOAT,  -- 目標(biāo)速度(單位:m/s)
    target_type STRING  -- 目標(biāo)類(lèi)型(motor_vehicle/non_motor_vehicle/pedestrian)
)   TAGS (
    crossing_id STRING,  -- 路口編號(hào)(子表標(biāo)簽)
    device_id STRING     -- 路側(cè)設(shè)備ID
);
--   2. 查詢某路口(crossing_001)最近30秒內(nèi)的所有目標(biāo)數(shù)據(jù)(用于碰撞風(fēng)險(xiǎn)計(jì)算)
SELECT   ts, target_id, target_x, target_y, target_speed, target_type 
FROM   crossing_001 
WHERE   ts >= NOW() - 30s 
ORDER   BY ts DESC;
--   3. 統(tǒng)計(jì)某路口早晚高峰(7:00-9:00、17:00-19:00)的各類(lèi)目標(biāo)流量(用于信號(hào)燈配時(shí)優(yōu)化)
SELECT   target_type, COUNT(DISTINCT target_id) AS target_count 
FROM   road_side_target_st 
WHERE   crossing_id = 'crossing_001' 
  AND (ts BETWEEN '2024-01-01 07:00:00' AND   '2024-01-01 09:00:00' 
       OR ts BETWEEN '2024-01-01 17:00:00'   AND '2024-01-01 19:00:00') 
GROUP   BY target_type;

亮點(diǎn)三:云控平臺(tái)與歷史分析革新,PB 級(jí)數(shù)據(jù)支撐宏觀決策

在 “邊緣云→區(qū)域云→中心云” 三級(jí)云控架構(gòu)中,TDengine TSDB 承擔(dān) “實(shí)時(shí)數(shù)據(jù)湖 + 歷史倉(cāng)庫(kù)” 雙重角色:邊緣云實(shí)時(shí)采集車(chē)端、路側(cè)數(shù)據(jù)并寫(xiě)入 TDengine TSDB,區(qū)域云基于 TDengine TSDB 進(jìn)行實(shí)時(shí)計(jì)算(如路段流量統(tǒng)計(jì)),中心云則存儲(chǔ)全量 PB 級(jí)歷史數(shù)據(jù)。

借助 TDengine TSDB 超級(jí)表的高效聚合能力,系統(tǒng)能夠快速查詢?nèi)我鈺r(shí)間范圍(如近一周、近一個(gè)月)以及任意路段(如西湖大道、錢(qián)江新城隧道)的交通關(guān)鍵指標(biāo),包括車(chē)流量、平均速度以及基于車(chē)速和車(chē)輛類(lèi)型計(jì)算的碳排強(qiáng)度。實(shí)際應(yīng)用中,相關(guān)數(shù)據(jù)查詢響應(yīng)時(shí)間已從傳統(tǒng)方案的 2 小時(shí)縮短至 3 秒以內(nèi),為交通宏觀決策、高精地圖更新以及城市級(jí)交通仿真提供了精準(zhǔn)的數(shù)據(jù)支撐。

??抵锹?lián)車(chē)聯(lián)網(wǎng)平臺(tái)如何基于 TDengine TSDB 構(gòu)建數(shù)據(jù)底座 - TDengine Database 時(shí)序數(shù)據(jù)庫(kù)

TDengine TSDB SQL 語(yǔ)句(交通宏觀數(shù)據(jù)聚合與分析) :

--   1. 聚合某路段(如西湖大道,通過(guò)GPS范圍界定)近1周的日均車(chē)流量與平均車(chē)速
SELECT   DATE(ts) AS stat_date, 
       COUNT(DISTINCT vin) AS   daily_flow,  -- 日均車(chē)流量(按車(chē)輛VIN去重)
       AVG(speed) AS avg_daily_speed       -- 日均平均車(chē)速
FROM   vehicle_info_st 
WHERE   gps_lng BETWEEN 120.123 AND 120.145  --   西湖大道路段經(jīng)度范圍
  AND gps_lat BETWEEN 30.234 AND 30.256   -- 西湖大道路段緯度范圍
  AND ts >= NOW() - 7d 
GROUP   BY stat_date 
ORDER   BY stat_date;
--   2. 計(jì)算全市近1個(gè)月各區(qū)域的碳排強(qiáng)度(基于車(chē)輛類(lèi)型與車(chē)速的自定義公式)
SELECT   vehicle_type, 
       AVG(CASE WHEN speed <= 20 THEN   0.8  -- 低速行駛碳排系數(shù)
                WHEN speed <= 60 THEN   0.5  -- 中速行駛碳排系數(shù)
                ELSE 0.6 END) AS   carbon_intensity  -- 高速行駛碳排系數(shù)
FROM   vehicle_info_st 
WHERE   ts >= NOW() - 30d 
GROUP   BY vehicle_type;
--   3. 查詢某區(qū)域(如錢(qián)江新城)近24小時(shí)的交通流量變化趨勢(shì)(用于實(shí)時(shí)仿真)
SELECT   DATE_TRUNC('hour', ts) AS stat_hour,    -- 按小時(shí)聚合
       COUNT(*) AS hourly_flow 
FROM   vehicle_info_st 
WHERE   gps_lng BETWEEN 120.167 AND 120.189 
  AND gps_lat BETWEEN 30.268 AND 30.290 
  AND ts >= NOW() - 24h 
GROUP   BY stat_hour 
ORDER   BY stat_hour;

業(yè)務(wù)改進(jìn)與提升

1. 成本效益雙豐收

相比傳統(tǒng)數(shù)據(jù)庫(kù)方案, TDengine TSDB 通過(guò) “超級(jí)表 + 子表” 的輕量化建模,將存儲(chǔ)成本降低 60%(PB 級(jí)數(shù)據(jù)存儲(chǔ)無(wú)需額外擴(kuò)容硬件);同時(shí),其原生支持?jǐn)?shù)據(jù)壓縮與分布式計(jì)算,減少了 50% 的服務(wù)器部署數(shù)量,每年為我們節(jié)省硬件采購(gòu)與運(yùn)維成本超 200 萬(wàn)元。此外,數(shù)據(jù)查詢效率提升 99%(從 2 小時(shí)縮短至 3 秒),大幅減少計(jì)算資源占用,進(jìn)一步降低 IT 運(yùn)營(yíng)成本。

2. 決策精準(zhǔn)效率高

依托 TDengine TSDB 的實(shí)時(shí)數(shù)據(jù)處理能力,我們的車(chē)輛管控業(yè)務(wù)實(shí)現(xiàn)了從 “事后追溯” 到 “實(shí)時(shí)預(yù)警” 的轉(zhuǎn)變(如 10 萬(wàn) + 車(chē)輛異常狀態(tài)可在 1 秒內(nèi)觸發(fā)警報(bào));在宏觀決策層面,基于 TDengine TSDB 的快速數(shù)據(jù)聚合,交通信號(hào)燈配時(shí)優(yōu)化周期從 1 個(gè)月縮短至 1 周。

未來(lái)展望:持續(xù)進(jìn)化

下一步,我們將繼續(xù)深化 TDengine TSDB 的應(yīng)用場(chǎng)景:一方面,拓展 “車(chē)-路-云-人” 全要素?cái)?shù)據(jù)接入,將共享單車(chē)、行人過(guò)馬路數(shù)據(jù)納入 TDengine TSDB 中進(jìn)行管理,構(gòu)建更全面的交通數(shù)據(jù)體系;另一方面,基于 TDengine TSDB 的時(shí)序數(shù)據(jù)挖掘能力,開(kāi)發(fā) “交通擁堵預(yù)測(cè)模型”,實(shí)現(xiàn)提前 15 分鐘預(yù)測(cè)路段擁堵情況并推送至市民導(dǎo)航 APP,進(jìn)一步提升城市交通智能化水平。

關(guān)于??抵锹?lián)

浙江海康智聯(lián)科技有限公司為中電??导瘓F(tuán)旗下企業(yè),秉承中國(guó)電子科技集團(tuán)有限公司新一代信息基礎(chǔ)設(shè)施戰(zhàn)略,用科技筑基交通強(qiáng)國(guó)偉業(yè),致力成為國(guó)內(nèi)領(lǐng)先的智能網(wǎng)聯(lián)與車(chē)路協(xié)同產(chǎn)品和技術(shù)服務(wù)商。在《交通強(qiáng)國(guó)建設(shè)綱要》的指引下,??抵锹?lián)持續(xù)以“客戶為中心”進(jìn)行技術(shù)與產(chǎn)品的研發(fā)和創(chuàng)新,打造數(shù)字化、網(wǎng)聯(lián)化、智能化、協(xié)同化的數(shù)智道路,構(gòu)建泛在的、先進(jìn)的交通信息基礎(chǔ)設(shè)施。

作者:??抵锹?lián) 徐翔

]]>
TDengine 在車(chē)聯(lián)網(wǎng)的流計(jì)算典型應(yīng)用 http://www.fjzmyy.cn/time-series-databases/27503.html Fri, 29 Nov 2024 06:08:24 +0000 http://www.fjzmyy.cn/?p=27503 在當(dāng)今的車(chē)聯(lián)網(wǎng)平臺(tái)中,車(chē)輛上報(bào)的數(shù)據(jù)量巨大且更新頻繁,包括車(chē)輛傳感器數(shù)據(jù)、駕駛行為數(shù)據(jù)、GPS軌跡數(shù)據(jù)等。這就需要流式計(jì)算來(lái)實(shí)時(shí)處理和分析這些數(shù)據(jù),在數(shù)據(jù)產(chǎn)生/接入的時(shí)候就立刻產(chǎn)生價(jià)值。比如,可以實(shí)時(shí)監(jiān)測(cè)和分析車(chē)輛的健康狀態(tài),預(yù)測(cè)可能發(fā)生的故障,提供及時(shí)的維修建議,監(jiān)控車(chē)輛的運(yùn)行軌跡是否正常、從而確保車(chē)輛和業(yè)務(wù)的安全和穩(wěn)定。

在流計(jì)算中,數(shù)據(jù)是以源源不斷的流(stream)的形式到達(dá)的。由于流數(shù)據(jù)是無(wú)界的(理論上數(shù)據(jù)會(huì)一直產(chǎn)生),為了劃分最小的計(jì)算單元,就有了窗口的概念。通過(guò)不同邏輯的窗口劃分,流計(jì)算可以滿足不同的業(yè)務(wù)需求。

在 TDengine 的流計(jì)算中,對(duì)數(shù)據(jù)集提供了 5 種特色的窗口查詢:https://docs.taosdata.com/reference/taos-sql/distinguished/。簡(jiǎn)單來(lái)講:分別是通過(guò)固定時(shí)間間隔劃分窗口的 interval , 通過(guò)布爾值劃分窗口的 state_window, 通過(guò)狀態(tài)持續(xù)時(shí)間劃分窗口的 session , 通過(guò)數(shù)據(jù)行數(shù)劃分窗口的 count_window,通過(guò)自定義表達(dá)式制定規(guī)則的 event_window。每一種窗口功能,都包含了很多典型的業(yè)務(wù)需求,它們使 TDengine 在車(chē)聯(lián)網(wǎng)行業(yè)中發(fā)揮了更重要的作用。

以通過(guò)布爾值劃分窗口的 state_window 舉例:用戶可以通過(guò)對(duì)車(chē)輛移動(dòng)狀態(tài)進(jìn)行移動(dòng)/靜止的窗口劃分,然后實(shí)時(shí)計(jì)算獲取車(chē)輛的每次啟停的時(shí)間、位置、中間耗時(shí)。通過(guò)類(lèi)似這樣的語(yǔ)句,就可以做到實(shí)時(shí)掌握車(chē)輛的移動(dòng)狀態(tài)。再通過(guò)與實(shí)時(shí)數(shù)據(jù)的對(duì)比,就可以及時(shí)對(duì)超時(shí)/異常停車(chē)的車(chē)輛發(fā)出告警。

CREATE stream overtime_parking INTO overtime_parking_output_stb AS
SELECT
    _wstart,
    _wend,
    TIMEDIFF(_wstart, _wend, 1s) AS sparking_time,
    LAST(address) address,
    speed_status,
    COUNT(*) AS record_count,
    tbname
FROM
    stb_cold_gps PARTITION BY tbname state_window(speed_status); 

除此之外,用戶還可以通過(guò)車(chē)輛采集到的各種信號(hào)值,從而通過(guò)業(yè)務(wù)邏輯自定義出兩種狀態(tài)。

通過(guò) CASE WHEN 的邏輯,用戶自定義地設(shè)置這個(gè)窗口:STATE_WINDOW( CASE WHEN speed >= xxx THEN true ELSE false END),從而滿足更靈活的業(yè)務(wù)需求。

本文僅以此窗口為例,而對(duì)于其他更多的窗口的流計(jì)算應(yīng)用場(chǎng)景,請(qǐng)點(diǎn)擊這里,申請(qǐng)演示。

]]>
一文速懂:車(chē)聯(lián)網(wǎng)企業(yè)為何需要 TDengine 時(shí)序數(shù)據(jù)庫(kù)做數(shù)據(jù)管理? http://www.fjzmyy.cn/tdengine-engineering/27440.html Fri, 22 Nov 2024 06:06:47 +0000 http://www.fjzmyy.cn/?p=27440 車(chē)聯(lián)網(wǎng)多種應(yīng)用場(chǎng)景

現(xiàn)代新能源汽車(chē),作為一種內(nèi)部系統(tǒng)極為復(fù)雜的交通工具,配備了大量傳感器、導(dǎo)航設(shè)備、應(yīng)用軟件,這些傳感器產(chǎn)生的數(shù)據(jù)都需要上報(bào)到車(chē)聯(lián)網(wǎng)平臺(tái)當(dāng)中。對(duì)于這些車(chē)輛的狀態(tài)數(shù)據(jù)(如車(chē)速、發(fā)動(dòng)機(jī)轉(zhuǎn)速等)、位置數(shù)據(jù)(經(jīng)緯度等)以及用戶行為數(shù)據(jù),車(chē)聯(lián)網(wǎng)平臺(tái)需要對(duì)它們進(jìn)行實(shí)時(shí)/離線計(jì)算分析,從而為用戶提升駕駛體驗(yàn),提供安全保障,為廠商提供質(zhì)量檢測(cè)、功能優(yōu)化,為交通管理部門(mén)提供流量、違章監(jiān)測(cè)、甚至為城市規(guī)劃提供幫助。

因此,同樣是車(chē)聯(lián)網(wǎng)平臺(tái),對(duì)于車(chē)隊(duì)管理,政府監(jiān)督,主機(jī)廠商等不同場(chǎng)景,由于應(yīng)用側(cè)重點(diǎn)的不同,它們所需要接入的數(shù)據(jù)的類(lèi)型,量級(jí),頻率也各不相同。

對(duì)于主機(jī)廠商來(lái)說(shuō),它的車(chē)聯(lián)網(wǎng)平臺(tái)服務(wù)的對(duì)象更為廣泛,包括車(chē)主、經(jīng)銷(xiāo)商、售后服務(wù)部門(mén)以及主機(jī)廠自身的研發(fā)、生產(chǎn)等部門(mén)。由于目標(biāo)是提升車(chē)輛的用戶體驗(yàn)、增強(qiáng)品牌競(jìng)爭(zhēng)力,因此主機(jī)廠商需要采集的數(shù)據(jù)量是最大也是最完整的。一輛汽車(chē)可能有數(shù)千個(gè)數(shù)據(jù)采集點(diǎn)甚至近萬(wàn)個(gè)采集點(diǎn)要隨時(shí)上報(bào)數(shù)據(jù),采集頻率也各不相同。

性能和易用性難以兼得

以上原因,就導(dǎo)致了在同一時(shí)刻一定不會(huì)是所有的數(shù)據(jù)采集點(diǎn)都有數(shù)據(jù)上報(bào)。在數(shù)據(jù)庫(kù)的建模環(huán)節(jié)中,如果采用最簡(jiǎn)單清晰的“一車(chē)對(duì)一表”數(shù)據(jù)建模方式,那么在一行高達(dá)幾千列的數(shù)據(jù)中,會(huì)有相當(dāng)多列的值為 NULL 。更主要的是,即使業(yè)務(wù)查詢只涉及其中少數(shù)幾列,在實(shí)際執(zhí)行的時(shí)候也要整行整塊地讀取很多無(wú)效數(shù)據(jù)再做篩選,從而大大拖累查詢性能。

但如果按照設(shè)備種類(lèi)對(duì)這個(gè)表進(jìn)行縱向的拆分,當(dāng)涉及到統(tǒng)計(jì)分析的時(shí)候,必將又會(huì)導(dǎo)致原來(lái)的 SQL 語(yǔ)句引入大量的插值、連接等功能,這會(huì)使 SQL 的編寫(xiě)十分復(fù)雜,容易出錯(cuò),難以維護(hù),且難以適應(yīng)業(yè)務(wù)的頻繁變化。

一車(chē)一表模型,助力數(shù)據(jù)管理

為了解決這一難題,TDengine 結(jié)合自身底層的存儲(chǔ)/查詢模型,以創(chuàng)新的設(shè)計(jì),將復(fù)雜 SQL 封裝起來(lái),這樣一來(lái),用戶側(cè)可以在沒(méi)有任何感知的情況下編寫(xiě) SQL 語(yǔ)句訪問(wèn)數(shù)據(jù),既防止了大量無(wú)效數(shù)據(jù)導(dǎo)致的查詢性能下降,又確保了 SQL 語(yǔ)句的簡(jiǎn)潔易懂、易維護(hù)、可擴(kuò)展,從而在用戶側(cè)實(shí)現(xiàn)了:“一車(chē)一表的簡(jiǎn)潔建模設(shè)計(jì)”。 在性能方面,TDengine 利用每個(gè)數(shù)據(jù)流都是天然有時(shí)序的這一特點(diǎn),把數(shù)據(jù)的寫(xiě)入變成最簡(jiǎn)單的追加操作。做到了在相同硬件資源下,單個(gè)數(shù)據(jù)流上最好的寫(xiě)入效率。在此基礎(chǔ)上,TDengine 又使用分布式架構(gòu),讓所有的 cpu 并行工作,甚至可以同時(shí)寫(xiě)入十億百億級(jí)別點(diǎn)位的數(shù)據(jù)流。

讀取方面同理:由于車(chē)輛各個(gè)設(shè)備產(chǎn)生的時(shí)序數(shù)據(jù)在硬盤(pán)上都是連續(xù)存儲(chǔ)。因此,批量拉取時(shí)便也均為連續(xù)讀,有充分的性能保障,再輔以流計(jì)算、訂閱、自定義函數(shù)(UDF)、各種時(shí)序數(shù)據(jù)場(chǎng)景的專用函數(shù),共同為車(chē)聯(lián)網(wǎng)平臺(tái)各種實(shí)時(shí)/離線分析提供堅(jiān)實(shí)的底座。

在此基礎(chǔ)上,為了防止硬盤(pán)成為性能瓶頸,TDengine 可以為不同的存儲(chǔ)路徑,同時(shí)掛載不同的硬盤(pán)并發(fā)讀寫(xiě)。

綜上可見(jiàn),TDengine 充分利用了計(jì)算機(jī)的最大能力,也充分適配了車(chē)聯(lián)網(wǎng)行業(yè)數(shù)據(jù)上報(bào)量大,數(shù)據(jù)采集點(diǎn)多的特點(diǎn)。

支持 Geometry 類(lèi)型,賦能空間分析

自 3.1.0.0 版本開(kāi)始,TDengine 提供了全新的數(shù)據(jù)類(lèi)型 Geometry 用于點(diǎn)線面等幾何類(lèi)型的存儲(chǔ),并且正在逐步提供一套符合 OGC(Open Geospatial Consortium) 標(biāo)準(zhǔn)的 SQL 函數(shù),包括幾何輸入輸出、空間關(guān)系、幾何測(cè)量、集合操作和幾何處理等等。 這樣一來(lái),各類(lèi)車(chē)聯(lián)網(wǎng)平臺(tái)就可以更輕松地進(jìn)行車(chē)輛軌跡數(shù)據(jù)的分析,比如:熱點(diǎn)路線,軌跡段數(shù)據(jù),停留點(diǎn),行駛事件等等,從而進(jìn)一步簡(jiǎn)化軟件系統(tǒng)架構(gòu),真正做到針對(duì)車(chē)輛時(shí)間空間一體化的數(shù)據(jù)分析、預(yù)警等工作。

多級(jí)存儲(chǔ),降低數(shù)據(jù)成本

在存儲(chǔ)方面,由于車(chē)聯(lián)網(wǎng)行業(yè)監(jiān)管法規(guī)、客戶服務(wù)需求、自身產(chǎn)研基于數(shù)據(jù)的需求等原因,每輛車(chē)的數(shù)據(jù)保留數(shù)據(jù)經(jīng)常要保留數(shù)年之久,因此存儲(chǔ)成本十分之高。但得益于 TDengine 多級(jí)存儲(chǔ)功能,可以使得最熱的數(shù)據(jù)保留在內(nèi)存,次熱的數(shù)據(jù)保留在SSD,冷數(shù)據(jù)保留在機(jī)械盤(pán),極冷數(shù)據(jù)保留在成本最低廉的 S3 存儲(chǔ)上,再輔以列式存儲(chǔ)+定制化壓縮算法帶來(lái)的高壓縮比,用戶的存儲(chǔ)成本可以大幅下降。

由上可見(jiàn),在對(duì)海量車(chē)聯(lián)網(wǎng)數(shù)據(jù)的采集、存儲(chǔ)、處理分發(fā)的整個(gè)數(shù)據(jù)管理過(guò)程中,TDengine 可以確保車(chē)輛上傳的各種數(shù)據(jù)都能作為有效的資源而被高效地運(yùn)用。作為一臺(tái)巨大復(fù)雜的設(shè)備,新能源汽車(chē)徹底放大了 TDengine 的核心設(shè)計(jì)“一個(gè)設(shè)備一張表,一類(lèi)設(shè)備一張超級(jí)表”的核心理念,因此可以說(shuō)它們是天作之合。

具體應(yīng)用可以參考 :http://www.fjzmyy.cn/iov-time_series_database

]]>
TDengine + MQTT :車(chē)聯(lián)網(wǎng)時(shí)序數(shù)據(jù)庫(kù)如何高效接入 http://www.fjzmyy.cn/tdengine-engineering/27256.html Tue, 12 Nov 2024 05:40:30 +0000 http://www.fjzmyy.cn/?p=27256 現(xiàn)代新能源汽車(chē),作為一種內(nèi)部系統(tǒng)極為復(fù)雜的交通工具,配備了大量傳感器、導(dǎo)航設(shè)備、應(yīng)用軟件,這些傳感器產(chǎn)生的數(shù)據(jù)都需要上報(bào)到車(chē)聯(lián)網(wǎng)平臺(tái)當(dāng)中。對(duì)于這些車(chē)輛的狀態(tài)數(shù)據(jù)(如車(chē)速、發(fā)動(dòng)機(jī)轉(zhuǎn)速等)、位置數(shù)據(jù)(經(jīng)緯度等)以及用戶行為數(shù)據(jù),車(chē)聯(lián)網(wǎng)平臺(tái)需要對(duì)它們進(jìn)行實(shí)時(shí)/離線計(jì)算分析,從而為用戶提升駕駛體驗(yàn),提供安全保障,為廠商提供質(zhì)量檢測(cè)、功能優(yōu)化,為交通管理部門(mén)提供流量、違章監(jiān)測(cè)、甚至為城市規(guī)劃提供幫助。

在車(chē)聯(lián)網(wǎng)領(lǐng)域中 MQTT 是十分常見(jiàn)的協(xié)議,它所具備的:能夠適應(yīng)不穩(wěn)定的網(wǎng)絡(luò)環(huán)境、輕量級(jí)、低延遲等特點(diǎn),使其非常適合車(chē)輛數(shù)據(jù)的上報(bào),也是目前主流的車(chē)聯(lián)網(wǎng)邊端-云端數(shù)據(jù)交互的通訊協(xié)議。

而 TDengine 是一款從誕生之初便致力于為工業(yè)、物聯(lián)網(wǎng)領(lǐng)域推動(dòng)信息化改革的時(shí)序大數(shù)據(jù)平臺(tái)。而車(chē)聯(lián)網(wǎng)作為物聯(lián)網(wǎng)的重要分支,自然也是 TDengine 主攻的領(lǐng)域之一。因此,在 TDengine Enterprise/TDengine Cloud 的外部數(shù)據(jù)源接入組件中,我們提供了諸如:MQTT、OPC-UA、OPC-DA 等數(shù)據(jù)直采的功能。讓用戶可以憑借十分簡(jiǎn)單的 Web 界面配置,無(wú)需任何一行代碼,便完成車(chē)聯(lián)網(wǎng)的位置、車(chē)輛狀態(tài)、用戶行為等數(shù)據(jù)的接入。

我們可以想象出這樣一個(gè)場(chǎng)景:

通過(guò) TDengine 的 web 界面工具,訂閱 MQTT 的 “GPS” topic 們獲取全部車(chē)輛的 GPS 數(shù)據(jù),然后把“GPS” topic 和 TDengine 中創(chuàng)建出來(lái)的“超級(jí)表 GPS”對(duì)應(yīng)起來(lái),再把 MQTT 數(shù)據(jù)中的“車(chē)牌號(hào)”, “車(chē)型”,“汽車(chē)品牌”同 TDengine “GPS” 超級(jí)表中不同的標(biāo)簽映射起來(lái)。最終, MQTT 數(shù)據(jù)就可以源源不斷地接入TDengine 當(dāng)中了。

TDengine 的數(shù)據(jù)采集插件就像是一個(gè)翻譯官,它能理解 MQTT 數(shù)據(jù)結(jié)構(gòu)映射到時(shí)序庫(kù)數(shù)據(jù)結(jié)構(gòu)的需求,最終把他們巧妙地結(jié)合在一起。

那么,使用 TDengine 采集車(chē)聯(lián)網(wǎng)上報(bào)的 MQTT 數(shù)據(jù)到底有多簡(jiǎn)單?

抽象一下,只需要如下步驟:

1. 對(duì)于非 TDengine Enterprise(企業(yè)版)用戶,花 3 分鐘時(shí)間注冊(cè) TDengine Cloud ,https://cloud.taosdata.com/auth/login,根據(jù)提示兌換 600 元額度的免費(fèi)使用。

2. 在TDengine 中提前創(chuàng)建好一個(gè)數(shù)據(jù)庫(kù),用于存放MQTT數(shù)據(jù)。(具體建庫(kù)參數(shù)值如需自定義,可參閱:https://docs.taosdata.com/reference/taos-sql/database/

TDengine + MQTT :車(chē)聯(lián)網(wǎng)時(shí)序數(shù)據(jù)庫(kù)如何高效接入 - TDengine Database 時(shí)序數(shù)據(jù)庫(kù)

3. 確保代理插件和 MQTT server 處在同一網(wǎng)絡(luò),然后根據(jù)提示,逐步復(fù)制粘貼,安裝代理插件并啟動(dòng)。

TDengine + MQTT :車(chē)聯(lián)網(wǎng)時(shí)序數(shù)據(jù)庫(kù)如何高效接入 - TDengine Database 時(shí)序數(shù)據(jù)庫(kù)

TDengine + MQTT :車(chē)聯(lián)網(wǎng)時(shí)序數(shù)據(jù)庫(kù)如何高效接入 - TDengine Database 時(shí)序數(shù)據(jù)庫(kù)

4. 新增數(shù)據(jù)源。

TDengine + MQTT :車(chē)聯(lián)網(wǎng)時(shí)序數(shù)據(jù)庫(kù)如何高效接入 - TDengine Database 時(shí)序數(shù)據(jù)庫(kù)

5. 按順序填寫(xiě)/選擇:自定義的任務(wù)名稱;MQTT 類(lèi)型;選擇剛剛創(chuàng)建的代理插件;填寫(xiě)MQTT server 的 IP 和端口。 PS:這里可以用一個(gè)免費(fèi)的 MQTT server 做驗(yàn)證(broker.emqx.io:1883)。

TDengine + MQTT :車(chē)聯(lián)網(wǎng)時(shí)序數(shù)據(jù)庫(kù)如何高效接入 - TDengine Database 時(shí)序數(shù)據(jù)庫(kù)

6. 填寫(xiě) MQTT 協(xié)議版本、自定義的Client ID、和需要訂閱的主題(topic)以及該訂閱的 QOS (Quality of Service 服務(wù)質(zhì)量)級(jí)別,QOS 可選范圍為0、1、2,具體寫(xiě)法參考示例即可。(用戶名密碼為選填項(xiàng)。)

TDengine + MQTT :車(chē)聯(lián)網(wǎng)時(shí)序數(shù)據(jù)庫(kù)如何高效接入 - TDengine Database 時(shí)序數(shù)據(jù)庫(kù)

7. 解析數(shù)據(jù),在MQTT Payload 模塊中配置解析 MQTT 消息:

可以點(diǎn)擊從服務(wù)器檢索,從 MQTT Broker 獲得示例數(shù)據(jù)。也可以自己填寫(xiě) MQTT 消息體中的示例數(shù)據(jù),例如:{“id”: 1, “message”: “hello-word”}{“id”: 2, “message”: “hello-word”}。

TDengine + MQTT :車(chē)聯(lián)網(wǎng)時(shí)序數(shù)據(jù)庫(kù)如何高效接入 - TDengine Database 時(shí)序數(shù)據(jù)庫(kù)

8. 獲得數(shù)據(jù)之后,可以選擇自定義的方式依次去處理這個(gè)json:

  • 提取出列。
  • 對(duì)提取出的列數(shù)據(jù),通過(guò)分隔符、正則表達(dá)式等進(jìn)行提取或拆分:比如把“中國(guó)-北京”拆分成“中國(guó)”和“北京” 兩列。
  • 對(duì)最終的結(jié)果進(jìn)行過(guò)濾:比如只取車(chē)速大于 xxx 的數(shù)據(jù)。。
TDengine + MQTT :車(chē)聯(lián)網(wǎng)時(shí)序數(shù)據(jù)庫(kù)如何高效接入 - TDengine Database 時(shí)序數(shù)據(jù)庫(kù)

9. 創(chuàng)建一個(gè)超級(jí)表,用于存儲(chǔ)MQTT數(shù)據(jù)。然后把剛剛處理過(guò)的 MQTT 數(shù)據(jù)結(jié)構(gòu)和 TDengine 的超級(jí)表做一個(gè)映射關(guān)系:這里我們可以使用各種靈活的方式處理映射關(guān)系。比如設(shè)置時(shí)間戳自動(dòng)生成、固定制、默認(rèn)值、以及最基本的匹配。

TDengine + MQTT :車(chē)聯(lián)網(wǎng)時(shí)序數(shù)據(jù)庫(kù)如何高效接入 - TDengine Database 時(shí)序數(shù)據(jù)庫(kù)

10. 填寫(xiě)完成以上信息后,下拉到底部點(diǎn)擊“保存并應(yīng)用”按鈕,即可直接啟動(dòng)從 MQTT 到 TDengine 的數(shù)據(jù)同步了。

TDengine + MQTT :車(chē)聯(lián)網(wǎng)時(shí)序數(shù)據(jù)庫(kù)如何高效接入 - TDengine Database 時(shí)序數(shù)據(jù)庫(kù)

11.在這里看到連接代理和數(shù)據(jù)源任務(wù)都處于正常狀態(tài)之后,就可以去TDengine 中使用 SQL 語(yǔ)句檢查我們的 MQTT 數(shù)據(jù)了。

TDengine + MQTT :車(chē)聯(lián)網(wǎng)時(shí)序數(shù)據(jù)庫(kù)如何高效接入 - TDengine Database 時(shí)序數(shù)據(jù)庫(kù)

TDengine + MQTT :車(chē)聯(lián)網(wǎng)時(shí)序數(shù)據(jù)庫(kù)如何高效接入 - TDengine Database 時(shí)序數(shù)據(jù)庫(kù)

現(xiàn)在,我們已經(jīng)看到MQTT server 的數(shù)據(jù)正在源源不斷地寫(xiě)入 TDengine 了。

在這個(gè)配置過(guò)程中,我們還能在 WEB 頁(yè)面看到很多其他配置項(xiàng),但是他們都是選填項(xiàng),這部分用戶可以根據(jù)實(shí)際情況填寫(xiě),比如:

  1. 用戶名/密碼,SSL 認(rèn)證。
  2. Keep Alive 和 Clean Session 為具體使用時(shí)候關(guān)于空連接釋放和是否記錄訂閱進(jìn)度的配置。
  3. 代理插件的日志級(jí)別、日志保留天數(shù)、mqtt原始數(shù)據(jù)的保留設(shè)置。

現(xiàn)在,我們就已經(jīng)輕松完成了車(chē)輛 MQTT 數(shù)據(jù)的上傳。整個(gè)過(guò)程中,唯一耗時(shí)的地方,可能就在于 MQTT 數(shù)據(jù)結(jié)構(gòu)和 TDengine 的超級(jí)表結(jié)構(gòu)的匹配環(huán)節(jié)。如果您對(duì) TDengine 的“超級(jí)表-子表”的數(shù)據(jù)模型十分熟悉的話,想必不會(huì)花很多時(shí)間。

聯(lián)系解決方案架構(gòu)師
申請(qǐng)PoC
立即聯(lián)系
60s 開(kāi)箱體驗(yàn)
TDengine Cloud
立即注冊(cè)
]]>
壓縮率十倍于 Elasticsearch,TDengine 在知輪科技智慧輪胎系統(tǒng)中的應(yīng)用 http://www.fjzmyy.cn/tdengine-user-cases/23218.html Tue, 05 Mar 2024 09:11:09 +0000 http://www.fjzmyy.cn/?p=23218

小T導(dǎo)讀:隨著知輪智慧輪胎系統(tǒng)的不斷升級(jí)迭代,數(shù)據(jù)規(guī)模也在不斷增長(zhǎng),內(nèi)外部人員對(duì)智慧系統(tǒng)整體業(yè)務(wù)響應(yīng)速度和穩(wěn)定性要求變得更高。為了滿足這一需求,該項(xiàng)目團(tuán)隊(duì)決定應(yīng)用 TDengine 替換原有的 Elasticsearch 檢索分析引擎,本文就 TDengine 的應(yīng)用情況、改造效果等進(jìn)行了全面分析,給到大家參考。

知輪(杭州)科技有限公司隸屬于中策橡膠集團(tuán),是一家專注為商用車(chē)客戶提供輪胎數(shù)字化解決方案以及輪胎新零售、移動(dòng)救援的互聯(lián)網(wǎng)科技公司。我們以輪胎為核心,致力于幫助用戶在車(chē)輛行駛過(guò)程中更好地應(yīng)對(duì)輪胎購(gòu)買(mǎi)和使用、輪胎故障救援以及輪胎安全預(yù)警等三個(gè)關(guān)鍵場(chǎng)景下的一系列問(wèn)題。

以下是知輪科技三大服務(wù)場(chǎng)景:

壓縮率十倍于 Elasticsearch,TDengine 在知輪科技智慧輪胎系統(tǒng)中的應(yīng)用 - TDengine Database 時(shí)序數(shù)據(jù)庫(kù)
壓縮率十倍于 Elasticsearch,TDengine 在知輪科技智慧輪胎系統(tǒng)中的應(yīng)用 - TDengine Database 時(shí)序數(shù)據(jù)庫(kù)
壓縮率十倍于 Elasticsearch,TDengine 在知輪科技智慧輪胎系統(tǒng)中的應(yīng)用 - TDengine Database 時(shí)序數(shù)據(jù)庫(kù)

項(xiàng)目選型背景

知輪智慧輪胎系統(tǒng)(簡(jiǎn)稱 VTIS 系統(tǒng))經(jīng)過(guò)近年的不斷升級(jí)迭代,數(shù)據(jù)規(guī)模不斷增長(zhǎng)。特別是最近兩年,隨著知輪智租系統(tǒng)車(chē)輛和某國(guó)內(nèi)快遞車(chē)隊(duì)全國(guó)快遞車(chē)輛等相關(guān)系統(tǒng)的接入,外部客戶和內(nèi)部人員對(duì)智慧系統(tǒng)整體業(yè)務(wù)響應(yīng)延遲變得更為敏感,對(duì)系統(tǒng)穩(wěn)定性的要求也變得更高。

而知輪 VTIS 系統(tǒng)先前采用的是 Elasticsearch 檢索分析引擎,其無(wú)論在產(chǎn)品選型、應(yīng)用場(chǎng)景還是開(kāi)發(fā)迭代效率方面,都無(wú)法滿足數(shù)據(jù)量不斷增加的需求??紤]到數(shù)據(jù)特點(diǎn)和處理需求,我們決定選擇更專業(yè)的物聯(lián)網(wǎng)和車(chē)聯(lián)網(wǎng)時(shí)序數(shù)據(jù)庫(kù)(Time Series Database)來(lái)滿足系統(tǒng)的要求。

通過(guò)各類(lèi)選型調(diào)研后,最終我們選擇應(yīng)用 TDengine 作為 VTIS 系統(tǒng)的時(shí)序數(shù)據(jù)庫(kù)。主要有以下幾方面的考量:

  • 業(yè)務(wù)適配性:TDengine 符合 VTIS 系統(tǒng)物聯(lián)網(wǎng) + 車(chē)聯(lián)網(wǎng)特性。
  • 運(yùn)維成本:TDengine Enterprise(企業(yè)版)由濤思數(shù)據(jù)提供 24 小時(shí)專人運(yùn)維服務(wù),運(yùn)維成本顯著降低。
  • 數(shù)據(jù)壓縮率:時(shí)序列式存儲(chǔ)促成了 TDengine 超高的數(shù)據(jù)壓縮比,結(jié)合數(shù)據(jù)重整功能,實(shí)測(cè)數(shù)據(jù)相比 Elasticsearch 數(shù)據(jù)壓縮比超過(guò) 1:10,為企業(yè)節(jié)省了更多的服務(wù)器磁盤(pán)費(fèi)用。
  • 讀寫(xiě)性能優(yōu)異:對(duì)于時(shí)序數(shù)據(jù)來(lái)說(shuō) TDengine 的寫(xiě)入性能極高,實(shí)測(cè) 3 節(jié)點(diǎn)高效云盤(pán)寫(xiě)入速度可達(dá) 30W 測(cè)點(diǎn)每秒。數(shù)據(jù)讀取性能也表現(xiàn)的很優(yōu)異,針對(duì)相同時(shí)序數(shù)據(jù)量,其讀取速率 10 倍于原有的 Elasticsearch 引擎。
  • TDengine 具有低服務(wù)器資源占用率、高可用性和穩(wěn)定性的特點(diǎn)。它支持用戶自定義函數(shù)(UDF)算法集成,并提供各類(lèi)數(shù)學(xué)算法的支持。
  • 冷熱分離:TDengine 提供多級(jí)存儲(chǔ),對(duì)歷史數(shù)據(jù)可全自動(dòng)遷移低頻低價(jià)存儲(chǔ)介質(zhì)中進(jìn)行存儲(chǔ),降低企業(yè)數(shù)據(jù)存儲(chǔ)費(fèi)用。
  • 車(chē)企接入率高:針對(duì)公司所屬行業(yè)合作對(duì)接情況,結(jié)合濤思數(shù)據(jù)官網(wǎng)各類(lèi)落地案例,TDengine 在快遞物流行業(yè)、物聯(lián)網(wǎng)行業(yè)均有較高接入率,能夠?yàn)楣竞罄m(xù)商業(yè)發(fā)展提供更友好的數(shù)據(jù)支持。

業(yè)務(wù)架構(gòu) & 經(jīng)驗(yàn)分享

目前該項(xiàng)目上使用的是 TDengine 3.1.1.11 企業(yè)版的 3 節(jié)點(diǎn)集群,單臺(tái)配置為 16 核 CPU + 64GB 內(nèi)存 + 3TB 高效云盤(pán)。數(shù)據(jù)整體流向架構(gòu)圖(簡(jiǎn)化)如下所示:

壓縮率十倍于 Elasticsearch,TDengine 在知輪科技智慧輪胎系統(tǒng)中的應(yīng)用 - TDengine Database 時(shí)序數(shù)據(jù)庫(kù)

以車(chē)輛實(shí)時(shí)胎溫胎壓數(shù)據(jù)采集為例。邊緣網(wǎng)關(guān)一般會(huì)每隔一定時(shí)間(秒級(jí))采集胎溫胎壓數(shù)據(jù),其中包括胎溫、胎壓、漏氣情況等數(shù)據(jù),通過(guò)邊緣計(jì)算進(jìn)行首次數(shù)據(jù)整合、比對(duì)預(yù)警閾值后,網(wǎng)關(guān)一般情況下以 3 分鐘(報(bào)警時(shí)秒級(jí))間隔通過(guò) TCP 鏈接 + 私有協(xié)議將數(shù)據(jù)發(fā)送至 VTIS 云平臺(tái) Netty 網(wǎng)關(guān)。

實(shí)時(shí)流數(shù)據(jù)經(jīng) VTIS Netty 網(wǎng)關(guān)服務(wù)后依次執(zhí)行數(shù)據(jù)解碼、流數(shù)據(jù)實(shí)時(shí)分析、預(yù)警推送、數(shù)據(jù)整合等步驟后批量寫(xiě)入 TDengine 中。需要注意的是,TDengine 寫(xiě)入需保持單子表順序?qū)懭氲囊?guī)則,因此寫(xiě)入前的數(shù)據(jù)順序重整很有必要,這可以減少數(shù)據(jù)空洞的產(chǎn)生。

基于 TDengine 一個(gè)設(shè)備采集點(diǎn)一張子表的建模思路,在濤思數(shù)據(jù)交付團(tuán)隊(duì)協(xié)助下,我們建立了車(chē)輛胎溫胎壓數(shù)據(jù)的庫(kù)表結(jié)構(gòu)大致如下(簡(jiǎn)化):

壓縮率十倍于 Elasticsearch,TDengine 在知輪科技智慧輪胎系統(tǒng)中的應(yīng)用 - TDengine Database 時(shí)序數(shù)據(jù)庫(kù)

列設(shè)計(jì)-采集量:

壓縮率十倍于 Elasticsearch,TDengine 在知輪科技智慧輪胎系統(tǒng)中的應(yīng)用 - TDengine Database 時(shí)序數(shù)據(jù)庫(kù)

列設(shè)計(jì)-狀態(tài)量:

壓縮率十倍于 Elasticsearch,TDengine 在知輪科技智慧輪胎系統(tǒng)中的應(yīng)用 - TDengine Database 時(shí)序數(shù)據(jù)庫(kù)

標(biāo)簽設(shè)計(jì):

壓縮率十倍于 Elasticsearch,TDengine 在知輪科技智慧輪胎系統(tǒng)中的應(yīng)用 - TDengine Database 時(shí)序數(shù)據(jù)庫(kù)

上述數(shù)據(jù)保存時(shí)間為 180 天,數(shù)據(jù)文件切分跨度 1 天,由于單車(chē)輛存在多輪位同時(shí)刻胎溫胎壓數(shù)據(jù),我們便以時(shí)間戳后六位對(duì)數(shù)據(jù)進(jìn)行區(qū)分。此外,通過(guò) TDengine 提供的各類(lèi)原有函數(shù)配合用戶自定義函數(shù),我們編寫(xiě)了基于時(shí)序的算法配合實(shí)時(shí)流計(jì)算(如即時(shí)態(tài)勢(shì)溫度感知),以此提高預(yù)警效率和及時(shí)性,減少誤報(bào)情況的發(fā)生。

運(yùn)行情況 & 改造效果

項(xiàng)目上線后穩(wěn)定運(yùn)行至今,資源占用率平穩(wěn)。對(duì)比原有的 Elasticsearch,TDengine 存儲(chǔ)時(shí)序數(shù)據(jù)存在明顯的優(yōu)勢(shì),主要表現(xiàn)在如下幾點(diǎn):

  • 磁盤(pán)占用

Elasticsearch:基于 Lucene 內(nèi)部以 JSON 格式存儲(chǔ),數(shù)據(jù)壓縮率低,磁盤(pán)占用率高;

TDengine:時(shí)序列式存儲(chǔ),同一設(shè)備隨時(shí)間數(shù)據(jù)變化不大,壓縮率極高,相比 Elasticsearch 有 10 倍左右的壓縮比,磁盤(pán)占用率低。

  • 內(nèi)存占用(單節(jié)點(diǎn)內(nèi)存配置皆為 64GB)

Elasticsearch:內(nèi)存占用量 4 個(gè)節(jié)點(diǎn)皆在 54GB 以上;

壓縮率十倍于 Elasticsearch,TDengine 在知輪科技智慧輪胎系統(tǒng)中的應(yīng)用 - TDengine Database 時(shí)序數(shù)據(jù)庫(kù)

TDengine:內(nèi)存占用量 3 個(gè)節(jié)點(diǎn)皆僅在 4GB 左右。

壓縮率十倍于 Elasticsearch,TDengine 在知輪科技智慧輪胎系統(tǒng)中的應(yīng)用 - TDengine Database 時(shí)序數(shù)據(jù)庫(kù)

此外,TDengine 還具有如下優(yōu)點(diǎn):

  • 數(shù)據(jù)讀寫(xiě)性能強(qiáng)大:對(duì)于時(shí)序數(shù)據(jù)的順序?qū)懭胨俾蕵O快 ,時(shí)間范圍查詢效率極高。
  • 復(fù)雜時(shí)序運(yùn)算:通過(guò) TDengine 的 UDF(用戶自定函數(shù))功能,方便 VTIS 系統(tǒng)后續(xù)進(jìn)行時(shí)序態(tài)勢(shì)胎溫實(shí)時(shí)流計(jì)算和其他復(fù)雜時(shí)序數(shù)據(jù)的實(shí)時(shí)計(jì)算。復(fù)雜運(yùn)算不影響整體集群穩(wěn)定性和時(shí)延。
  • 數(shù)據(jù)訂閱服務(wù):利用 TDengine 的數(shù)據(jù)訂閱功能,將數(shù)據(jù)實(shí)時(shí)導(dǎo)入阿里云 MaxCompute 大數(shù)據(jù)倉(cāng)庫(kù),實(shí)現(xiàn)近實(shí)時(shí)的數(shù)據(jù)可視化分析和模型建立。

第三方平臺(tái)可以利用 TDengine 的數(shù)據(jù)訂閱功能實(shí)現(xiàn)數(shù)據(jù)便捷流轉(zhuǎn),便于知輪科技與各家快遞物流、車(chē)企、公交集團(tuán)等進(jìn)行數(shù)據(jù)對(duì)接。未來(lái)希望 TDengine 能增加更多便于運(yùn)維的功能,比如無(wú)阻塞的數(shù)據(jù)重整、數(shù)據(jù)慢查詢隔離池等。

可視化與未來(lái)

在車(chē)輛胎溫胎壓監(jiān)控領(lǐng)域的可視化中,展示信息的完整性、實(shí)時(shí)性、可交互性和靈活性至關(guān)重要。TDengine 提供高效的查詢能力和簡(jiǎn)單易用的 SQL 語(yǔ)句,能輕松實(shí)現(xiàn)這些需求。通過(guò)網(wǎng)頁(yè)展示工具調(diào)用 TDengine 的 SQL,我們成功創(chuàng)建了展示各類(lèi)車(chē)輛預(yù)警事件的主看板,為車(chē)隊(duì)集團(tuán)的運(yùn)營(yíng)決策提供重要支持。

壓縮率十倍于 Elasticsearch,TDengine 在知輪科技智慧輪胎系統(tǒng)中的應(yīng)用 - TDengine Database 時(shí)序數(shù)據(jù)庫(kù)

以上是 TDengine 3.0 在輪胎智能預(yù)警領(lǐng)域的應(yīng)用案例,類(lèi)似的需求也存在于快遞物流、公共交通、港口碼頭等多個(gè)輪胎應(yīng)用場(chǎng)景中。隨著智能化的不斷演進(jìn),知輪科技的 VTIS 系統(tǒng)將通過(guò)采用 TDengine 在未來(lái)扮演更加重要的角色。

作者簡(jiǎn)介:尤佳迪,知輪(杭州)科技有限公司,負(fù)責(zé) VTIS 系統(tǒng)物聯(lián)網(wǎng)平臺(tái)業(yè)務(wù)。

]]>
運(yùn)輸車(chē)輛超時(shí)停車(chē)預(yù)警難?TDengine 流式計(jì)算助力吉科軟輕松解決 http://www.fjzmyy.cn/tdengine-user-cases/18511.html Tue, 11 Jul 2023 02:15:59 +0000 http://www.fjzmyy.cn/?p=18511 當(dāng)下,隨著物流供應(yīng)鏈的不斷發(fā)展,冷鏈物流正變得越來(lái)越重要。通過(guò)數(shù)字化、平臺(tái)化和生態(tài)化的智慧冷鏈監(jiān)管平臺(tái),企業(yè)可以更好地掌握運(yùn)輸車(chē)輛的位置,及時(shí)發(fā)現(xiàn)并處理異常事件,有效提升客戶滿意度和信任度,同時(shí)也有助于降低冷鏈運(yùn)輸成本,提高企業(yè)市場(chǎng)競(jìng)爭(zhēng)力。在這一背景下,某冷鏈項(xiàng)目利用追溯技術(shù)和監(jiān)控預(yù)警功能,可以實(shí)現(xiàn)對(duì)冷鏈運(yùn)輸各個(gè)環(huán)節(jié)的高效監(jiān)管,提高運(yùn)輸安全性和產(chǎn)品質(zhì)量,為冷鏈運(yùn)輸行業(yè)帶來(lái)極大的賦能作用。

異常事件預(yù)警

在具體業(yè)務(wù)中,軌跡數(shù)據(jù)的傳輸形式主要有兩種,正常情況下設(shè)備會(huì)實(shí)時(shí)向服務(wù)端推送數(shù)據(jù),但當(dāng)設(shè)備無(wú)信號(hào)時(shí)就會(huì)出現(xiàn)離線數(shù)據(jù),車(chē)輛聯(lián)網(wǎng)后會(huì)將離線數(shù)據(jù)再次進(jìn)行推送。利用這些推送數(shù)據(jù),我們需要計(jì)算運(yùn)輸車(chē)輛超時(shí)停車(chē)預(yù)警。

這一需求實(shí)現(xiàn)的難點(diǎn)在于實(shí)時(shí)數(shù)據(jù)計(jì)算停車(chē)停留時(shí)間后,離線數(shù)據(jù)上傳,離線數(shù)據(jù)可能存在實(shí)時(shí)數(shù)據(jù)的中間,所以停留時(shí)間需要重新計(jì)算,數(shù)據(jù)量大,計(jì)算量大,復(fù)雜度也高,準(zhǔn)確性低。

我們的解決方案是:

  • 對(duì)于實(shí)時(shí)數(shù)據(jù),可以直接計(jì)算每個(gè)軌跡點(diǎn)的停留時(shí)間,并根據(jù)預(yù)設(shè)的超時(shí)閾值進(jìn)行判斷,是否需要發(fā)出超時(shí)停車(chē)預(yù)警。同時(shí)使用 Redis 內(nèi)存數(shù)據(jù)庫(kù)或者是使用分布式緩存系統(tǒng)進(jìn)行緩存優(yōu)化,將計(jì)算結(jié)果進(jìn)行緩存,避免重復(fù)計(jì)算;
  • 對(duì)于離線數(shù)據(jù),可以在車(chē)輛重新聯(lián)網(wǎng)后,將離線數(shù)據(jù)與實(shí)時(shí)數(shù)據(jù)進(jìn)行合并,并根據(jù)時(shí)間戳進(jìn)行排序,從而保證數(shù)據(jù)順序的正確性。然后根據(jù)新的軌跡點(diǎn)數(shù)據(jù)重新計(jì)算超時(shí)停車(chē)預(yù)警,避免離線數(shù)據(jù)對(duì)預(yù)警結(jié)果造成影響。

在原有方案中,我們通過(guò)對(duì)已接收的數(shù)據(jù)進(jìn)行實(shí)時(shí)計(jì)算,以此確定每個(gè)軌跡點(diǎn)是離線還是在線狀態(tài)。但這一方案存在兩點(diǎn)缺陷:

  • 由于計(jì)算數(shù)據(jù)量較大,導(dǎo)致接收數(shù)據(jù)存在延時(shí)問(wèn)題
  • 因有離線數(shù)據(jù),需要考慮離線數(shù)據(jù)與實(shí)時(shí)數(shù)據(jù)結(jié)合,可能有超時(shí)停車(chē)的情況出現(xiàn),導(dǎo)致計(jì)算量復(fù)雜程度倍增

后面經(jīng)過(guò)數(shù)據(jù)庫(kù)選型,我們選擇了時(shí)序數(shù)據(jù)庫(kù)(Time Series Database) TDengine 存儲(chǔ)車(chē)輛軌跡數(shù)據(jù),它能夠很好地實(shí)時(shí)分析并記錄車(chē)輛的位置、速度和行駛方向等信息,為 B 端客戶提供實(shí)時(shí)車(chē)輛運(yùn)輸位置跟蹤。

運(yùn)輸車(chē)輛超時(shí)停車(chē)預(yù)警難?TDengine 流式計(jì)算助力吉科軟輕松解決 - TDengine Database 時(shí)序數(shù)據(jù)庫(kù)

TDengine 流式計(jì)算

時(shí)序數(shù)據(jù)通常都是實(shí)時(shí)產(chǎn)生的,需要實(shí)時(shí)存儲(chǔ)和分析,TDengine 作為一款面向時(shí)序數(shù)據(jù)的高性能數(shù)據(jù)庫(kù),對(duì)時(shí)序數(shù)據(jù)的處理正是它的強(qiáng)項(xiàng)。相比于傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù),TDengine 采用了列式存儲(chǔ)和壓縮算法等技術(shù)來(lái)提高數(shù)據(jù)存儲(chǔ)和查詢的效率,從而可以更好地滿足高頻率、高容量、高并發(fā)的數(shù)據(jù)處理需求。在了解 TDengine 的過(guò)程中,我發(fā)現(xiàn)它除了高性能的時(shí)序數(shù)據(jù)庫(kù)功能外,還支持了流式計(jì)算和數(shù)據(jù)訂閱等功能。

使用 TDengine 的流式計(jì)算功能進(jìn)行數(shù)據(jù)處理和分析時(shí),用戶可以按照當(dāng)前流入的數(shù)據(jù)進(jìn)行實(shí)時(shí)計(jì)算,而且當(dāng)離線數(shù)據(jù)到達(dá)后,也可以重新計(jì)算,從而滿足統(tǒng)計(jì)超時(shí)停車(chē)數(shù)據(jù)的需求。具體到我們的業(yè)務(wù)來(lái)說(shuō),可以通過(guò)在 TDengine 中建立超時(shí)停車(chē)數(shù)據(jù)模型,定義超時(shí)停車(chē)的規(guī)則和閾值,并將實(shí)時(shí)收集的軌跡數(shù)據(jù)與之進(jìn)行對(duì)比,從而實(shí)現(xiàn)實(shí)時(shí)預(yù)警和統(tǒng)計(jì)。

運(yùn)輸車(chē)輛超時(shí)停車(chē)預(yù)警難?TDengine 流式計(jì)算助力吉科軟輕松解決 - TDengine Database 時(shí)序數(shù)據(jù)庫(kù)

使用如下代碼創(chuàng)建存儲(chǔ)車(chē)輛軌跡信息表:

運(yùn)輸車(chē)輛超時(shí)停車(chē)預(yù)警難?TDengine 流式計(jì)算助力吉科軟輕松解決 - TDengine Database 時(shí)序數(shù)據(jù)庫(kù)

為了滿足統(tǒng)計(jì)車(chē)輛超時(shí)停車(chē)業(yè)務(wù)展示的相關(guān)需求,我們可以從軌跡開(kāi)始時(shí)間、軌跡結(jié)束時(shí)間、時(shí)長(zhǎng)、最新位置、運(yùn)行狀態(tài)和軌跡點(diǎn)數(shù)等方面對(duì)數(shù)據(jù)進(jìn)行統(tǒng)計(jì)和展示:

  • 軌跡開(kāi)始時(shí)間:記錄車(chē)輛行駛軌跡開(kāi)始的時(shí)間,精確到秒級(jí)別。這個(gè)時(shí)間可以用于計(jì)算車(chē)輛是否存在超時(shí)停車(chē)的情況。
  • 軌跡結(jié)束時(shí)間:記錄車(chē)輛行駛軌跡結(jié)束的時(shí)間,同樣精確到秒級(jí)別,用于計(jì)算車(chē)輛行駛時(shí)長(zhǎng)。
  • 時(shí)長(zhǎng):通過(guò)軌跡開(kāi)始時(shí)間和結(jié)束時(shí)間的計(jì)算,可以得到車(chē)輛行駛軌跡的時(shí)長(zhǎng),以秒為單位,對(duì)于B端客戶非常有用。
  • 最新位置:記錄車(chē)輛最新的位置,可以實(shí)現(xiàn)實(shí)時(shí)跟蹤車(chē)輛位置和行駛狀態(tài)。這個(gè)信息可以在地圖上進(jìn)行展示,幫助客戶更好地了解車(chē)輛的行駛情況。
  • 運(yùn)行狀態(tài):根據(jù)流式計(jì)算技術(shù)實(shí)時(shí)處理的結(jié)果,可以確定車(chē)輛的運(yùn)行狀態(tài),例如停車(chē)或行駛等。這個(gè)信息也可以以圖標(biāo)或顏色等方式在地圖上進(jìn)行展示,方便客戶快速了解車(chē)輛的運(yùn)行情況。
  • 軌跡點(diǎn)數(shù):通過(guò)統(tǒng)計(jì)軌跡經(jīng)過(guò)的點(diǎn)數(shù),可以判斷車(chē)輛的行駛軌跡是否正常。如果軌跡點(diǎn)數(shù)明顯增多,則可能是因?yàn)檐?chē)輛發(fā)生了異常情況,例如線路擁堵等。

實(shí)時(shí)數(shù)據(jù)分析

創(chuàng)建流:

運(yùn)輸車(chē)輛超時(shí)停車(chē)預(yù)警難?TDengine 流式計(jì)算助力吉科軟輕松解決 - TDengine Database 時(shí)序數(shù)據(jù)庫(kù)

插入數(shù)據(jù)(實(shí)時(shí)):

運(yùn)輸車(chē)輛超時(shí)停車(chē)預(yù)警難?TDengine 流式計(jì)算助力吉科軟輕松解決 - TDengine Database 時(shí)序數(shù)據(jù)庫(kù)

插入實(shí)時(shí)數(shù)據(jù),觀察流式計(jì)算結(jié)果select * from overtime_parking_output_stb;,如下:

運(yùn)輸車(chē)輛超時(shí)停車(chē)預(yù)警難?TDengine 流式計(jì)算助力吉科軟輕松解決 - TDengine Database 時(shí)序數(shù)據(jù)庫(kù)

通過(guò)應(yīng)用 TDengine 流式計(jì)算功能,我們可以將行駛和超時(shí)停車(chē)的數(shù)據(jù)分別存儲(chǔ),并記錄對(duì)應(yīng)軌跡和時(shí)長(zhǎng),方便查找和分析正常行駛和超時(shí)停車(chē)的情況。

在車(chē)輛行駛過(guò)程中,TDengine 流式計(jì)算引擎能夠?qū)崟r(shí)判斷車(chē)輛的運(yùn)行狀態(tài),區(qū)分出行駛和停車(chē)的狀態(tài),并將這些數(shù)據(jù)實(shí)時(shí)處理并存儲(chǔ)到不同的數(shù)據(jù)庫(kù)表或者數(shù)據(jù)流中。在數(shù)據(jù)存儲(chǔ)的過(guò)程中,也會(huì)記錄對(duì)應(yīng)軌跡和時(shí)長(zhǎng)等信息,為后續(xù)的數(shù)據(jù)分析提供依據(jù)。

對(duì)于超時(shí)停車(chē)的情況,通過(guò) TDengine 流式計(jì)算可以實(shí)時(shí)監(jiān)控車(chē)輛的運(yùn)行狀態(tài)和位置信息,如果發(fā)現(xiàn)車(chē)輛停留時(shí)間過(guò)長(zhǎng),就可以將其標(biāo)記為超時(shí)停車(chē),并及時(shí)進(jìn)行預(yù)警和管控。同時(shí),利用這一功能,我們也可以通過(guò)對(duì)行駛和停車(chē)數(shù)據(jù)進(jìn)行分析,進(jìn)一步優(yōu)化路線規(guī)劃和運(yùn)營(yíng)管理,提升運(yùn)輸效率和安全性。

離線數(shù)據(jù)分析

插入離線數(shù)據(jù)(實(shí)時(shí)數(shù)據(jù)的中間部分,觀察流式計(jì)算結(jié)果):

運(yùn)輸車(chē)輛超時(shí)停車(chē)預(yù)警難?TDengine 流式計(jì)算助力吉科軟輕松解決 - TDengine Database 時(shí)序數(shù)據(jù)庫(kù)

插入離線數(shù)據(jù),觀察流式計(jì)算結(jié)果select * from overtime_parking_output_stb;,如下:

運(yùn)輸車(chē)輛超時(shí)停車(chē)預(yù)警難?TDengine 流式計(jì)算助力吉科軟輕松解決 - TDengine Database 時(shí)序數(shù)據(jù)庫(kù)

在離線數(shù)據(jù)上傳后,TDengine 流式計(jì)算引擎會(huì)將這些數(shù)據(jù)在對(duì)應(yīng)的時(shí)間點(diǎn)上進(jìn)行數(shù)據(jù)計(jì)算處理,按照數(shù)據(jù)的時(shí)間順序進(jìn)行處理,并且完全滿足軌跡按時(shí)間排序計(jì)算的正常順序,確保不會(huì)出現(xiàn)漏洞或者混亂的情況。這樣一來(lái),離線數(shù)據(jù)與實(shí)時(shí)數(shù)據(jù)就不會(huì)再出現(xiàn)錯(cuò)誤計(jì)算的問(wèn)題,我們也能夠?yàn)?B 端客戶提供更準(zhǔn)確、實(shí)時(shí)、有效的運(yùn)營(yíng)數(shù)據(jù)和報(bào)表。

總之,TDengine 流式計(jì)算功能不僅幫助我們實(shí)現(xiàn)了車(chē)輛行駛數(shù)據(jù)的實(shí)時(shí)處理和分類(lèi),也很好地實(shí)現(xiàn)了運(yùn)輸車(chē)輛超時(shí)停車(chē)預(yù)警,減輕了服務(wù)端的計(jì)算壓力,滿足業(yè)務(wù)需求的同時(shí)幫助我們極大節(jié)省了數(shù)據(jù)處理成本,提高了車(chē)輛的運(yùn)輸效率和安全性。

寫(xiě)在最后

在運(yùn)行 TDengine 過(guò)程中,濤思數(shù)據(jù)團(tuán)隊(duì)始終以客戶需求為導(dǎo)向,為我們提供高效、可靠的數(shù)據(jù)處理和分析服務(wù),滿足了不斷升級(jí)的業(yè)務(wù)需求,我們也非常感謝他們。未來(lái)我們還有計(jì)劃將 TDengine 引入到其他業(yè)務(wù)中進(jìn)行時(shí)序數(shù)據(jù)的處理,在實(shí)踐中推進(jìn)時(shí)序數(shù)據(jù)庫(kù)技術(shù)的發(fā)展,實(shí)現(xiàn)共贏。

]]>
中移物聯(lián)車(chē)聯(lián)網(wǎng)項(xiàng)目,在 TDengine 3.0 的應(yīng)用 http://www.fjzmyy.cn/tdengine-user-cases/18077.html Wed, 21 Jun 2023 03:59:36 +0000 http://www.fjzmyy.cn/?p=18077

小T導(dǎo)讀:在中移物聯(lián)網(wǎng)的智慧出行場(chǎng)景中,需要存儲(chǔ)車(chē)聯(lián)網(wǎng)設(shè)備的軌跡點(diǎn),還要支持對(duì)車(chē)輛軌跡進(jìn)行查詢。為了更好地進(jìn)行數(shù)據(jù)處理,他們?cè)?2021 年上線了 TDengine 2.0 版本的 5 節(jié)點(diǎn) 3 副本集群。 3.0 發(fā)布后,它的眾多特性吸引著中移物聯(lián)網(wǎng)進(jìn)行了大版本升級(jí)。本文詳細(xì)分享了中移物聯(lián)網(wǎng)在 3.0 項(xiàng)目的業(yè)務(wù)實(shí)踐和全新體驗(yàn),以此給大家作參考。

關(guān)于中移物聯(lián)網(wǎng):

中移物聯(lián)網(wǎng)有限公司是中國(guó)移動(dòng)通信集團(tuán)有限公司出資成立的全資子公司。公司按照中國(guó)移動(dòng)整體戰(zhàn)略布局,圍繞“物聯(lián)網(wǎng)業(yè)務(wù)服務(wù)的支撐者、專用模組和芯片的提供者、物聯(lián)網(wǎng)專用產(chǎn)品的推動(dòng)者”的戰(zhàn)略定位,專業(yè)化運(yùn)營(yíng)物聯(lián)網(wǎng)專用網(wǎng)絡(luò),設(shè)計(jì)生產(chǎn)物聯(lián)網(wǎng)專用模組和芯片,打造智慧出行、智能家居、智能穿戴等特色產(chǎn)品,開(kāi)發(fā)運(yùn)營(yíng)物聯(lián)網(wǎng)連接管理平臺(tái) OneLink 和物聯(lián)網(wǎng)開(kāi)放平臺(tái) OneNET,推廣物聯(lián)網(wǎng)解決方案,形成了五大方向業(yè)務(wù)布局和物聯(lián)網(wǎng)“云-網(wǎng)-邊-端 ”全方位的體系架構(gòu)。

業(yè)務(wù)背景:

智慧出行是中移物聯(lián)網(wǎng)的一個(gè)非常典型的場(chǎng)景,我們需要存儲(chǔ)車(chē)聯(lián)網(wǎng)設(shè)備的軌跡點(diǎn),還要支持對(duì)軌跡進(jìn)行查詢。最初我們使用的是 Oracle 小型機(jī)單表分區(qū)存儲(chǔ)數(shù)據(jù),運(yùn)維復(fù)雜不便管理。2017 年,響應(yīng)集團(tuán)去 IOE 的要求,該項(xiàng)目開(kāi)始使用 MySQL 集群。2019 年,產(chǎn)品提出了更高的數(shù)據(jù)存儲(chǔ)需求,我們又開(kāi)始調(diào)研國(guó)產(chǎn)數(shù)據(jù)庫(kù) TiDB,但由于其存儲(chǔ)成本過(guò)高,不適合軌跡存儲(chǔ)這種低價(jià)值的數(shù)據(jù),而且不能解決行業(yè)客戶軌跡數(shù)據(jù)存儲(chǔ)周期定制化的需要,因此我們開(kāi)始繼續(xù)調(diào)研新的存儲(chǔ)方案——國(guó)產(chǎn)開(kāi)源時(shí)序數(shù)據(jù)庫(kù) (Time Series Database)TDengine 就是這個(gè)時(shí)候進(jìn)入了我們的視野。

在調(diào)研中我們發(fā)現(xiàn),智慧出行軌跡數(shù)據(jù)的特點(diǎn)天然適合 TDengine :

  • 高頻寫(xiě)入,每天寫(xiě)入約兩億條軌跡數(shù)據(jù);
  • 低頻查詢,通常是由用戶觸發(fā),查詢最近幾天的軌跡;
  • 企業(yè)用戶有定制軌跡存儲(chǔ)周期的需求;
  • 不針對(duì) OLAP 需求,數(shù)據(jù)價(jià)值密度低。

因此,在經(jīng)歷了嚴(yán)謹(jǐn)?shù)倪x型測(cè)試后,我們最終確定選擇 TDengine 作為新的數(shù)據(jù)存儲(chǔ)引擎。具體選型過(guò)程和項(xiàng)目歷史背景可以參考 2.x 版本的案例《存儲(chǔ)空間降為原來(lái)的1/7,TDengine在中移物聯(lián)網(wǎng)軌跡數(shù)據(jù)存儲(chǔ)中的應(yīng)用》。

改造后系統(tǒng)的整體架構(gòu)如下圖所示:

中移物聯(lián)車(chē)聯(lián)網(wǎng)項(xiàng)目,在 TDengine 3.0 的應(yīng)用 - TDengine Database 時(shí)序數(shù)據(jù)庫(kù)

我們?cè)?nbsp;2021 年上線 TDengine 的 2.4.0.18 的 5 節(jié)點(diǎn) 3 副本集群穩(wěn)定運(yùn)行至今。今年 3.0 發(fā)布后,它的眾多特性十分吸引我們,其中最典型的幾個(gè)包括:

  1. Raft 協(xié)議的引入使 TDengine 擁有了更標(biāo)準(zhǔn)的一致性算法
  2. 存儲(chǔ)引擎的重構(gòu)優(yōu)化了 2.x 版本的設(shè)計(jì)
  3. 查詢靈活度大幅提升,可實(shí)現(xiàn)的需求變得多元化
  4. 支持更強(qiáng)大的流式計(jì)算

因此,盡管 2 – 3 版本底層數(shù)據(jù)文件并不兼容,我們還是自己寫(xiě)了程序把數(shù)據(jù)遷移到了 3.0.2.5 版本,以至于后面官方正式發(fā)布了企業(yè)版遷移工具 taosX 的時(shí)候,我們?cè)缇拖茸咭徊搅恕?/p>

3.0 使用體驗(yàn):

TDengine 3.0 的安裝部署上保留了和 2.0 一樣的簡(jiǎn)單易用模式,升級(jí)操作只需要備份數(shù)據(jù)文件目錄,覆蓋安裝即可,而且寫(xiě)入速度極高,接近硬盤(pán)的連續(xù)寫(xiě)入性能。TDengine 的高效壓縮算法,可以節(jié)省大量存儲(chǔ)空間,SQL 使用也非常簡(jiǎn)單。在此前對(duì) MySQL 方案的替換中,我們的存儲(chǔ)空間降為原來(lái)的 1/7,可以看到,在節(jié)省存儲(chǔ)空間方面,TDengine 的優(yōu)勢(shì)極為明顯。

目前我們共有 102 萬(wàn)張子表,已經(jīng)累積的總數(shù)據(jù)量已經(jīng)達(dá)到了 2000 億行,3 副本,磁盤(pán)占用 3.1TB。在遷移到 TDengine 3.0 之后,各方面的表現(xiàn)依然非常不錯(cuò):業(yè)務(wù)的寫(xiě)入峰值達(dá)到了 1.2-1.3w 行/s ,數(shù)據(jù)遷移的過(guò)程中可以達(dá)到 20w 行/s,這些情況下 TDengine 都可以輕松處理;存儲(chǔ)大約只有 MySQL 的 1/7;讀取數(shù)據(jù)性能也很突出,我們最常用的單設(shè)備單日查詢,可以在 0.1s 內(nèi)返回結(jié)果。

我們當(dāng)前使用的是 3.0.2.5 版本,但是由于業(yè)務(wù)本身不允許停機(jī),所以沒(méi)辦法做離線升級(jí)。因此,后續(xù)會(huì)由 TDengine 企業(yè)版團(tuán)隊(duì)協(xié)助我們?cè)诰€升級(jí)至最新版本(當(dāng)前最新版本為 3.0.5.1)。

建模設(shè)計(jì):

在庫(kù)表設(shè)計(jì)上,我們運(yùn)用了自動(dòng)建表來(lái)寫(xiě)入數(shù)據(jù),每個(gè)終端設(shè)備產(chǎn)生的軌跡點(diǎn)位數(shù)據(jù)在第一次入庫(kù)的時(shí)候自動(dòng)創(chuàng)建子表,這樣只需要建一個(gè) database 和業(yè)務(wù)需求的超級(jí)表就可以了,省掉了數(shù)據(jù)入庫(kù)時(shí)的校驗(yàn)和建表操作。

值得一提的是,在 2.x 時(shí)代,元數(shù)據(jù)是在管理節(jié)點(diǎn)上集中存儲(chǔ)的,因此在當(dāng)時(shí)的版本中,自動(dòng)建表的速度會(huì)受到單線程工作能力的制約,當(dāng)時(shí)大概最高每秒只能創(chuàng)建 6000 個(gè)子表左右,不過(guò)當(dāng)時(shí)我們也沒(méi)有這么高的建表頻率所以也沒(méi)有受到太大影響。經(jīng)過(guò)重構(gòu)之后,3.0 的元數(shù)據(jù)已經(jīng)完全做到了分布式存儲(chǔ),所有 vnode 都會(huì)獨(dú)立存儲(chǔ)自己表的元數(shù)據(jù)并處理寫(xiě)入操作,所以自動(dòng)建表的寫(xiě)入效率已經(jīng)大幅增加。

我們的超級(jí)表建表語(yǔ)句如下,可以給大家參考:

1.車(chē)輛歷史狀態(tài)、位置:

create stable device_statushis (pos_time TIMESTAMP,sample_time TIMESTAMP,record_time TIMESTAMP,online_status SMALLIN
T,alarm_status SMALLINT,pos_method SMALLINT,pos_precision SMALLINT,pos_longitude DOUBLE,pos_latitude DOUBLE,pos_altitude D
OUBLE,pos_speed FLOAT,pos_direction FLOAT,acc_forward FLOAT,acc_side FLOAT,acc_verticle FLOAT,rollover_level SMALLINT,powe
r_voltage FLOAT,acc_status SMALLINT,satellite_num SMALLINT) tags(device_id BINARY(32)) ;

2.車(chē)輛事件:四急( 急加速  急減速 急剎車(chē)  急轉(zhuǎn)彎)

CREATE STABLE `emg_info` (`pos_time` TIMESTAMP, `sample_time` TIMESTAMP, `record_time` TIMESTAMP, `duration` SMALLINT, `mid_interval` SMALLINT, `mid_number` SMALLINT, `pre_number` SMALLINT, `pre_interval` SMALLINT, `start_time` TIMESTAMP, `end_time` TIMESTAMP, `start_lat` DOUBLE, `end_lat` DOUBLE, `start_lng` DOUBLE, `end_lng` DOUBLE, `event_type` SMALLINT, `sample_info` NCHAR(2048), `parameter_type` NCHAR(10)) TAGS (`device_id` VARCHAR(32), `app_code` NCHAR(32));

3.GPS 信息:

CREATE STABLE `gps_info` (`pos_time` TIMESTAMP, `sample_time` TIMESTAMP, `record_time` TIMESTAMP, `online_status` SMALLINT, `alarm_status` SMALLINT, `pos_method` SMALLINT, `pos_precision` SMALLINT, `pos_longitude` DOUBLE, `pos_latitude` DOUBLE, `pos_altitude` DOUBLE, `pos_speed` FLOAT, `pos_direction` FLOAT, `acc_forward` FLOAT, `acc_side` FLOAT, `acc_verticle` FLOAT, `rollover_level` SMALLINT, `power_voltage` FLOAT, `acc_status` SMALLINT, `satellite_num` SMALLINT) TAGS (`device_id` VARCHAR(32), `app_code` NCHAR(32), `device_hash` INT);

4. 汽車(chē)總線數(shù)據(jù):

CREATE STABLE `can_info` (`pos_time` TIMESTAMP, `sample_time` TIMESTAMP, `record_time` TIMESTAMP, `gas_pedal_position` FLOAT, `spark_angle` FLOAT, `total_fuel_consumption` INT, `storage_battery_voltage` FLOAT, `latest_engine_runtime` INT, `fuel_pressure` INT, `distance_after_mil` INT, `long_term_fuel_trim` FLOAT, `engine_rpm` INT, `intake_manifold_pressure` SMALLINT, `distance_total` INT, `engine_inlet_port_temp` SMALLINT, `calcu_load` TINYINT, `vehicle_speed` SMALLINT, `fuel_type` NCHAR(30), `area_code` INT) TAGS (`device_id` VARCHAR(32), `app_code` NCHAR(32));

在應(yīng)用層,由于我們存儲(chǔ)的數(shù)據(jù)是車(chē)輛軌跡數(shù)據(jù),因此會(huì)做很多關(guān)于車(chē)輛軌跡數(shù)據(jù)的分析,比如:熱點(diǎn)路線、軌跡段數(shù)據(jù)、停留點(diǎn)、行駛事件(急轉(zhuǎn)彎、急加速、急減速、車(chē)輛其它信息),但由于 TDengine 一直以來(lái)都是時(shí)序數(shù)據(jù)庫(kù),并沒(méi)有地理信息相關(guān)的計(jì)算函數(shù),所以在這塊我們自己寫(xiě)了很多函數(shù),通過(guò) Spark 的 RDD 來(lái)進(jìn)行了計(jì)算分析,最后再把分析后的數(shù)據(jù)返回給客戶端。

未來(lái)展望:

目前 TDengine 能夠很好地解決我們的需求,尤其是強(qiáng)大的存取能力是我們最滿意的地方。但近期我從官方人員處得知,從即將于 7 月份發(fā)布的 3.0.6.0 版本開(kāi)始,TDengine 將提供全新的數(shù)據(jù)類(lèi)型 geometry 用于點(diǎn)線面等幾何類(lèi)型的存儲(chǔ),并且會(huì)逐步提供一套符合 OGC(Open Geospatial Consortium) 標(biāo)準(zhǔn)的 SQL 函數(shù),包括幾何輸入輸出、空間關(guān)系、幾何測(cè)量、集合操作和幾何處理等等。

其實(shí)通過(guò)我們觀察,還是有很多車(chē)聯(lián)網(wǎng)用戶對(duì)于軌跡分析有使用需求,如果 TDengine 可以完整支持到空間數(shù)據(jù)的處理,這樣我們的系統(tǒng)架構(gòu)將會(huì)進(jìn)一步簡(jiǎn)化,連 Spark 都可以不用了,這就可以說(shuō)是完全意義上地使用了 All in one 的時(shí)序數(shù)據(jù)處理引擎。

可惜的是,目前由于我們歷史數(shù)據(jù)的經(jīng)緯度都是通過(guò)單獨(dú)列來(lái)存儲(chǔ)的,對(duì)于 Geometry 帶來(lái)的全新數(shù)據(jù)類(lèi)型,我們龐大的歷史數(shù)據(jù)量和應(yīng)用層是很難快速調(diào)整的,所以只能在測(cè)試環(huán)境應(yīng)用,先逐漸試用起來(lái)。

最后,祝 TDengine 越來(lái)越好,最終成為時(shí)序數(shù)據(jù)庫(kù)的事實(shí)標(biāo)準(zhǔn)。

作者介紹: 薛超,中移物聯(lián)網(wǎng)數(shù)據(jù)庫(kù)運(yùn)維高級(jí)工程師,10 年數(shù)據(jù)庫(kù)運(yùn)維經(jīng)歷,2017 年加入中移物聯(lián)網(wǎng),負(fù)責(zé)智能硬件產(chǎn)品部數(shù)據(jù)庫(kù)相關(guān)工作,專注于數(shù)據(jù)庫(kù)優(yōu)化和推動(dòng)架構(gòu)演進(jìn);近年來(lái)主要研究國(guó)產(chǎn)新型數(shù)據(jù)庫(kù),目前所在部門(mén)全部業(yè)務(wù)已經(jīng)去“O”,在此過(guò)程中,積累了大量新型數(shù)據(jù)庫(kù)的運(yùn)維經(jīng)驗(yàn)。

]]>
時(shí)序數(shù)據(jù)庫(kù) TDengine 3.0 相比于 2.0 版本,有哪些亮點(diǎn)?為什么建議盡快升級(jí) TDengine 3.0? http://www.fjzmyy.cn/tdengine-tsdb/17545.html Sun, 19 Feb 2023 08:35:00 +0000 http://www.fjzmyy.cn/?p=17545 TDengine 是一個(gè)專為物聯(lián)網(wǎng)、車(chē)聯(lián)網(wǎng)、運(yùn)維監(jiān)測(cè)等場(chǎng)景設(shè)計(jì)的時(shí)序數(shù)據(jù)庫(kù)(Time Series Database,TSDB),它具有高性能、高可靠、高可用、低成本等特點(diǎn)。TDengine 于 2022 年 8 月發(fā)布了 3.0 版本,相比于 2.0 版本,有哪些區(qū)別和改進(jìn)呢?本文將簡(jiǎn)單介紹 TDengine 2.0 和 3.0 的主要區(qū)別,以及從 2.0 升級(jí)到 3.0 的好處。

TDengine 2.0 和 3.0 的主要區(qū)別可以從以下幾個(gè)方面來(lái)看:

  • 存儲(chǔ)引擎:TDengine 3.0 對(duì)底層的存儲(chǔ)引擎進(jìn)行了大規(guī)模的優(yōu)化和重構(gòu)。更注重各種場(chǎng)景下的存儲(chǔ)和查詢效率,不僅要對(duì)管理節(jié)點(diǎn)進(jìn)一步“減負(fù)”,提供高效合理的更新、刪除功能,支持?jǐn)?shù)據(jù)備份、流式處理等功能,還要考慮到數(shù)據(jù)維度膨脹下的高效處理、多表場(chǎng)景下的開(kāi)機(jī)啟動(dòng)速度、合理高效且準(zhǔn)確地使用系統(tǒng)資源等需求,詳見(jiàn)《支持消息隊(duì)列和流式計(jì)算背后,TDengine 3.0 存儲(chǔ)引擎的優(yōu)化與升級(jí)
  • 分布式架構(gòu):TDengine 3.0 完成了分布式系統(tǒng)架構(gòu)的迭代,集群支持 10 億條以上的時(shí)間線、100 臺(tái)服務(wù)器節(jié)點(diǎn),成為一款真正的云原生時(shí)序數(shù)據(jù)庫(kù),具有極強(qiáng)的彈性伸縮能力,詳見(jiàn)《支持 10 億個(gè)設(shè)備、100 臺(tái)服務(wù)器節(jié)點(diǎn),TDengine 3.0 架構(gòu)詳解
  • 數(shù)據(jù)訂閱:TDengine 3.0 重構(gòu)并優(yōu)化了數(shù)據(jù)訂閱功能,在 TDengine 3.0 中,既可以訂閱一個(gè)數(shù)據(jù)庫(kù),也可以訂閱一個(gè)自帶標(biāo)簽的“超級(jí)表”,訂閱完成后無(wú)需再拿到應(yīng)用端去過(guò)濾,極大提升了數(shù)據(jù)傳輸?shù)男?,詳?jiàn)《數(shù)據(jù)訂閱》。
  • 流計(jì)算:TDengine 3.0支持事件驅(qū)動(dòng)的流計(jì)算。從方便用戶使用的角度出發(fā),TDengine 的流計(jì)算語(yǔ)法就是 SQL,里面做了 windows 等擴(kuò)展,可以在數(shù)據(jù)寫(xiě)入時(shí)觸發(fā),也可以在窗口結(jié)束觸發(fā),詳見(jiàn)《流式計(jì)算》。
  • TDengine Cloud:基于 TDengine 3.0,誕生了全托管的時(shí)序數(shù)據(jù)管理云服務(wù)平臺(tái) TDengine Cloud,提供安全可靠的企業(yè)級(jí)服務(wù)。點(diǎn)擊這里,注冊(cè)體驗(yàn)。
  • 周邊生態(tài):TDengine 3.0 對(duì)周邊生態(tài)進(jìn)行了豐富和完善,支持了更多的可視化工具和平臺(tái),詳見(jiàn)《第三方工具》。

從 2.0 升級(jí)到 3.0 的好處主要有以下幾點(diǎn):

  • 提升了數(shù)據(jù)處理的性能和效率,降低了存儲(chǔ)空間和資源消耗。
  • 簡(jiǎn)化了集群管理和運(yùn)維的復(fù)雜度,提高了系統(tǒng)的可靠性和可用性。
  • 增加了數(shù)據(jù)寫(xiě)入和查詢的靈活性和多樣性,滿足了不同場(chǎng)景和需求的用戶。
  • 擴(kuò)展了周邊生態(tài)的兼容性和覆蓋度,增強(qiáng)了與其他系統(tǒng)和平臺(tái)的集成能力。

點(diǎn)擊這里,下載最新安裝包,升級(jí) TDengine 3.0。

]]>
中通科技是如何建模并高效處理車(chē)輛上的時(shí)序數(shù)據(jù)的 http://www.fjzmyy.cn/tdengine-user-cases/14207.html Thu, 15 Sep 2022 08:00:28 +0000 http://www.fjzmyy.cn/?p=14207

小 T 導(dǎo)讀:車(chē)聯(lián)網(wǎng)業(yè)務(wù)是中通科技配送全鏈路業(yè)務(wù)中非常重要的一環(huán),在實(shí)際的項(xiàng)目需求中,需要實(shí)時(shí)查詢車(chē)輛最新位置狀態(tài),達(dá)到車(chē)輛運(yùn)營(yíng)可視化管理。中智車(chē)聯(lián)服務(wù)平臺(tái)選擇了用 TDengine 來(lái)高效處理從車(chē)輛上實(shí)時(shí)采集的時(shí)序數(shù)據(jù)。

業(yè)務(wù)背景

目前,中通科技擁有一支千人規(guī)模的研發(fā)團(tuán)隊(duì),在數(shù)字信息科技研發(fā)方面以“互聯(lián)網(wǎng)+物流”的理念,自研的軟件系統(tǒng)和數(shù)字化工具已達(dá)百余個(gè),賦能覆蓋快遞業(yè)務(wù)全場(chǎng)景,同時(shí)為快運(yùn)、國(guó)際、云倉(cāng)、優(yōu)選、金融、商業(yè)等生態(tài)圈業(yè)務(wù)提供全方位的研發(fā)支持,建立起完善的互聯(lián)網(wǎng)產(chǎn)品研發(fā)體系,全場(chǎng)景、全鏈路的數(shù)字化、互聯(lián)化和智能化的業(yè)務(wù)地圖愈發(fā)成熟。

2021 年年底,中通快遞已完成了總部園區(qū)的實(shí)景三維模型,通過(guò)接入園區(qū)內(nèi)的在線傳感器,根據(jù)現(xiàn)有園區(qū)各功能區(qū)的區(qū)位布局,基于此三維模型開(kāi)展園區(qū)內(nèi)生產(chǎn)規(guī)劃、調(diào)度運(yùn)行和維護(hù)管理的全過(guò)程應(yīng)用,從而實(shí)現(xiàn)園區(qū)內(nèi)人、車(chē)、物在精準(zhǔn)運(yùn)行、資源優(yōu)化和配置服務(wù)中的全過(guò)程精益化管理。

隨著生產(chǎn)設(shè)備的小型化和智能化,快遞企業(yè)也將更快地進(jìn)入空間地理信息數(shù)據(jù)生產(chǎn)領(lǐng)域,有包裹流動(dòng)的地方,就會(huì)有時(shí)空數(shù)據(jù)服務(wù)的需求。

這里先給大家介紹一下配送全鏈路業(yè)務(wù),這是指包裹從商家倉(cāng)出來(lái)一直到用戶手上的這段派送履約鏈路,它包含 4 個(gè)主要的實(shí)操流程,分別是分撥實(shí)操、運(yùn)輸實(shí)操、站點(diǎn)實(shí)操和快遞員實(shí)操。把 4 種實(shí)操管理放到三個(gè)系統(tǒng)里面,這三個(gè)系統(tǒng)分別是分撥管理、運(yùn)輸管理、末端站點(diǎn)實(shí)操管理。具體如下圖所示。

TDengine Database

其中車(chē)聯(lián)網(wǎng)業(yè)務(wù)也是非常重要的一環(huán),通過(guò)人、車(chē)、貨、場(chǎng)全鏈條覆蓋的車(chē)聯(lián)網(wǎng)設(shè)備應(yīng)用,實(shí)現(xiàn)物流運(yùn)輸全鏈路感知。在實(shí)際的項(xiàng)目需求中,我們需要實(shí)時(shí)查詢車(chē)輛最新位置狀態(tài),達(dá)到車(chē)輛運(yùn)營(yíng)可視化管理,也就是我們的中智車(chē)聯(lián)服務(wù)平臺(tái)。

技術(shù)選型

在上述業(yè)務(wù)過(guò)程中,我們使用了 TDengine 來(lái)完成這個(gè)目標(biāo)。

在選型時(shí),我們對(duì)比了 Prometheus 和 TDengine 這兩款很有代表性的時(shí)序數(shù)據(jù)庫(kù)(Time Series Database)。 相對(duì)而言,TDengine 的“一個(gè)設(shè)備采集點(diǎn)一張表”的底層設(shè)計(jì),自帶的降采樣和窗口函數(shù)的優(yōu)秀性能,都十分契合車(chē)輛網(wǎng)場(chǎng)景。其列式存儲(chǔ)帶來(lái)的壓縮比也更好。所以我們選擇了 TDengine。

技術(shù)架構(gòu)

我們?cè)诿枯v車(chē)上都安裝了部標(biāo)機(jī)(即衛(wèi)星定位汽車(chē)行駛記錄儀),來(lái)實(shí)時(shí)采集車(chē)輛的行駛速度、時(shí)間、里程以及與車(chē)輛行駛相關(guān)的其他狀態(tài)信息。采集到的數(shù)據(jù),通過(guò)我們的 IoT service 這層應(yīng)用來(lái)處理。然后數(shù)據(jù)經(jīng)由 MQ (消息隊(duì)列)層由 JDBC-RESTful 的方式寫(xiě)入 TDengine 集群,以供上游平臺(tái)使用,而部標(biāo)機(jī)產(chǎn)生的其他類(lèi)數(shù)據(jù)則通過(guò)別的途徑供上游平臺(tái)使用。

TDengine Database

我們使用了三節(jié)點(diǎn)三副本的模式落地了 TDengine 集群。 

TDengine Database

建表很簡(jiǎn)單,我們選擇了一類(lèi)數(shù)據(jù)對(duì)應(yīng)一張超級(jí)表,超級(jí)表下根據(jù)車(chē)牌號(hào)劃分子表,表結(jié)構(gòu)如下圖所示。目前還是項(xiàng)目初期,所以只接入了 700 余輛車(chē),后續(xù)會(huì)逐步增加接入車(chē)輛。也正因?yàn)檫@套環(huán)境接入設(shè)備不多,寫(xiě)入方面并無(wú)壓力,遠(yuǎn)遠(yuǎn)達(dá)不到 TDengine 的寫(xiě)入極限。

TDengine Database

具體應(yīng)用

我們要通過(guò)數(shù)據(jù)的變化來(lái)實(shí)時(shí)得到車(chē)輛的很多信息,比如是否有停留、超速、緩行、離線等事件發(fā)生。有些功能可以通過(guò) TDengine 的查詢功能實(shí)現(xiàn),有些不方便實(shí)現(xiàn)的暫時(shí)通過(guò)應(yīng)用來(lái)完成。

下面我們通過(guò)幾個(gè)例子來(lái)看看目前業(yè)務(wù)中使用比較頻繁的查詢:

1.獲取車(chē)輛的最新位置

SQL 語(yǔ)句如下。

select  last_row(longitude,latitude),deviceId   from ioc_gps.vehicle_location groupby deviceId  where device_id = #{deviceId}  and ts >= #{startTime} and ts <= #{endTime}

業(yè)務(wù)需要快速查詢每輛車(chē)的最新坐標(biāo),這里用到了 TDengine 提供的 last_row 函數(shù)。除了查詢單獨(dú)某輛車(chē),經(jīng)常還會(huì)根據(jù) groupId 或者一批 deviceId 去查詢一批車(chē)輛的最新坐標(biāo)。

系統(tǒng)界面如下圖所示。

TDengine Database

2. 車(chē)查軌跡信息查詢:

select ts,device_id as deviceId,longitude,latitude,altitude,speed as speed,direction,alarm as warnBit,status as statusBit,mobile,mileage,speed2,rssi,satellites,signal_status as signalStatus,gmt_create as gmtCreate,create_ip as createIp,kind,oil,message_id as messageId,device_name as deviceName,plate,device_group_id as deviceGroupId,device_group_name as deviceGroupName,acc, device_code as deviceCode
        from ioc_gps.vehicle_location
        where device_id = #{deviceId}
          and ts >= #{startTime}
          and ts <= #{endTime}

通過(guò)指定時(shí)間范圍和具體的車(chē)牌號(hào),就可以立刻獲得該車(chē)輛的軌跡數(shù)據(jù)并渲染出軌跡圖像。如果知道子表名的話,還可以直接查詢子表,這樣會(huì)減少超級(jí)表中對(duì)于標(biāo)簽的檢索。

系統(tǒng)界面如下圖所示。

TDengine Database

未來(lái)規(guī)劃

通過(guò)項(xiàng)目初期的表現(xiàn),可以知道 TDengine 能夠輕松滿足我們的業(yè)務(wù)需求。未來(lái)我們還有其他的使用規(guī)劃,比如在我們的表字段中,有個(gè) ACC 字段,1 表示點(diǎn)火,0 表示熄火,要求能夠計(jì)算點(diǎn)火駕駛行程,由于 TDengine 當(dāng)前還沒(méi)有直接支持 GIS 計(jì)算,暫時(shí)不能通過(guò)坐標(biāo)算出直線距離(當(dāng)前所用的 TDengine 2.0 版本可能需要使用自定義的 UDF 實(shí)現(xiàn)),但是應(yīng)該可以通過(guò)狀態(tài)窗口+加權(quán)平均速度+開(kāi)火時(shí)間算出車(chē)輛每次點(diǎn)火的駕駛路程,就想這樣:

select time*speed from (select elapsed(ts,1s)as time,twa(speed) as speed,acc from t1 state_window(acc)) where acc =1  ;

而每次 ACC 開(kāi)火熄火的起始點(diǎn)和結(jié)束點(diǎn)信息,可以通過(guò) state_window 配合 first/last 函數(shù)來(lái)實(shí)現(xiàn),比如:

select last(*),first(*) from t2 state_window(charge);

除此之外,我們也需要電子圍欄計(jì)算,需要快速計(jì)算新軌跡點(diǎn)是否進(jìn)入某電子圍欄之中,或者需要快速計(jì)算(1s 內(nèi))位于某行政區(qū)劃(省份/城市)邊界內(nèi)的所有車(chē)輛的數(shù)量。這類(lèi)查詢都需要等 TDengine 繼續(xù)完善才能實(shí)現(xiàn)。

后續(xù)我們接入的車(chē)輛會(huì)達(dá)到幾萬(wàn)輛,對(duì)于部標(biāo)機(jī)產(chǎn)生的相關(guān)時(shí)序數(shù)據(jù)的使用也會(huì)越來(lái)越多。期待 TDengine 可以繼續(xù)為車(chē)聯(lián)網(wǎng)場(chǎng)景下的查詢提供更為多樣性的支持,產(chǎn)品越來(lái)越好。

]]>
數(shù)百億數(shù)據(jù)壓縮至 600GB,TDengine 落地協(xié)鑫能科移動(dòng)能源數(shù)據(jù)平臺(tái) http://www.fjzmyy.cn/tdengine-user-cases/12611.html Fri, 15 Jul 2022 08:27:32 +0000 http://www.fjzmyy.cn/?p=12611 作者 | 溫金雄、彭濤、周玉峰

小 T 導(dǎo)讀:為了解決廣大新能源汽車(chē)車(chē)主面臨的充電效率問(wèn)題,協(xié)鑫能科打造了以換電為核心業(yè)務(wù)的移動(dòng)能源品牌「協(xié)鑫電港」,需要對(duì)各種數(shù)據(jù)流進(jìn)行科學(xué)管理、合理運(yùn)用與智能調(diào)度,在數(shù)據(jù)庫(kù)的選擇上尤為重要。本文分享了他們對(duì)于數(shù)據(jù)庫(kù)架構(gòu)的搭建思考以及 TDengine 的應(yīng)用心得。

企業(yè)簡(jiǎn)介

協(xié)鑫能源科技股份有限公司(證券簡(jiǎn)稱:協(xié)鑫能科 002015.SZ) 系協(xié)鑫(集團(tuán))控股有限公司旗下企業(yè),主營(yíng)業(yè)務(wù)為清潔能源運(yùn)營(yíng)、移動(dòng)能源運(yùn)營(yíng)以及綜合能源服務(wù)。公司傾力打造從清潔能源生產(chǎn)、補(bǔ)能服務(wù)到儲(chǔ)能的便捷、經(jīng)濟(jì)、綠色的出行生態(tài)圈,為電動(dòng)化出行提供一體化能源解決方案,致力于成為領(lǐng)先的移動(dòng)數(shù)字能源科技運(yùn)營(yíng)商。

1、業(yè)務(wù)痛點(diǎn)

隨著新能源汽車(chē)的廣泛普及,補(bǔ)能的效率問(wèn)題逐漸成為了廣大車(chē)主面臨的痛點(diǎn)難題。為了解決此難題,作為一家頭部的新能源公司,協(xié)鑫能科創(chuàng)新突破,切入能源服務(wù)領(lǐng)域,打造了以換電為核心業(yè)務(wù)的移動(dòng)能源解決方案品牌「協(xié)鑫電港」。

由于這是一個(gè)在全新領(lǐng)域中打造的全新項(xiàng)目,想要獲得成功,需要對(duì)各種數(shù)據(jù)流進(jìn)行科學(xué)管理、合理運(yùn)用與智能調(diào)度,所以針對(duì)該場(chǎng)景,我們一開(kāi)始便把量級(jí)最大的物聯(lián)網(wǎng)數(shù)據(jù)處理方案鎖定在了時(shí)序數(shù)據(jù)庫(kù)(Time Series Database)上,重點(diǎn)對(duì)比了 InfluxDB、OpenTSDB 以及 TDengine。

最終,TDengine 以其獨(dú)特而科學(xué)的設(shè)計(jì)和優(yōu)秀的測(cè)試表現(xiàn)成為我們選中的時(shí)序數(shù)據(jù)處理引擎,承擔(dān)了用戶車(chē)輛數(shù)據(jù)、電池設(shè)備數(shù)據(jù)以及換電港工作設(shè)備等的海量數(shù)據(jù)存儲(chǔ)分析任務(wù),為我們解決了該項(xiàng)目上難度最大的一個(gè)環(huán)節(jié)。最終,我們決定使用 TDengine 2.4.0.10 版本,并在電信的天翼云上落地了該項(xiàng)目。

2、架構(gòu)與搭建

從流量削峰以及數(shù)據(jù)安全的角度出發(fā),我們會(huì)先通過(guò)使用某 MQTT 消息服務(wù)器把這些不同種類(lèi)的設(shè)備數(shù)據(jù)先統(tǒng)一轉(zhuǎn)發(fā)給到 Kafka。其中不同類(lèi)型的數(shù)據(jù),將會(huì)分別上傳到不同的 Kafka topic,最后再通過(guò) Java 連接器把數(shù)據(jù)寫(xiě)入 TDengine。具體架構(gòu)如下圖所示:

TDengine Database

在整體架構(gòu)上,除了 TDengine,也有一些其它數(shù)據(jù)庫(kù)共同支持系統(tǒng)服務(wù),其中 MySQL 負(fù)責(zé)存儲(chǔ)訂單、流水等需要精細(xì)查詢的關(guān)系型數(shù)據(jù),但由于 MySQL 可以承受的數(shù)據(jù)量比較有限,為了做一些大表的連接查詢,因此我們也接入了 TiDB,負(fù)責(zé)分析報(bào)表類(lèi)數(shù)據(jù)的存儲(chǔ)。

目前接入 TDengine 最主要的入庫(kù)數(shù)據(jù)是車(chē)輛傳感器(如:車(chē)輛里程、經(jīng)緯度等)以及換電站電池相關(guān)的傳感器(電池的各種指標(biāo))數(shù)據(jù)。當(dāng)前共有 55 張超級(jí)表,子表數(shù)量達(dá)到 11 萬(wàn)張。

我們當(dāng)前在 TDengine、TiDB、MySQL 中存儲(chǔ)的數(shù)據(jù)量比例大概為 6:3:1,僅僅使用了三臺(tái) 4C+16G 的服務(wù)器,TDengine 便挑起了整個(gè)系統(tǒng)數(shù)據(jù)存儲(chǔ)的大頭,輕松支撐起了我們的服務(wù)。在數(shù)據(jù)庫(kù)的選擇上,我們一直認(rèn)為不同數(shù)據(jù)庫(kù)之間術(shù)業(yè)有專攻,不得不承認(rèn),TDengine 在存儲(chǔ)引擎上的獨(dú)特設(shè)計(jì),在降低成本方面的效果十分顯著。 

TDengine Database

對(duì)于 TDengine,我們一開(kāi)始使用的是單節(jié)點(diǎn),在穩(wěn)定運(yùn)營(yíng)了幾個(gè)月后,于今年 3 月完成了動(dòng)態(tài)擴(kuò)容,發(fā)展到了 3 節(jié)點(diǎn)集群模式,把數(shù)據(jù)庫(kù)也升級(jí)到了三副本(從圖中可以看出來(lái))。

TDengine 的動(dòng)態(tài)擴(kuò)展非常方便,只要確保一些必要的參數(shù)保持一致,就可以直接通過(guò) “create dnode”把新的計(jì)算資源加進(jìn)來(lái)。加入后,再通過(guò) “alter database iot replica 3” 這個(gè)命令,即可直接在線令數(shù)據(jù)庫(kù)變?yōu)?nbsp;3 副本,從而實(shí)現(xiàn)數(shù)據(jù)的備份及高可用。 

TDengine Database
TDengine Database

3、效果分析

當(dāng)前,我們?cè)?nbsp;TDengine 中一共存儲(chǔ)了數(shù)百億級(jí)別的數(shù)據(jù)量(由于表結(jié)構(gòu)各異,不方便統(tǒng)計(jì),不在本篇文章中展示),存儲(chǔ)空間大概占用 600GB 左右(200GB*3),CPU 日常使用為 15% 左右,內(nèi)存使用在 20% 左右。

TDengine Database

在查詢方面,在此列舉一些我們常用的 SQL,TDengine 的響應(yīng)速度都很快,完全可以滿足我們的需求:

select max(pmk)-min(pmk) from aodong_109 where sid='P42100001' and sd=0 and ts>'2021-12-01 00:00:00'
TDengine Database
TDengine Database
select last(sv),last(st) from aodong_112 where bn='001PB0GM000002B3L0300067';
TDengine Database
TDengine Database

4、關(guān)于 TDengine 的一些思考

由于我們業(yè)務(wù)是 24*7 不間斷運(yùn)轉(zhuǎn) ,所以沒(méi)有時(shí)間做版本升級(jí)。我們首先計(jì)劃抽出時(shí)間把 TDengine 版本升級(jí)到比較新的版本,再做一些碎片重組壓縮的工作來(lái)加強(qiáng)查詢效率。此外,我們還計(jì)劃使用 Flink 從 TDengine 中讀取數(shù)據(jù)做流式計(jì)算(看到了官方發(fā)布了 Flink 適配 TDengine 的文章)。

隨著業(yè)務(wù)快速增長(zhǎng),TDengine 集群存儲(chǔ)的數(shù)據(jù)量也會(huì)越來(lái)越大,而數(shù)據(jù)又需要長(zhǎng)期保留,大數(shù)據(jù)量的運(yùn)維對(duì)于 TDengine 來(lái)說(shuō)將是一個(gè)巨大的挑戰(zhàn)。伴隨數(shù)據(jù)量級(jí)的增長(zhǎng),備份、遷移、庫(kù)、表的運(yùn)維都會(huì)受到影響,也有可能遇到我們之前沒(méi)有經(jīng)歷過(guò)的問(wèn)題,這就需要 TDengine 集群實(shí)現(xiàn)升級(jí)、擴(kuò)展、拆分、維護(hù)等運(yùn)維操作。未來(lái)我們希望能積累更多的經(jīng)驗(yàn)分享給社區(qū),讓更多的人了解 TDengine。

對(duì)于 TDengine 未來(lái)的發(fā)展,我們也有自己的期待:

  • 希望能增加動(dòng)態(tài)修改參數(shù)功能,減少停機(jī)維護(hù)次數(shù)。
  • 實(shí)現(xiàn)類(lèi)似慢 SQL 日志功能,降低高負(fù)載、調(diào)優(yōu)事后分析定位、回溯故障原因。
  • 進(jìn)一步權(quán)衡 udp 帶來(lái)的好處和導(dǎo)致的各種問(wèn)題。我們經(jīng)常連接報(bào)錯(cuò) Ref is not there ,目前來(lái)看在客戶端添加 rpcForceTcp 1  應(yīng)該是有效的。
  • 增強(qiáng)報(bào)錯(cuò)信息可讀性,很多報(bào)錯(cuò)提示不夠明確,無(wú)法快速判斷出具體原因。

總而言之,希望 TDengine 后面越來(lái)越好,也希望我們的合作能更上一層樓。

]]>
济阳县| 新龙县| 遵化市| 海阳市| 龙井市| 广元市| 镇巴县| 台北县| 河间市| 乾安县| 荔浦县| 镇平县| 修武县| 遂溪县| 图木舒克市| 昆明市| 太仓市| 彰化县| 沂南县| 任丘市| 汶上县| 新竹县| 东平县| 田阳县| 墨脱县| 岫岩| 句容市| 会东县| 固原市| 育儿| 曲阳县| 丰城市| 周宁县| 惠州市| 商河县| 固安县| 湖南省| 长海县| 乌苏市| 许昌县| 林周县|