一鍵獲取測試指令碼,輕鬆驗證“TSBS 時序資料庫效能基準測試報告”

TDengine發表於2023-03-31

基於 TDengine 3.0 TSBS 基準測試報告,此前我們已經輸出了系列文——為什麼選擇 TSBS 作為測試平臺、寫入效能對比、查詢效能對比,分別就 TSBS 及測試環境、寫入效能及開銷、查詢效能及開銷進行了相關解讀。在本篇文章中,我們將為想要驗證本報告測試結果的小夥伴,分享進行報告測試復現的詳細步驟。

資料建模

在 TSBS 框架中, TimescaleDB 和 InfluxDB 會自動建立相應的資料模型並生成對應格式的資料。本文不再贅述其具體的資料建模方式,只介紹 TDengine 的資料建模策略。

TDengine 一個重要的創新是其獨特的資料模型——為每個裝置建立獨立的資料表(子表),並透過超級表(Super Table)在邏輯上和語義上對同一採集型別的裝置進行統一管理。針對 DevOps 場景的資料內容,我們為每個裝置 (這裡是 CPU)建立了一個表,用以儲存該表的時序資料。我們在 TDengine 中使用 hostname 作為子表的名稱(因為hostname 可以作為每個裝置的標識 ID),並使用如下的語句建立名為 CPU 的超級表,包含 10 個測量值和 10 個標籤。

create stable cpu (ts timestamp,usage_user bigint,usage_system bigint,usage_idle bigint,usage_nice bigint,usage_iowait bigint,usage_irq bigint,usage_softirq bigint,usage_steal bigint,usage_guest bigint,usage_guest_nice bigint)tags (hostname varchar(30), region varchar(30),datacenter varchar(30),rack varchar(30),os varchar(30),arch varchar(30),team varchar(30),service varchar(30),service_version varchar(30),service_environment varchar(30))

然後 ,我們使用如下語句建立名為 host_0 的子表:

create table host_0 using cpu (hostname,region,datacenter,rack,os,arch,team,service,service_version,service_environment)tags ('host_0','eu-central-1','eu-central-1a','6','Ubuntu15.10','x86','SF','19','1','test')

上述語句建立了一個子表。由此可知,對於 100 個裝置(CPU)的場景 一,我們將會建立 100 個子表。對於 4000 個裝置的場景二,系統中將會建立 4000 個子表用以儲存各自對應的資料 。

軟體版本和配置

本報告僅僅比較 TDengine ( Time Series Database )、InfluxDB 與 TimeScaleDB, 下面對使用的版本和配置做出說明。

TDengine

我們直接採用 TDengine Ver3.0,從 GitHub 克隆 TDengine 程式碼編譯版本作為效能對比的版本。

gitinfo: c90e2aa791ceb62542f6ecffe7bd715165f181e8

在伺服器上編譯安裝執行。

cmake .. -DDISABLE_ASSERT=true -DSIMD_SUPPORT=true -DCMAKE_BUILD_TYPE=Release  -DBUILD_TOOLS=falsemake -j  && make install

在 TDengine 的配置檔案中設定了四個涉及查詢的配置引數。

numOfVnodeFetchThreads           4queryRspPolicy                   1compressMsgSize             128000SIMD-builtins                    1

引數設定解讀:

  • numOfVnodeFetchThreads 設定了 Vnode 的 Fetch 執行緒數量為 4 個,
  • queryRspPolicy 用來開啟 query response 快速返回機制
  • compressMsgSize 的作用是自動壓縮 TDengine 在傳輸層上大於 128,000 bytes 的訊息
  • 如果 CPU 支援,SIMD-builtins 可以啟用內建的 FMA/AVX/AVX2 硬體加速

如上所述,TDengine 建庫預設建立 6 個 vnodes,即建立的表會按照表名隨機分配到 6 個虛擬節點(virtual node, VNode) 中。開啟 LRU 快取,設定為 last_row 快取模式。對於場景一和場景二,stt_trigger 設定為 1,此時 TDengine 會準備一個 Sorted Time-series Table (STT) 檔案,當單表寫入量小於 minimum rows 時,資料會直接儲存在 STT 檔案中,當 STT 檔案中無法容納新資料時,系統就會將 STT 中的資料整理後再寫入到資料檔案中。對於其他的場景(場景三、四、五),stt_trigger 設定為 8,即允許最多生成 8 個 STT 檔案。 針對表較多的場景,需要適度增加 STT 的值,以此來獲得更好的寫入效能。

TimescaleDB

為確保結果具有可比性,我們選用 TimescaleDB 版本 version 2.6.0。為獲得較好的效能,TimescaleDB 需要針對不同的場景設定不同的 Chunk 引數,不同場景下引數的設定如下表所示。

一鍵獲取測試指令碼,輕鬆驗證“TSBS 時序資料庫效能基準測試報告” - TDengine Database 時序資料庫

上述引數的設定,充分參考了《TimescaleDB vs. InfluxDB》(如下連結) 中推薦的配置引數設定,以確保能夠最大化寫入效能指標。

TimescaleDB vs. InfluxDB: Purpose Built Differently for Time-Series Data. 

https://www.timescale.com/blog/timescaledb-vs-influxdb-for-time-series-data-timescale-influx-sql-nosql-36489299877/

InfluxDB

我們選擇了 InfluxDB version 1.8.10。這裡沒有使用 InfluxDB 最新的 2.x 版本是因為 TSBS 沒有對其進行適配,所以選用了 InfluxDB 能夠執行 TSBS 框架的最新版本。同樣,我們採用《TimescaleDB vs. InfluxDB》中推薦的方式配置 InfluxDB,將緩衝區配置為 80G,以便 1000W 裝置寫入時能夠順利進行,同時開啟 Time Series Index(TSI)。配置系統在系統插入資料完成 30s 後開始資料壓縮。

cache-max-memory-size = "80g"max-values-per-tag = 0index-version = "tsi1"compact-full-write-cold-duration = "30s"

測試步驟

硬體準備

為達到與 TimescaleDB vs. InfluxDB 對比報告中的環境高度接近,我們使用亞馬遜 AWS 的 EC2 提供的 r4.8xlarge 型別例項作為基礎執行平臺,包括 1 臺伺服器、1 臺客戶端共兩個節點構成的環境。客戶端與伺服器硬體配置完全相同,客戶端與伺服器使用 10 Gbps 網路連線。配置簡表如下:

一鍵獲取測試指令碼,輕鬆驗證“TSBS 時序資料庫效能基準測試報告” - TDengine Database 時序資料庫

伺服器環境準備

為執行測試指令碼,伺服器 OS 需要是 ubuntu20 以上的系統。AWS EC2 的伺服器系統資訊如下:

  1. OS: Linux tv5931 5.15.0-1028-aws #32~20.04.1-Ubuntu SMP Mon Jan 9 18:02:08 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux
  2. Gcc:gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04)
  3. 基礎環境,版本資訊為:Go1.16.9 , python3.8 , pip20.0.2 (無需手動安裝,測試指令碼將自動安裝)
  4. 編譯依賴:gcc , cmake, build-essential, git, libssl-dev (無需手動安裝,測試指令碼將自動安裝)

開始前請做兩個配置:

  1. client 和 server 配置 ssh 訪問免密,以便指令碼可不暴露密碼,可參考文件:免密配置( https://blog.csdn.net/qq_38154295/article/details/121582534)。
  2. 保證 client 和 server 之間所有埠開放。

獲取測試指令碼

為便於重複測試,隱藏繁瑣的下載、安裝、配置、啟動、彙總結果等細節,整個 TSBS 的測試過程被封裝成一個測試指令碼。 重複本測試報告,需要先下載該測試指令碼,指令碼暫支援 ubuntu20 以上的系統。以下操作要求具有 root 許可權。

  1. 在客戶端機器,進入測試目錄拉取程式碼,預設進入 /usr/local/src/ 目錄:
cd /usr/local/src/ && apt install git && git clone

2. 修改配置檔案 test.ini 中服務端和客戶端的 IP 地址(這裡配置 AWS 的私網地址即可)和 hostname,如果伺服器未配置免密,還需要配置伺服器端的 root 密碼:

clientIP="192.168.0.203"   #client ipclientHost="trd03"         #client hostnameserverIP="192.168.0.204"   #server ipserverHost="trd04"         #server hostnameserverPass="taosdata123"   #server root password

一鍵執行對比測試

執行以下命令:

nohup bash tsdbComparison.sh > test.log &

測試指令碼將自動安裝 TDengine、InfluxDB、TimeScaleDB 等軟體,並自動執行各種對比測試項。在目前的硬體配置下,整個測試跑完需要大約一天半的時間。 測試結束後,將自動生成 CSV 格式的對比測試報告,並存放在客戶端的 /data2 目錄。

寫在最後

閱讀完畢,你一定更加深入地瞭解了 TDengine 的資料建模、三大資料庫測試版本和配置,以及如何運用測試指令碼進行一鍵復現。如果有小夥伴想要驗證 TDengine 的報告結果,歡迎按照上述步驟進行操作,檢驗測試結果,有任何問題都歡迎大家和我們及時溝通。現在新增 小T vx:tdengine1,可以邀請你加入 TDengine 使用者交流群,和更多志同道合的開發者一起聊技術、聊實戰。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70014783/viewspace-2942962/,如需轉載,請註明出處,否則將追究法律責任。

相關文章