小 T 導讀:面對海量的(de)車(che)載軌跡數(shu)(shu)(shu)據,四維圖(tu)新數(shu)(shu)(shu)據存儲面對非(fei)常大的(de)壓(ya)力——每分鐘的(de)軌跡數(shu)(shu)(shu)據大概有 2000 萬(wan)條記錄,他們此前(qian)使(shi)用的(de) Elasticsearch 存儲方(fang)式不僅(jin)造成了(le)嚴重(zhong)的(de)物理資源浪費,還存在(zai)查詢瓶頸,所以急需(xu)轉換數(shu)(shu)(shu)據存儲中(zhong)間件。本(ben)文(wen)講述了(le)四維圖(tu)新在(zai)數(shu)(shu)(shu)據庫選型測試、搭建與遷(qian)移等(deng)方(fang)面的(de)相關實(shi)踐經驗。
企業簡介
四維(wei)圖(tu)(tu)新(xin)成立于 2002 年,是中國導航地圖(tu)(tu)產業(ye)的開拓者。經十余年的創新(xin)發(fa)展,其(qi)已成為(wei)導航地圖(tu)(tu)、導航軟(ruan)件、動(dong)態交(jiao)通信(xin)(xin)息、位(wei)置大數(shu)據(ju)以(yi)(yi)及乘用(yong)(yong)車(che)和商用(yong)(yong)車(che)定制化(hua)車(che)聯網解決方案領域的領導者。如今,四維(wei)圖(tu)(tu)新(xin)以(yi)(yi)全(quan)(quan)面(mian)的技(ji)術發(fa)展戰略迎接汽(qi)車(che)“新(xin)四化(hua)”時代的來(lai)臨,致(zhi)力(li)于以(yi)(yi)高(gao)(gao)精度地圖(tu)(tu)、高(gao)(gao)精度定位(wei)、云服務平臺(tai)以(yi)(yi)及應用(yong)(yong)于 ADAS 和自動(dong)駕(jia)駛的車(che)規(gui)級芯片(pian)等核心業(ye)務,打造“智(zhi)能(neng)汽(qi)車(che)大腦”,賦能(neng)智(zhi)慧出(chu)行,助力(li)美好生活,成為(wei)中國市場乃至全(quan)(quan)球更值得客戶信(xin)(xin)賴的智(zhi)能(neng)出(chu)行科技(ji)公司。
項目介紹
在(zai)(zai)某(mou)車企項(xiang)目中(zhong),面對車載軌跡數(shu)(shu)據(ju) 2000 萬/分鐘的(de)(de)寫(xie)入(ru)量(liang),整體數(shu)(shu)據(ju)存儲的(de)(de)壓力非常(chang)之(zhi)大。此(ci)前我們采用的(de)(de)是(shi) Elasticsearch,共設置了(le)(le) 15 個(ge)節點( 32 核 / 48GB 內存 / 2TB 磁(ci)盤空間),不到半(ban)個(ge)月磁(ci)盤占用量(liang)就已經達到 80% 了(le)(le),非常(chang)耗用物(wu)理(li)資(zi)(zi)源。同時(shi)大量(liang)的(de)(de) IO 操作(zuo)不僅(jin)導(dao)致 PaaS 層不穩(wen)定,也波及(ji)到了(le)(le)其他的(de)(de)依賴資(zi)(zi)源,如(ru)云主機、中(zhong)間件(jian)等(deng)。在(zai)(zai)此(ci)背景下(xia),轉(zhuan)換數(shu)(shu)據(ju)存儲中(zhong)間件(jian)已經迫在(zai)(zai)眉睫。
從數據特點和處理需求出發,我們選擇了更加專業的時序數據庫。從數據(ju)插入、查詢、存儲(chu)性能提(ti)升,硬件(jian)或云(yun)服務成本降低、設計架構簡(jian)化和集群版本開源這四個維度進行選型考慮,最終我們(men)初步選擇了(le) TDengine Database,隨即便著手進行模擬測試(shi)。
一、選型測試
針(zhen)對時序數據庫 TDengine 的(de)寫入(ru)性能優勢,我們選取了(le)一些業務場景(jing)接入(ru)的(de)軌跡數據進行(xing)寫入(ru)測試(shi),測試(shi)環(huan)境(jing)如下圖(tu)所示:

我們(men)以(yi) 40 萬(wan)記(ji)錄/天(tian)/輛車,共計 150 天(tian)、120 輛車的(de)數(shu)據進行寫(xie)入測試,寫(xie)入的(de)記(ji)錄總數(shu)為 72 億,總線程數(shu)為 40,最終的(de)寫(xie)入和(he)存(cun)儲性能對比如下圖:

總結:相比 Elasticsearch,TDengine 的存儲空間利用率提升8倍,寫入性能提升 2.5 倍。
因為之前(qian) blocks 只有默認的值,所(suo)以在后續測試中(zhong)我們按照業務(wu)實(shi)際(ji)場景修改成了 100,將每 Vnode 寫入緩存(cun)塊數做了適當(dang)的優化(hua)。

之后我們(men)從單(dan)日(ri)數(shu)據、單(dan)輛車(che)數(shu)據、單(dan)日(ri)單(dan)車(che)數(shu)據三個維(wei)度(du)對 TDengine 進行查詢測試(shi)(shi),測試(shi)(shi)結果如下圖所示:

總結:相比 Elasticsearch,TDengine 的“count(*)”查詢性能提升 4 倍,“select*”查詢性能提升 3-10 倍。
此外,TDengine 支持查詢單個設(she)備一個時間段數(shu)據的需(xu)求(qiu),和我們的業(ye)務(wu)場景不(bu)謀而合(he);它(ta)的類 SQL 設(she)計(ji)也(ye)非(fei)常便利,幾(ji)乎(hu)不(bu)需(xu)要學習成本,運維管(guan)理(li)成本也(ye)幾(ji)乎(hu)為零。同(tong)時,它(ta)還是國(guo)產開源(yuan)數(shu)據庫,相(xiang)比其他開源(yuan)軟件,能給中國(guo)的軟件工程師提供更好的本地服務(wu)。作為一款(kuan)完全自主研發的時序數(shu)據庫,TDengine 的穩定性(xing)和安全性(xing)也(ye)已經(jing)被很多企業(ye)驗證過,相(xiang)對已經(jing)比較成熟了。
經過多(duo)重測(ce)試和(he)考量,最終我們選擇(ze)將 TDengine 接入到系統之中,以支撐當(dang)下的業務需求。
二、實際運行
在接入 TDengine 之(zhi)后(hou),業務(wu)上近實時的寫(xie)入大量軌(gui)(gui)跡(ji)數據的需求(qiu)輕松實現(xian),數據部門可以日更億級軌(gui)(gui)跡(ji)數據,在達(da)成存(cun)儲要求(qiu)的同時,查詢性(xing)能也能滿足下游的業務(wu)團隊使用。整體(ti)架構圖如下:

在(zai)表(biao)結構的搭(da)建(jian)上,我們是按照設(she)備和眾包車的編(bian)碼設(she)置(zhi)的 tag,建(jian)立了如下所示的索引關(guan)系。

而具體到實際業務中,TDengine 仍然表現出上述測試所展現出的優秀性能。以存儲性能為例,之前我們使用 ES集群時,15個節點只能支持3個月的數據存儲,在接入 TDengine 之后,7 個同樣配置的集群,已經支撐了 5 個月的數據存儲。
三、經驗分享
實際上,在數據(ju)遷(qian)(qian)(qian)移(yi)工(gong)作中,我們(men)的(de)本地業務從(cong) Elasticsearch 遷(qian)(qian)(qian)移(yi)到 TDengine 的(de)過(guo)程(cheng)并不復雜。一是由于 TDengine 支持的(de)編程(cheng)語(yu)言非(fei)常多,且是采用與 MySQL 相似的(de) SQL 語(yu)言,這種特(te)性極(ji)大地簡化了遷(qian)(qian)(qian)移(yi)所需的(de)資源成(cheng)(cheng)本和人力成(cheng)(cheng)本。此外,通(tong)過(guo)我們(men)自研的(de)傳輸工(gong)具,300T+ 數據(ju)的(de)遷(qian)(qian)(qian)移(yi)工(gong)作在短時間內就(jiu)完成(cheng)(cheng)了 。
在具體實現(xian)上,傳輸工具是采(cai)用(yong)多線程(cheng)方式將數據讀取(qu)到 CSV,然后再批量寫(xie)入(ru)到新的集群中,示例代碼如(ru)下(xia)圖所示:

除此之外,在 TDengine 的應用上,我們也遇到了一些(xie)(xie)小問題,在濤思(si)數(shu)據伙(huo)伴們的通(tong)力(li)合作下,最終(zhong)問題也都(dou)得(de)到了解決。借此機會將(jiang)這(zhe)些(xie)(xie)經驗分(fen)享出來,給大(da)家一些(xie)(xie)參考(kao)。
我們(men)有(you)一(yi)個場景(jing)是“在頁面上畫一(yi)個矩形框”,剛開始(shi)我們(men)是直接使用經緯度進(jin)行(xing)軌跡(ji)點數據的(de)獲取,所(suo)(suo)需的(de)時間非常長,基本(ben)沒法使用,代碼如下(xia)所(suo)(suo)示:

在優化之后,我們使用 Spark 程序動(dong)態(tai)去請求(qiu),通(tong)過經緯度獲(huo)取(qu)某類(lei)型車的軌跡(ji)點(dian)個數,通(tong)過劃取(qu)時間點(dian)的方式,達到了最終的效果:

在后期使用(yong) TDengine 進行多維度、大數(shu)據量查(cha)(cha)詢(xun)的(de)(de)(de)時候(hou),出現(xian)了查(cha)(cha)詢(xun)性能(neng)(neng)線性下降的(de)(de)(de)問(wen)(wen)題(ti),后面我們(men)通(tong)過查(cha)(cha)詢(xun)官網資料,再對比本(ben)地的(de)(de)(de)集群配置參數(shu)以及數(shu)據建模(mo)方式,最終找到了性能(neng)(neng)問(wen)(wen)題(ti)的(de)(de)(de)原因,而(er)后結合(he)本(ben)地應用(yong)場景(jing)以及未(wei)來業(ye)務(wu)規模(mo)進行了重新配置和(he)數(shu)據建模(mo),成(cheng)功(gong)解決了查(cha)(cha)詢(xun)性能(neng)(neng)的(de)(de)(de)問(wen)(wen)題(ti)。
所以(yi)(yi),如果大家在(zai)應用(yong) TDengine 的過(guo)程(cheng)中出現了(le)一些(xie)問(wen)題,建議(yi)可(ke)以(yi)(yi)先去官網(wang)查找(zhao)資料(liao),官網(wang)文檔非常全面,可(ke)以(yi)(yi)稱得(de)上(shang)是(shi) TDengine 使用(yong)的“百科全書”了(le),一些(xie)小(xiao)問(wen)題都可(ke)以(yi)(yi)在(zai)這里找(zhao)到解決辦(ban)法。
四、寫在最后
基于 TDengine 在當(dang)下業(ye)(ye)務(wu)中(zhong)所表現出的(de)優異成(cheng)績,我們在未來(lai)考(kao)慮向 TDengine 中(zhong)接入(ru)更(geng)大規(gui)模的(de)軌(gui)跡(ji)數據以及其(qi)他(ta)業(ye)(ye)務(wu)中(zhong)的(de)時(shi)序數據。也(ye)希望未來(lai)我們能(neng)借力 TDengine,實(shi)現大量的(de)軌(gui)跡(ji)計算及挖(wa)掘(jue),將公司內部(bu)的(de)數據實(shi)現快速(su)變(bian)現,加速(su)充電樁業(ye)(ye)務(wu)的(de)發展(zhan),依賴 LBS 幫助客戶挖(wa)掘(jue)更(geng)多(duo)的(de)潛在客戶,實(shi)現多(duo)邊共贏。
作者簡介
曹志強,四維圖新(xin)位置服(fu)務(wu)部(bu)門數據平臺負(fu)責人(ren),主要負(fu)責解決(jue)整個集團的數據接入、存(cun)儲、查詢(xun)和使(shi)用(yong),支撐公司(si)內部(bu)自(zi)動(dong)駕駛和智慧城市的數據治理(li)工作。


























