六月婷婷AV,国产偷窥猎奇福利二区,日韩三级片。,好吊色网站,日韩成人中文在线视频,国产亚洲午夜啪啪,亚洲欧美另类国产精品,国产成人av1,任你艹在线观看

中移物聯(lián)車(chē)聯(lián)網(wǎng)項(xiàng)目,在 TDengine 3.0 的應(yīng)用

China Mobile IoT Chao Xue

2023-06-21 /

小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ù)類型 geometry 用于點(diǎn)線面等幾何類型的存儲(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ù)類型,我們龐大的歷史數(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)。