<meter id="blnnv"></meter>

                  TDengine和InfluxDB查詢性能對比測試報告

                  業界 來源:TDengine 2022-05-28 20:42:25

                  我們之前已經發布了 TDengine 和 InfluxDB 的寫入性能測試報告,今天我們再來對比一下兩款時序數據庫(Time-Series Database)產品的查詢性能。

                  1. 前言

                  本報告包含了基礎測試部分內容,并根據具體的場景,增加了部分擴展測試場景,以便更加全面、準確地呈現兩款數據庫產品在不同應用場景下的查詢性能表現。

                  1.1 硬件環境

                  為便于大家復現該測試,我們在 Microsoft Azure 云服務上搭建了測試環境。測試中用到了兩臺服務器,分別部署客戶端和服務器,客戶端與服務器通過云服務的內網連接。

                  兩臺服務器的具體配置如下。

                  客戶端8C,Intel(R) Xeon(R) Platinum 8272CL CPU @ 2.60GHz16 GB64 GB SSD, 無寫入情況下,4k 隨機讀取 IOPS 5000服務端16C, AMD EPYC 7452 32-Core Processor128 GB1 TB SSD, ? 無寫入情況下,4k 隨機讀取 IOPS 25000

                  操作系統均為 Ubuntu 20.10 Linux。使用的 Go 版本為 1.16。

                  1.2 軟件安裝

                  TDengine 2.1.7.2 社區版,可以在濤思官網下載。也可以通過 clone GitHub 上的代碼自行編譯生成。該版本的 git 的信息如下:

                  community version: 2.1.7.2 compatible_version: 2.0.0.0

                  gitinfo: c6be1bb809536182f7d4f27c0d8267b3b25c9354

                  InfluxDB 1.8.4(由于該性能測試框架最高只能適配到 1.8 版本,所以這里選取了 InfluxDB 1.8 版本進行對比),可以在 InfluxData 官網下載。

                  1.3 運行腳本生成查詢用數據

                  1.3.1 安裝準備

                  部署完 TDengine、InfluxDB 與 Go 語言環境,確保兩臺服務器的數據庫也連接正常使用正常(建庫刪庫寫入查詢功能均需測試,建庫之后立即刪除,如有問題立刻排查)

                  此外,在測試中應該注意以下幾點( TDengine 的默認配置文件為 /etc/taos/taos.cfg ):

                  1)fsync 的設置要保持同步,InfluxDB 默認是無延時的 fsync,需要修改 TDengine 的這兩個參數:walLevel=2 ,fsync=0 才能達到相同的配置環境。后續的一切測試均是在這個設置條件下完成。

                  2)TDengine 的客戶端要把 maxSQLLength 開到最大 1048576。

                  3)客戶端服務器要安裝 TDengine 的客戶端。(注意:bulk_load_tdengine 編譯需要依賴 TDengine 客戶端)

                  1.3.2 從 GitHub 取下代碼,在客戶端服務器執行:

                  git clone https://github.com/taosdata/timeseriesdatabase-comparisons

                  1.3.3 準備編譯環境,生成寫入程序,timeseriesdatabase-comparisons 的根目錄為工作目錄:

                  cd timeseriesdatabase-comparisons/build/tsdbcompare/

                  ./compilation.sh

                  1.3.4 切換到build/tsdbcompare目錄下,產生測試數據集合并寫入數據庫。

                  在build/tsdbcompare下執行./writ_to_server.sh -a "test217"

                  # 本次測試的服務端 hostname 是"test217",./writ_to_server.sh -h 可以查看對應參數:

                  生成數據參數(總記錄數=(t-e)*24*3600/ i * s)

                  i :數據間隔,默認10s

                  s :樣本數量,默認100

                  t : 數據起始時間,默認'2018-01-01T00:00:00Z'

                  e : 數據終止時間,默認'2018-01-02T00:00:00Z'

                  g : 是否生成數據,默認1(1:生成數據,0:不生成數據)

                  T :TDengine的默認數據目錄路徑,默認為"/var/lib/taos"

                  I :InfluxDB默認數據目錄路徑,默認為"/var/lib/influxdb"

                  寫入參數

                  b : batchsize(默認5000)

                  w : ?workers(默認16)

                  n : ?TDengine寫入方式(false:cgo,true:rest,默認false)

                  a : ?TDengine和InfluxDB的 hostname 或者ip地址,默認為127.0.0.1

                  如果希望自定義更多參數值,可以查看 write_to_server.sh 腳本代碼

                  1.3.5 生成查詢文件,并進行查詢測試,在build/tsdbcompare下運行腳本:

                  ./read_all.sh -a "test217"

                  腳本參數和 write_to_server.sh 一致。

                  2. 測試運行

                  運行該測試要求關閉 TDengine 系統日志,然后自動執行腳本即可。

                  在不同的場景之間切換時,會重啟數據庫后臺服務(Influxd/taosd),并清除 Linux 系統的全部緩存。

                  3. 對比測試結果

                  本小節說明運行測試腳本獲得的對比測試結果,并對結果進行了初步的分析。

                  對于測試結果,所有的響應是測試腳本自動記錄的時間,即該時間并不是單次查詢執行的響應時間,而是完成 1,000 次重復查詢最后獲得的時間。需要說明的是,由于整個測試持續時間較長,測試獲得的數據并非同一個時刻。不同的時間,測試程序運行過程中會受到云服務器所能發揮的最大性能影響,獲得的結果數據能看到有輕微的抖動,但是整體趨勢是一致的。

                  100 臺設備模擬生成的 1 天的數據集,在 TDengine 中生成了 900 個子表,每個設備間隔 10 s 生成一條數據,總記錄數是 7,776,000。

                  1,000 臺設備在 TDengine 中生成了 9,000 個子表,每個設備間隔 10 s 生成一條記錄,總記錄數是 77,760,000。

                  測試主要包括四個測試場景,分別是:

                  場景一:通過標簽過濾隨機篩選出 8 個時間線后,取其中的最大值。

                  場景二:隨機選取 1 h 時間區間,通過標簽隨機篩選出 8 個時間線,取其中的最大值。

                  場景三:隨機選取 12 h 的時間區間,通過標簽隨機篩選出 8 個時間線,使用 10 min 作為一個時間窗口,獲取每個時間窗口的最大值。

                  場景四:隨機選取 1 h 時間區間,通過標簽過濾隨機篩選出 8 個時間線,使用 1 min 為一個時間窗口,獲取每個時間窗口的最大值。

                  通過測試結果可以看出:整體來看,TDengine 在多種場景下(單線程、多線程)的性能均優于 InfluxDB。在極少的幾個情況下,TDengine 與 InfluxDB 的差異非常小。在更多的場景下,TDengine 擁有數倍的性能優勢,部分場景的性能優勢能達到 40 倍。

                  3.1 100 臺設備數據集查詢結果對比

                  本部分呈現的是,在 100 臺設備上模擬 1 天的數據生成的結果集上,運行測試程序所獲得的性能對比測試結果。

                  圖 1. 100 臺設備數據集上的查詢結果對比

                  由圖 ?1 ?可以看到,在所有的場景中,只有第三個測試場景單線程的時候 TDengine 查詢響應時間超過 InfluxDB,其他的場景均優于 InfluxDB,并且部分場景(場景二)下其查詢性能有著 40 倍的巨大優勢。具體的測試響應數據見附錄表 1。

                  圖 2. 不同場景下調整查詢線程獲得最終響應時間

                  在 1,000 個設備上測試結果顯示出 TDengine 仍然展現出較大的性能優勢,即使部分相對于 InfluxDB 較慢的場景(多線程場景下的場景四),其差距也非常小。而領先的部分,則仍然有巨大的性能優勢,最高的性能差達到近 20 倍,具體的查詢響應數據見附錄表 2。

                  3.2 擴展測試

                  在上述的兩個標準測試之外,我們基于現有的數據集合設計了一系列擴展測試,以期更全面準確地評估兩個數據庫產品在不同場景下的性能表現。在以下測試中,我們只使用 cgo 的運行測試結果。

                  3.2.1 標簽篩選量對查詢性能的影響

                  調整過濾 host 的數量,設定并行執行的 work 為 16,使用 1,000 個設備的數據集合執行全部查詢,所獲得的結果如下表所示。查詢響應時間單位為秒,數值越小越好。

                  圖 3. 不同場景下改變篩選時間線查詢響應時間

                  可以看到,隨著篩選的時間線的增加,InfluxDB 的查詢響應時間在四個測試場景均呈現快速增加的趨勢,而 TDengine 對于數據篩選規模的變大則呈現出相對穩定的查詢響應時間,并且隨著時間線篩選規模的擴大呈現出更大的優勢。 由此可以推斷,隨著查詢規模的繼續擴大,InfluxDB 的查詢響應時間還會繼續快速增加。各種場景下的查詢響應具體時間見表 3。

                  3.2.2 查詢時間窗口對查詢性能的影響

                  為了評估不同長度的時間窗口對查詢性能的影響,我們選取了第四個查詢場景,設定并行執行的 work 數量 16, 時間區間是隨機選取的 1 h / 2 h / 4 h / 8 h / 12 h 等連續時間段,單個聚合時間窗口維持在 1 min 不變。獲得的查詢響應時間如圖 4 所示。

                  圖 4. 改變查詢時間區間范圍對查詢響應的影響

                  由上圖可見,TDengine 相對于 InfluxDB 有更好的查詢性能,并且,隨著查詢時間區間的增加,TDengine 的領先優勢持續擴大,當查詢時間區間是 1 小時的時候,TDengine 只比 InfluxDB 快約 8%。但是當查詢區間增加到 12 小時的時候,TDengine 的查詢優勢已經擴大到近 2 倍。具體查詢響應時間見表 4。

                  3.2.3 復雜查詢性能表現

                  考慮到標準測試中只使用了較為簡單的查詢函數,我們使用多個查詢函數組合的復雜查詢,評估查詢性能。我們選取了第四個運行場景,隨機選取 1 h 的時間段,聚合時間窗口為 1 min,過濾篩選 8 個時間線進行查詢處理。

                  三個場景分別是:

                  max(value), count(value),first(value),last(value)

                  top(value, 10)

                  max(value),count(value),first(value),last(value),integral(value1)*spread(ts)/1000 ?在該場景中,TDengine 中沒有 integral 函數,因此采用 TWA(value) * Spread(value) / 1000 的計算方式進行了等效替代。此外,integral 函數查詢的是另一個列 value1,而不是 value。

                  圖 5. 不同查詢場景下的響應時間對比

                  由上圖的結果可以看到,在三種復雜函數組合的查詢條件下,TDengine 查詢性能均優于 InfluxDB。特別是在第一種組合場景中,TDengine 的性能是 InfluxDB 的 2.5 倍。具體的查詢響應時間見表 5。

                  3.2.4 數據讀取測試

                  在這個場景測試中,我們測試了 TDengine 和 InfluxDB 的數據讀取表現。針對全部數據集,不限定查詢時間范圍,調整標簽的過濾條件,投影查詢來獲取全部的數據內容。其結果如圖 6 所示。

                  圖 6. 不同數據規模的投影查詢響應時間

                  可以看到,在提取不同比例的情況下,TDengine 的總的時間開銷穩定在 InfluxDB 的 11% 左右,即該項測試的性能,TDengine 是 InfluxDB 的 8.78 倍,并且該優勢隨著時間線數量的增加而得到擴大,在 128 個時間線的時候,達到了 9.37 倍。即在更大數據規模的情況下,TDengine 展現出了更好的性能優勢。在時間線為 256 的時候,InfluxDB 最終未能完成測試運行,服務端出現了連接拒絕的問題,而TDengine也僅用時 365.61 s 就跑完該項測試。

                  4. 總結

                  在基于該對比測試框架下運行的測試中,展示出了 TDengine Database 相對于 InfluxDB 較大的性能優勢,特別是更加多樣化的條件和變量控制情況下的擴展測試中,我們看到 TDengine 一致性地表現出相對于 InfluxDB 的較大性能優勢。

                  附錄

                  對比測試運行的具體數據匯總如下:

                  表1. 100臺設備數據集上的查詢結果對比

                  表2. 1000臺設備數據集上的查詢結果對比

                  表3. 調整篩選標簽數量

                  表4. 不同長度的時間范圍查詢響應(秒)

                  表5. 復雜查詢性能表現

                  表6. 不同規模數據讀取性能表現(秒)

                  延伸閱讀
                  • HummingBird基于Go開源超輕量級 IoT 物聯網平臺

                    蜂鳥(HummingBird)?是 Go 語言實現的超輕量級物聯網開發平臺,包含設備接入、產品管理、物模型、告警中心、規則引擎等豐富功能模塊。系統采用GoLang編寫,占用內存極低,?單物理機可實現百

                  • 使用Apache Flink連接TDengine

                    小 T 導讀:想用 Flink 對接 TDengine?保姆級教程來了。0.前言TDengine 是由濤思數據開發并開源的一款高性能、分布式、支持 SQL 的時序數據庫(Time-Series Dat

                  • 58同城DBA團隊選擇TDengine解決傳感器數據處理難題

                    在 58 同城的駕考業務上,需要存儲分析駕校教練車傳感器產生的數據,這是典型的時序數據場景,開發人員對原有的 TiDB 性能并不是很滿意,因此 DBA 團隊開始調研更具針對性的時序數據庫?;谧陨淼臉I

                  關注公眾號:拾黑(shiheibook)了解更多

                  贊助鏈接:

                  關注數據與安全,洞悉企業級服務市場:https://www.ijiandao.com/
                  四季很好,只要有你,文娛排行榜:https://www.yaopaiming.com/
                  讓資訊觸達的更精準有趣:https://www.0xu.cn/

                  公眾號 關注網絡尖刀微信公眾號
                  隨時掌握互聯網精彩
                  贊助鏈接
                  一级毛片丰满奶头出奶水,国产成人精品午夜福利2010,亚洲欧美激情精品一区二区,色欲av无码蜜臀AV免费播放,夜夜爽夜夜叫夜夜高潮漏水,av无码aV高潮αV喷吹免费,无码vr熟妇人妻AV在线影片