无码人妻精品一区二区三18禁,影音先锋男人AV橹橹色,污污污污污污www网站免费,日韩成人av无码一区二区三区,欧美性受xxxx狂喷水

TDengine 在“一圖一庫”中的應用,助力交通運輸實現信息化轉型

金海樂游軟件 王揚

2022-03-23 / ,

小 T 導讀:在(zai)某大交通數據(ju)資源(yuan)管理系統及相關應用(yong)“一圖(tu)一庫”的(de)(de)建設中,存(cun)在(zai)大量(liang)的(de)(de)時序(xu)(xu)數據(ju)應用(yong)場景,其中最(zui)為關鍵(jian)的(de)(de)就是車輛運行產生的(de)(de)時序(xu)(xu)數據(ju)的(de)(de)存(cun)儲與使用(yong),在(zai)選型(xing)調研后決定采(cai)用(yong) TDengine Database。本文詳細匯總了關于集群架(jia)構落地(di)、寫入查(cha)詢效(xiao)果的(de)(de)相關經驗(yan)及建議。

公司簡介

北京金海樂游軟件(jian)有限公司是一家(jia)以計算(suan)機軟件(jian)架(jia)構開發(fa)(fa)為(wei)核心,實施計算(suan)機軟硬件(jian)系統(tong)(tong)集(ji)成的現(xian)代科技(ji)企業。公司從事交(jiao)通運(yun)輸行業系統(tong)(tong)軟件(jian)研(yan)發(fa)(fa),技(ji)術(shu)覆(fu)蓋且(qie)不限于 Java Spring 框架(jia)(可選技(ji)術(shu)框架(jia):C/C++、Python、Go)行業業務邏輯實現(xian)、TransCAD\TransModeler\超圖\Arcgis 等商(shang)業軟件(jian)的二次(ci)開發(fa)(fa)和算(suan)法實現(xian)、大數(shu)(shu)據分析及數(shu)(shu)據中(zhong)臺(tai)、 交(jiao)通資產(chan)管理(li)。

一、項目背景

為了強化全市交(jiao)通(tong)運輸(shu)管理(li)、統(tong)籌綜合(he)交(jiao)通(tong)發展、提升交(jiao)通(tong)運行和管理(li)效率,某市級(ji)管理(li)單位建立了大交(jiao)通(tong)數(shu)據(ju)資源管理(li)系(xi)統(tong)及相關應用 “一(yi)圖一(yi)庫”。其中(zhong)“一(yi)庫”部分主要內(nei)容包括(kuo):數(shu)據(ju)接入(ru)、數(shu)據(ju)存儲、數(shu)據(ju)共(gong)享;“一(yi)圖”部分主要內(nei)容包括(kuo):GIS 信(xin)息(xi)及其關聯數(shu)據(ju)信(xin)息(xi)在二維、三維地圖上(shang)的形象表達(da)。

該(gai)大交(jiao)通(tong)(tong)數據資(zi)源管理系統本質是為(wei)某市(shi)交(jiao)通(tong)(tong)運輸行業(ye)建設高效可用的行業(ye)數據中(zhong)臺系統,其基本架構如下(xia):

基本架構

在(zai)數(shu)(shu)(shu)據(ju)中臺(tai)的(de)建設(she)中,存在(zai)大量的(de)時序數(shu)(shu)(shu)據(ju)應(ying)用場景,其(qi)中最為關鍵的(de)就是車輛(liang)運(yun)行產生的(de)時序數(shu)(shu)(shu)據(ju)的(de)存儲與(yu)使用。如下(xia)圖所(suo)示(shi),綜合交通運(yun)行監測系統中,GPS 時序數(shu)(shu)(shu)據(ju)是及其(qi)重要的(de)數(shu)(shu)(shu)據(ju)資源:

綜合交通運行監測系統

由出租(zu)車(che)、網約(yue)車(che)、公交車(che)、軌道、水運、長短客(ke)運、兩(liang)客(ke)一危、鐵路運輸(shu)的車(che)輛船舶(bo)實時上傳運行(xing)的相關(guan)數(shu)(shu)據(ju),均具備時序數(shu)(shu)據(ju)特征,每日的入(ru)庫(ku)數(shu)(shu)據(ju)量輕(qing)松突破億級(ji)大關(guan),一線(xian)城市或省級(ji)區域的車(che)輛船舶(bo)運行(xing)數(shu)(shu)據(ju)甚至可(ke)達到數(shu)(shu)億甚至數(shu)(shu)十億級(ji)別,如何高效地將時序類(lei)數(shu)(shu)據(ju)入(ru)庫(ku)成為交通(tong)運輸(shu)行(xing)業數(shu)(shu)據(ju)中臺(tai)的一個核心(xin)訴求(qiu)。

另外(wai),交通運輸(shu)行業(ye)(ye)信息(xi)(xi)(xi)化業(ye)(ye)務中還有(you)對于車(che)輛實時位置(zhi)高(gao)效(xiao)查詢(xun)的核(he)心訴求。舉一個典型(xing)的用(yong)例,用(yong)戶(hu)需要(yao)(yao)(yao)頻繁(fan)獲(huo)得當日(ri)上線車(che)船(chuan)(數(shu)萬至(zhi)數(shu)十萬)的數(shu)量、最終位置(zhi)信息(xi)(xi)(xi)、營業(ye)(ye)額度等(deng)信息(xi)(xi)(xi),此種類型(xing)的查詢(xun)需要(yao)(yao)(yao)高(gao)效(xiao)的返回(hui)結(jie)果集(萬級車(che)船(chuan)查詢(xun)須在(zai)秒級)。而且隨著信息(xi)(xi)(xi)化的進(jin)程,用(yong)戶(hu)會(hui)頻繁(fan)地出現(xian)各種新(xin)的時序數(shu)據查詢(xun)需求,需要(yao)(yao)(yao)快速高(gao)效(xiao)的實現(xian)與部署。

第(di)三,從交(jiao)通行業數據的(de)重(zhong)要(yao)性(xing)和(he)敏感性(xing)出發,數據存儲的(de)可靠性(xing)、可擴張性(xing)也是極(ji)為重(zhong)要(yao)的(de)核心(xin)訴求。

二、數據庫選型及落地過程

1. 為什么是 TDengine?

在選(xuan)型初始,我們考(kao)慮了三個數據庫(Database),分別(bie)是 InfluxDB、ClickHouse 和 TDengine。

  • InfluxDB:成熟的老牌時序數據庫,但是重要的集群功能需要商業版本,考慮到國外商業軟件的特殊性質,從審批到付款以及后續安全性都存在一定風險。
  • ClickHouse:俄羅斯開發的高性能數據庫,主要問題在于開源社區主要以俄語為主,其非標準化 SQL 的學習成本較高、集群維護成本高。
  • TDengine:國產化數據庫、中文開源社區,極佳的寫入速度以及便于維護的集群架構,這三點原因最終促使我們選擇 TDengine 作為項目的時序數據庫。

參考選型文章:

  • TDengine Testing Report
  • System Properties Comparison ClickHouse vs. InfluxDB vs. TDengine

2. 集群架構落地

使用 5 臺服(fu)務器搭建 TDengine Database 的 Dnode 集群,Mnode 與(yu)數據(ju)庫的副本數均設定為 3。

在集(ji)群(qun)的(de)設定初(chu)(chu)期,由于(yu)當前版本 Mnode 個數的(de)缺省(sheng)值(zhi)由之前的(de) 3 個變更成為了 1 個,系統 Mnode 最(zui)初(chu)(chu)沒有副(fu)本,使用以下的(de)方法進行(xing)安全的(de)重啟維護,將 Mnode 總(zong)數升級為 3 個,此方法由官方社群(qun)中提供(gong)的(de) TDengine 集(ji)群(qun)版升級步驟變更而來(lai):

0.確保集群節點狀態正常(show dnodes;),讀寫無問題
1.在所有節點停止數據庫服務 systemctl stop taosd
2.備份數據文件目錄下的所有內容 到數據文件目錄之外
3.分別 cd 進入各個節點的數據文件目錄
4.tree 命令檢查所有 vnode 目錄下的 wal 目錄是否為空
5.如果為空,進入步驟 7
6.如果非空,啟動數據庫進程,再關閉,直到 wal 全部為空
7.在數據庫服務 taosd 停止的狀態下,分別在所有節點修改配置文件,將 numOfMnodes 的值設為3
8.分別啟動所有節點的 taosd 服務,systemctl start taosd。
9.show dnodes 檢查節點狀態
10.檢查數據

3. 數據寫入架構落地

由于我(wo)(wo)們的業務開發框架使(shi)用的是 Srping 框架,在使(shi)用 TAOS-JDBCDriver 進(jin)行開發時,可以(yi)選(xuan)擇(ze)兩種(zhong)方(fang)式進(jin)行數(shu)據(ju)入(ru)庫——JDBC-JNI 方(fang)式或者是 JDBC-RESTful 方(fang)式。在 TDengine 官網,明(ming)確(que)記(ji)載了“JDBC-RESTful 性能是 JDBC-JNI 的 50%~90%”,所以(yi),我(wo)(wo)們選(xuan)擇(ze)了 JDBC-JNI 方(fang)式進(jin)行多線程入(ru)庫。

在(zai) JDBC-JNI 方式中(zhong),依然有兩(liang)種(zhong)實現方式,在(zai)數據庫連接池(Hikari、druid)的(de)基礎(chu)上,原生(sheng) SQL 執(zhi)(zhi)行(xing)寫(xie)入(ru)或者是使(shi)用 ORM 框(kuang)架(MyBatis等)執(zhi)(zhi)行(xing)寫(xie)入(ru)。在(zai)試(shi)運行(xing)初(chu)期,我們(men)使(shi)用了 ORM 框(kuang)架進(jin)行(xing)數據寫(xie)入(ru),在(zai)當(dang)前的(de)數據寫(xie)入(ru)量(liang)之(zhi)下,并(bing)沒有太大的(de)問題。

但(dan)是,參考濤思數(shu)據副總肖波在社(she)區群中(zhong)(zhong)溝通中(zhong)(zhong)的(de)意見(jian):“ORM 框(kuang)架大(da)多數(shu)面向關(guan)系庫(ku)開發場景,每秒(miao)幾萬(wan)的(de)吞吐量對它們來(lai)說就很大(da)了,但(dan)在時序(xu)數(shu)據寫入場景中(zhong)(zhong),這連(lian)塞牙(ya)縫都(dou)不夠,設(she)計(ji)滿(man)足的(de)應(ying)用場景不同導致(zhi)適配(pei)度(du)有差異(yi),但(dan)查詢影響不大(da)”,我們認識(shi)到(dao) ORM 框(kuang)架本身可能存在性能瓶(ping)頸,因此在未來(lai)的(de)版本中(zhong)(zhong),我們使用了數(shu)據庫(ku)連(lian)接池(Hikari、druid)+原(yuan)生 SQL 執行寫入為主要寫入模式。

三、接入 TDengine 的效果展示

1. 寫入效果

項目的目標寫入量為 1 億條/天,每秒鐘寫入 1158 條左右,我們通過 TDengine 自帶的 log 功能進行分析,確認寫入效率。由下圖可以看出,五節點構成的集群中,目前瞬時寫入能力取不精確的最大值,也就是 dn1 節點的 23107 條。log.dn 表中數據采集的周期是 30 秒,由此可知,dn1 的實測瞬時最大寫入量是 770 條/秒。加之五節點的集群在分布式插入的架構下,770*5=3850 條/秒的數據插入效率是完全可以保障的,完全滿足了我們業務需求。至于本集群的插入性能上限,應在此實測值的 100 倍以上,并且有極大的增長空間。

dn1 的實測瞬時最大寫入量是 770 條/秒

這(zhe)里說明一(yi)(yi)下(xia) log.dn 表(biao)是(shi)及(ji)其(qi)重要的(de)一(yi)(yi)張(zhang)(zhang) TDengine 自(zi)帶的(de)運(yun)行狀(zhuang)態(tai)數(shu)據表(biao),我們可(ke)以通過此表(biao)對(dui) TDengine 的(de)運(yun)行狀(zhuang)態(tai)進(jin)行監視,后面在查(cha)詢資源占(zhan)用(yong)情況的(de)時候,我們還會用(yong)到這(zhe)張(zhang)(zhang)表(biao)。log 表(biao)字(zi)段的(de)說明如下(xia)圖:(據官方社區(qu)工作人員(yuan)表(biao)示,后面新(xin)版本的(de) TDinsight 是(shi)更好的(de)監控工具,有(you)機會打算試用(yong)一(yi)(yi)下(xia))

log 表字段的說明1
log 表字段的說明2

2. 查詢效果

所有車輛最新位置信息的查詢是交通運行監控中的重中之重,最初“使用何種查詢語句實現高效查詢”是令我們非常困擾的一件事,后面在 TDengine 社區團隊的幫助下,我們利用了隱藏字段名 tbname 和 group by 方法,高效地查詢了車輛的最新定位信息。從下圖可以看到,頻繁查詢的情況下,接近六萬輛車的位置信息,只用了不到1秒的查詢時間,簡單而又高效,完全符合我們的業務需求

接近六萬輛車的位置信息
只用了不到1秒的查詢時間

數據統計分析也是各種業務系統中需要廣泛實裝的一個功能。我們再看一個例子,一個 64 天數據量的表,進行每日數據條數的降維統計,所需時間也不到 1 秒:

一個 64 天數據量的表
每日數據條數的降維統計,所需時間也不到 1 秒

在合理(li)的 SQL 設計(ji)支持之下,TDengine 的查(cha)詢效率完全可(ke)以(yi)滿足時序類數據的高效查(cha)詢需求,大大簡化了(le)開發難(nan)度(du),降低了(le)運維成(cheng)本,整個(ge)團隊都為此感到滿意。

3. 資源占用

下圖中羅列了(le)一日內各個節點的 CPU、內存、帶(dai)寬、IO 讀(du)寫的相(xiang)關數據(ju)(最大采(cai)樣值),其資(zi)源消(xiao)耗尤其是 CPU 方面的消(xiao)耗是非常穩定(ding)和可控的:

各個節點的 CPU、內存、帶寬、IO 讀寫的相關數據
各個節點的 CPU、內存、帶寬、IO 讀寫的相關數據

四、結語

在本(ben)次開(kai)發中,TDengine Database 展現出的(de)(de)性能效果非常顯著,推動(dong)了交通行業(ye)(ye)海量時序數(shu)據業(ye)(ye)務(wu)快速高質地(di)落(luo)地(di),極大地(di)降低(di)了開(kai)發與運維(wei)成本(ben)。對(dui)于(yu)堪稱國貨(huo)精品的(de)(de) TDengine,我們愿(yuan)意(yi)付出更多的(de)(de)耐心與信(xin)心,甚(shen)至愿(yuan)意(yi)參加(jia)到開(kai)源社區(qu)的(de)(de)開(kai)發活動(dong)中去,為(wei)其建立一個良好(hao)的(de)(de)社區(qu)生態而努力。 對(dui)于(yu) TDengine 產(chan)品本(ben)身(shen),我們也(ye)有更多的(de)(de)期許:

  • 在目前的高迭代開發期,尤其是對集群客戶,提供不間斷服務的無縫升級功能
  • 建議 TDengine 開展培訓、認證、服務分成體系,培養更多的認證服務代理商
  • 提供更多的專業領域函數,比如說空間函數庫,功能上可以參考 MySQL 的空間函數庫
  • 開放第三方的函數插件市場,在插件開發規范的基礎上,會有更多的用戶貢獻出專業領域的函數插件

借助中國的(de)巨大(da)市場,愿 TDengine 早(zao)日(ri)成長為(wei)時序(xu)數據庫領(ling)域的(de) Oracle!

作者 | 王揚(yang) 北京金海樂(le)游(you)軟件有限(xian)公司 技術主(zhu)管