在上一篇文章《寫入性能:TDengine 最高達到 InfluxDB 的 16.2 倍,TimeScaleDB 的 3.3 倍》中,我們基于 IoT 場景下的 TSBS 時序數據庫(Time Series Database)性能基準測試報告對(dui)三大數(shu)據庫寫入性能進行了相關解讀,較(jiao)為(wei)直觀地展現(xian)出了 TDengine 的眾多寫入優勢。本篇文章將以查詢性能作為(wei)主題,給 IoT 場景下正(zheng)在為(wei)數(shu)據分析痛點而頭(tou)疼的朋友(you)們帶來(lai)一些幫助。
在查詢性能評估部分,我們使用場景一(只包含4天數據,這個修改與[TimescaleDB vs. InfluxDB]中要求一致)和場景二作為基準數據集,具體基礎數據集的特點,請參照《一鍵獲取測試腳本,輕松驗證 TDengine 3.0 IoT 場景下 TSBS 測試報告》。
在查(cha)詢性能評(ping)估之前(qian),為確保兩大數據(ju)庫(ku)充(chong)(chong)分發揮查(cha)詢性能,對于(yu) TimescaleDB,我們采(cai)用(yong)[TimescaleDB vs. InfluxDB]中(zhong)的(de)(de)推薦配(pei)置(zhi)(zhi),設(she)置(zhi)(zhi)為 8 個 Chunk ,以確保其充(chong)(chong)分發揮查(cha)詢性能;對于(yu) lInfluxDB,我們開啟 InfluxDB 的(de)(de) TSI (time series index)。在整(zheng)個查(cha)詢對比中(zhong),TDengine 數據(ju)庫(ku)的(de)(de)虛擬節點(dian)數量(vnodes)保持為默認的(de)(de) 6 個(scale=100 時配(pei)置(zhi)(zhi) 1 個),其他的(de)(de)數據(ju)庫(ku)參(can)數配(pei)置(zhi)(zhi)為默認值。
TimescaleDB vs. InfluxDB: Purpose Built Differently for Time-Series Data:
4,000 devices × 10 metrics 查詢性能對比
由于大(da)部分(fen)(fen)類(lei)型單(dan)次(ci)(ci)查(cha)詢響(xiang)應(ying)時間過長,為(wei)(wei)了更加準確地測量(liang)每個查(cha)詢場景下較(jiao)為(wei)(wei)穩定(ding)的響(xiang)應(ying)時間,我們依據卡車數量(liang)規模(mo),將單(dan)個查(cha)詢運行次(ci)(ci)數分(fen)(fen)別提升(sheng)到 2,000 次(ci)(ci)(場景一)和 500 次(ci)(ci)(場景二),然后使用 TSBS 自動(dong)統計(ji)并(bing)輸出結(jie)果,最后結(jie)果是(shi)多次(ci)(ci)查(cha)詢的算數平均值(zhi),使用并(bing)發客戶端(duan) Workers 數量(liang)為(wei)(wei) 4。下表(biao)是(shi)場景二 (4,000 設備)的查(cha)詢性能對比結(jie)果。

下面我們對每個(ge)查詢結(jie)果做(zuo)一定的分析說明:
注:查詢一=daily-activity;查詢二=avg-daily-driving-session;查詢三=avg-daily-driving-duration;查詢四=avg-vs-projected-fuel-consumption

在分組選擇(ze)的查詢(xun)中,TDengine 采用一張表一個設備(bei)(卡(ka)車)的設計方(fang)式,并采用緩存模式的 last_row 函數(shu)來查詢(xun)最新的數(shu)據。從結果上(shang)看,TDengine 的查詢(xun)響應(ying)時間均優于 InfluxDB 和 TimescaleDB。

在復雜分組聚合的查詢中,我們看到 TDengine 查詢性能相比于 TimescaleDB 和 InfluxDB 有非常大的優勢;而在時間窗口聚合的查詢過程中,針對規模較大的數據集,TimescaleDB 查詢性能不佳——long-driving-sessions 和 long-daily-sessions 均表現很差。TDengine 在 stationary-trucks 查詢性能是 InfluxDB 的 132 倍,是 TimescaleDB 的 8 倍;在 long-daily-sessions 中是 TimescaleDB 的 87 倍,是 InfluxDB 的 6.5 倍。


在復雜的混合查詢中, TDengine 展現出巨大的性能優勢,按查詢響應時間來度量,在 avg-load 和 breakdown-frequency 的查詢中,TDengine 性能是 InfluxDB 的 426 倍和 53 倍 ;對(dui)比(bi) TimescaleDB,在 daily-activity 查(cha)詢(xun)中(zhong),TDengine 是其(qi) 34 倍,在 avg-load 查(cha)詢(xun)中(zhong),TDengine 是其(qi) 23 倍。
資源開銷對比
由于部分查(cha)詢持續時間特(te)別短,因此(ci)并(bing)(bing)不能完整(zheng)地看到查(cha)詢過(guo)程(cheng)中服務器的(de)(de) IO/CPU/網絡情況。為(wei)此(ci),我們(men)針對場景二,以 daily-activity 查(cha)詢為(wei)例,執(zhi)行(xing) 50 次查(cha)詢,記錄(lu)三個軟件系統在查(cha)詢執(zhi)行(xing)的(de)(de)整(zheng)個過(guo)程(cheng)中服務器 CPU、內存、網絡的(de)(de)開銷并(bing)(bing)進行(xing)對比。
服務器 CPU 開銷

查詢過程中服務(wu)器 CPU 開銷
從上圖可以看到,三個系統在整個查詢過程中 CPU 的使用均較為平穩。TDengine 在查詢過程中整體 CPU 占用約 為 70%,TimescaleDB 在查詢過程中瞬時 CPU 最低,約為 22%,InfluxDB 的穩定階段 CPU 占用最大,約 98 %(有較多的瞬時100%)。從整體 CPU 開銷上來看,雖然 TimescaleDB 瞬時 CPU 開銷最低,但是其完成查詢持續時間最長,所以整體 CPU 資源消耗最多;InfluxDB 基本頂格 100% 使用全部 CPU,持續時間是 TDengine 的三倍,開銷次之。TDengine 完成全部查詢的時間(jian)僅是 TimescaleDB 的 1/30,整(zheng)體 CPU 開銷最低。
服務器內存狀況

如上圖所示,在整(zheng)個(ge)查詢(xun)過程中(zhong),TDengine 內存(cun)(cun)維(wei)持了一(yi)個(ge)相(xiang)對平穩(wen)的(de)狀(zhuang)態,平均使用(yong)(yong)約為(wei) 12GB;TimescaleDB 和 InfluxDB 內存(cun)(cun)占用(yong)(yong)在整(zheng)個(ge)查詢(xun)過程中(zhong)均保持平穩(wen),平均約為(wei) 10GB;其(qi)中(zhong) TimescaleDB 對 buffer 和 cache 使用(yong)(yong)比較多(duo)。
服務器網絡帶寬

上(shang)圖展示了查(cha)詢過程中三大系統服務器端(duan)上(shang)行和(he)下行的(de)網絡帶(dai)(dai)寬情況(kuang),負載狀(zhuang)況(kuang)基本上(shang)和(he) CPU 狀(zhuang)況(kuang)相(xiang)(xiang)似——TDengine 網絡帶(dai)(dai)寬開銷最(zui)高,因為(wei)在最(zui)短的(de)時(shi)間(jian)內就完成(cheng)了全部查(cha)詢,需要將查(cha)詢結果返回(hui)給(gei)客戶端(duan);InfluxDB 和(he) TimescaleDB 網絡帶(dai)(dai)寬大致(zhi)相(xiang)(xiang)同。
100 devices × 10 metrics 查詢性能對比
對(dui)于(yu)場景(jing)一(yi)(100 devices x 10 metrics),TSBS 的 15 個查詢對(dui)比結(jie)果如下:

如上表所示,從更小規模的數據集(場景一)上的查詢對比可以看到,整體上 TDengine 同樣展現出極好的性能,在全部的查詢語句中全面優于 TimescaleDB 和 InfluxDB,部分查詢性能超過 TimescaleDB 16 倍,超過 InfluxDB 155 倍。
寫在最后
基于上文可以做出總結,查詢方面整體來講,在場景一(只包含 4 天的數據)與場景二的 15 個不同類型的查詢中,TDengine 的查詢平均響應時間全面優于 InfluxDB 和 TimescaleDB,在復雜查詢上優勢更為明顯,同時具有最小的計算資源開銷。相對(dui)于(yu) InfluxDB,場(chang)景(jing)一中(zhong) TDengine 查(cha)詢(xun)性能是(shi)其 2.4 ~ 155.9 倍(bei),場(chang)景(jing)二中(zhong) TDengine 查(cha)詢(xun)性能是(shi)其 6.3 ~ 426.3 倍(bei);相對(dui)于(yu) TimescaleDB,場(chang)景(jing)一中(zhong) TDengine 查(cha)詢(xun)性能是(shi)其 1.1 ~ 16.4 倍(bei),場(chang)景(jing)二中(zhong) TDengine 查(cha)詢(xun)性能是(shi)其 1.02 ~ 87 倍(bei)。
同樣地,TDengine 3.0 高效的查詢性能也在企業實踐中得到了驗證,在《中移物聯車聯網項目,在 TDengine 3.0 的應用》一文中可以看到,從 2.0 到 3.0,TDengine 讀取數據性能依舊很突出,面對中移物聯網場景最常用的單設備單日查詢,3.0 可以在 0.1s 內返回結果。如果你也面臨著數據處理難題或想要進行數據架構升級,歡迎添加小T vx:tdengine1,加入 TDengine 用(yong)戶交流群,和更多志同道(dao)合的(de)開發者一起攻(gong)克難關。


























