一鍵獲取測試指令碼,輕鬆驗證“TSBS 時序資料庫效能基準測試報告”
基於 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 引數,不同場景下引數的設定如下表所示。
上述引數的設定,充分參考了《TimescaleDB vs. InfluxDB》(如下連結) 中推薦的配置引數設定,以確保能夠最大化寫入效能指標。
TimescaleDB vs. InfluxDB: Purpose Built Differently for Time-Series Data.
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 網路連線。配置簡表如下:
伺服器環境準備
為執行測試指令碼,伺服器 OS 需要是 ubuntu20 以上的系統。AWS EC2 的伺服器系統資訊如下:
- 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
- Gcc:gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04)
- 基礎環境,版本資訊為:Go1.16.9 , python3.8 , pip20.0.2 (無需手動安裝,測試指令碼將自動安裝)
- 編譯依賴:gcc , cmake, build-essential, git, libssl-dev (無需手動安裝,測試指令碼將自動安裝)
開始前請做兩個配置:
- client 和 server 配置 ssh 訪問免密,以便指令碼可不暴露密碼,可參考文件:免密配置( https://blog.csdn.net/qq_38154295/article/details/121582534)。
- 保證 client 和 server 之間所有埠開放。
獲取測試指令碼
為便於重複測試,隱藏繁瑣的下載、安裝、配置、啟動、彙總結果等細節,整個 TSBS 的測試過程被封裝成一個測試指令碼。 重複本測試報告,需要先下載該測試指令碼,指令碼暫支援 ubuntu20 以上的系統。以下操作要求具有 root 許可權。
- 在客戶端機器,進入測試目錄拉取程式碼,預設進入 /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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 搬瓦工 VPS 效能一鍵測試指令碼指令碼
- 資料庫基準測試工具 sysbench資料庫
- MYSQL 效能測試方法 - 基準測試(benchmarking)MySql
- TSBS 是什麼?為什麼時序資料庫 TDengine 會選擇它作為效能對比測試平臺?資料庫
- 聊一聊資料庫基準測試那些事資料庫
- 軟體產品驗收測試流程有哪些?如何獲取軟體驗收測試報告測試報告
- postgresql:pgbench基準效能測試SQL
- Shell指令碼 | 效能測試之啟動時間指令碼
- 移動App效能測試包含哪些內容?權威的軟體測試報告如何獲取?APP測試報告
- hadoop基準測試_Hadoop TeraSort基準測試Hadoop
- 第三方驗收測試報告有什麼作用?如何獲取權威軟體測試報告?測試報告
- iOS17 效能測試指令碼iOS指令碼
- 軟體測試報告包含哪些內容?如何獲取高質量軟體測試報告?測試報告
- 基準測試
- [python] request 介面測試自動化指令碼轉化為 [locust] 效能測試指令碼Python指令碼
- 軟體效能測試有哪些測試指標?效能測試報告怎麼編寫?指標測試報告
- 關於四種獲取當前執行方法名稱方案的基準測試報告測試報告
- 效能測試——壓測工具locust——指令碼初步編寫指令碼
- 禪道測試報告匯出 -- 油猴指令碼測試報告指令碼
- 效能測試報告編寫技巧測試報告
- 簡訊驗證碼測試項
- 軟體安全測試要交給第三方軟體測試嗎?安全測試報告報價獲取測試報告
- 濤思資料 TDengine 徵稿— 利用python指令碼做TDengine效能測試Python指令碼
- 資料庫效能測試:sysbench用法詳解資料庫
- 軟體效能測試報告應該包含的內容,效能測試報告需要多少錢?測試報告
- 軟體效能測試報告怎麼編寫?哪些機構可以出具效能測試報告測試報告
- postgresql無序uuid效能測試SQLUI
- 如何使用Selenium自動化測試工具獲取動態圖片驗證碼?
- Java基準效能測試--JMH使用介紹Java
- TGI 基準測試
- benchmark 基準測試
- MinkowskiEngine基準測試
- 軟體確認測試知識分享,如何獲取權威軟體測試報告?測試報告
- 介面測試的時候如何一鍵獲取 cookie, 並在其他介面引用?Cookie
- Eolink Apikit 快速發起 API 測試,一鍵生成測試資料API
- 阿里雲原生資料庫POLARDB壓力測試報告阿里資料庫測試報告
- 如何用 JMeter 編寫效能測試指令碼?JMeter指令碼
- DDT資料驅動效能測試(一)