替代 Elasticsearch,TDengine 助力四维图新将存储空间利用率提升 8 倍
小 T 導(dǎo)讀:面對海量的車載軌跡數(shù)據(jù),四維圖新數(shù)據(jù)存儲面對非常大的壓力——每分鐘的軌跡數(shù)據(jù)大概有 2000 萬條記錄,他們此前使用的 Elasticsearch 存儲方式不僅造成了嚴(yán)重的物理資源浪費(fèi),還存在查詢瓶頸,所以急需轉(zhuǎn)換數(shù)據(jù)存儲中間件。本文講述了四維圖新在數(shù)據(jù)庫選型測試、搭建與遷移等方面的相關(guān)實(shí)踐經(jīng)驗(yàn)。?
企業(yè)簡介
四維圖新成立于 2002 年,是中國導(dǎo)航地圖產(chǎn)業(yè)的開拓者。經(jīng)十余年的創(chuàng)新發(fā)展,其已成為導(dǎo)航地圖、導(dǎo)航軟件、動態(tài)交通信息、位置大數(shù)據(jù)以及乘用車和商用車定制化車聯(lián)網(wǎng)解決方案領(lǐng)域的領(lǐng)導(dǎo)者。如今,四維圖新以全面的技術(shù)發(fā)展戰(zhàn)略迎接汽車“新四化”時代的來臨,致力于以高精度地圖、高精度定位、云服務(wù)平臺以及應(yīng)用于 ADAS 和自動駕駛的車規(guī)級芯片等核心業(yè)務(wù),打造“智能汽車大腦”,賦能智慧出行,助力美好生活,成為中國市場乃至全球更值得客戶信賴的智能出行科技公司。
項(xiàng)目介紹
在某車企項(xiàng)目中,面對車載軌跡數(shù)據(jù) 2000 萬/分鐘的寫入量,整體數(shù)據(jù)存儲的壓力非常之大。此前我們采用的是 Elasticsearch,共設(shè)置了 15 個節(jié)點(diǎn)( 32 核 / 48GB 內(nèi)存 / 2TB 磁盤空間),不到半個月磁盤占用量就已經(jīng)達(dá)到 80% 了,非常耗用物理資源。同時大量的 IO 操作不僅導(dǎo)致 PaaS 層不穩(wěn)定,也波及到了其他的依賴資源,如云主機(jī)、中間件等。在此背景下,轉(zhuǎn)換數(shù)據(jù)存儲中間件已經(jīng)迫在眉睫。
從數(shù)據(jù)特點(diǎn)和處理需求出發(fā),我們選擇了更加專業(yè)的時序數(shù)據(jù)庫。從數(shù)據(jù)插入、查詢、存儲性能提升,硬件或云服務(wù)成本降低、設(shè)計(jì)架構(gòu)簡化和集群版本開源這四個維度進(jìn)行選型考慮,最終我們初步選擇了 TDengine Database,隨即便著手進(jìn)行模擬測試。
一、選型測試
針對時序數(shù)據(jù)庫 TDengine 的寫入性能優(yōu)勢,我們選取了一些業(yè)務(wù)場景接入的軌跡數(shù)據(jù)進(jìn)行寫入測試,測試環(huán)境如下圖所示:
我們以 40 萬記錄/天/輛車,共計(jì) 150 天、120 輛車的數(shù)據(jù)進(jìn)行寫入測試,寫入的記錄總數(shù)為 72 億,總線程數(shù)為 40,最終的寫入和存儲性能對比如下圖:
總結(jié):相比 Elasticsearch,TDengine 的存儲空間利用率提升8倍,寫入性能提升 2.5 倍。
因?yàn)橹?blocks 只有默認(rèn)的值,所以在后續(xù)測試中我們按照業(yè)務(wù)實(shí)際場景修改成了 100,將每 Vnode 寫入緩存塊數(shù)做了適當(dāng)?shù)膬?yōu)化。
之后我們從單日數(shù)據(jù)、單輛車數(shù)據(jù)、單日單車數(shù)據(jù)三個維度對 TDengine 進(jìn)行查詢測試,測試結(jié)果如下圖所示:
總結(jié):相比 Elasticsearch,TDengine 的“count(*)”查詢性能提升 4 倍,“select*”查詢性能提升 3-10 倍。
此外,TDengine 支持查詢單個設(shè)備一個時間段數(shù)據(jù)的需求,和我們的業(yè)務(wù)場景不謀而合;它的類 SQL 設(shè)計(jì)也非常便利,幾乎不需要學(xué)習(xí)成本,運(yùn)維管理成本也幾乎為零。同時,它還是國產(chǎn)開源數(shù)據(jù)庫,相比其他開源軟件,能給中國的軟件工程師提供更好的本地服務(wù)。作為一款完全自主研發(fā)的時序數(shù)據(jù)庫,TDengine 的穩(wěn)定性和安全性也已經(jīng)被很多企業(yè)驗(yàn)證過,相對已經(jīng)比較成熟了。
經(jīng)過多重測試和考量,最終我們選擇將 TDengine 接入到系統(tǒng)之中,以支撐當(dāng)下的業(yè)務(wù)需求。
二、實(shí)際運(yùn)行
在接入 TDengine 之后,業(yè)務(wù)上近實(shí)時的寫入大量軌跡數(shù)據(jù)的需求輕松實(shí)現(xiàn),數(shù)據(jù)部門可以日更億級軌跡數(shù)據(jù),在達(dá)成存儲要求的同時,查詢性能也能滿足下游的業(yè)務(wù)團(tuán)隊(duì)使用。整體架構(gòu)圖如下:
在表結(jié)構(gòu)的搭建上,我們是按照設(shè)備和眾包車的編碼設(shè)置的 tag,建立了如下所示的索引關(guān)系。
而具體到實(shí)際業(yè)務(wù)中,TDengine 仍然表現(xiàn)出上述測試所展現(xiàn)出的優(yōu)秀性能。以存儲性能為例,之前我們使用?ES集群時,15個節(jié)點(diǎn)只能支持3個月的數(shù)據(jù)存儲,在接入 TDengine 之后,7 個同樣配置的集群,已經(jīng)支撐了 5 個月的數(shù)據(jù)存儲。
三、經(jīng)驗(yàn)分享
實(shí)際上,在數(shù)據(jù)遷移工作中,我們的本地業(yè)務(wù)從 Elasticsearch 遷移到 TDengine 的過程并不復(fù)雜。一是由于 TDengine 支持的編程語言非常多,且是采用與 MySQL 相似的 SQL 語言,這種特性極大地簡化了遷移所需的資源成本和人力成本。此外,通過我們自研的傳輸工具,300T+ 數(shù)據(jù)的遷移工作在短時間內(nèi)就完成了 。
在具體實(shí)現(xiàn)上,傳輸工具是采用多線程方式將數(shù)據(jù)讀取到 CSV,然后再批量寫入到新的集群中,示例代碼如下圖所示:
除此之外,在 TDengine 的應(yīng)用上,我們也遇到了一些小問題,在濤思數(shù)據(jù)伙伴們的通力合作下,最終問題也都得到了解決。借此機(jī)會將這些經(jīng)驗(yàn)分享出來,給大家一些參考。
我們有一個場景是“在頁面上畫一個矩形框”,剛開始我們是直接使用經(jīng)緯度進(jìn)行軌跡點(diǎn)數(shù)據(jù)的獲取,所需的時間非常長,基本沒法使用,代碼如下所示:
在優(yōu)化之后,我們使用 Spark 程序動態(tài)去請求,通過經(jīng)緯度獲取某類型車的軌跡點(diǎn)個數(shù),通過劃取時間點(diǎn)的方式,達(dá)到了最終的效果:
在后期使用 TDengine 進(jìn)行多維度、大數(shù)據(jù)量查詢的時候,出現(xiàn)了查詢性能線性下降的問題,后面我們通過查詢官網(wǎng)資料,再對比本地的集群配置參數(shù)以及數(shù)據(jù)建模方式,最終找到了性能問題的原因,而后結(jié)合本地應(yīng)用場景以及未來業(yè)務(wù)規(guī)模進(jìn)行了重新配置和數(shù)據(jù)建模,成功解決了查詢性能的問題。
所以,如果大家在應(yīng)用 TDengine 的過程中出現(xiàn)了一些問題,建議可以先去官網(wǎng)查找資料,官網(wǎng)文檔非常全面,可以稱得上是 TDengine 使用的“百科全書”了,一些小問題都可以在這里找到解決辦法。
四、寫在最后
基于 TDengine Database在當(dāng)下業(yè)務(wù)中所表現(xiàn)出的優(yōu)異成績,我們在未來考慮向 TDengine 中接入更大規(guī)模的軌跡數(shù)據(jù)以及其他業(yè)務(wù)中的時序數(shù)據(jù)。也希望未來我們能借力 TDengine,實(shí)現(xiàn)大量的軌跡計(jì)算及挖掘,將公司內(nèi)部的數(shù)據(jù)實(shí)現(xiàn)快速變現(xiàn),加速充電樁業(yè)務(wù)的發(fā)展,依賴 LBS 幫助客戶挖掘更多的潛在客戶,實(shí)現(xiàn)多邊共贏。
作者簡介
曹志強(qiáng),四維圖新位置服務(wù)部門數(shù)據(jù)平臺負(fù)責(zé)人,主要負(fù)責(zé)解決整個集團(tuán)的數(shù)據(jù)接入、存儲、查詢和使用,支撐公司內(nèi)部自動駕駛和智慧城市的數(shù)據(jù)治理工作。
想了解更多TDengine的具體細(xì)節(jié),歡迎大家在GitHub上查看相關(guān)源代碼。
總結(jié)
以上是生活随笔為你收集整理的替代 Elasticsearch,TDengine 助力四维图新将存储空间利用率提升 8 倍的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python中int、str、bytes
- 下一篇: 如何创建自己的云盘-私有云盘