一文走進(jìn)時(shí)序數(shù)據(jù)庫(kù)性能測(cè)試工具 TSBS

?一、背景
在物聯(lián)網(wǎng)、車聯(lián)網(wǎng)等時(shí)序數(shù)據(jù)場(chǎng)景中,數(shù)據(jù)的高速寫入能力至關(guān)重要,會(huì)對(duì)產(chǎn)品方案的可用性、可靠性和擴(kuò)展性產(chǎn)生影響。
以物聯(lián)網(wǎng)為例,當(dāng)面臨千萬(wàn)甚至上億設(shè)備、平均每個(gè)設(shè)備采集幾十個(gè)到幾百個(gè)指標(biāo)時(shí),每秒生成的數(shù)據(jù)將達(dá)到數(shù)十億至數(shù)百億。能否及時(shí)可靠的插入這種量級(jí)的數(shù)據(jù),是評(píng)價(jià)一個(gè)時(shí)序數(shù)據(jù)庫(kù)的核心要素和第一需求。
因此,對(duì)于時(shí)序數(shù)據(jù)庫(kù)的性能進(jìn)行測(cè)試也就尤為重要,TSBS?作為一款對(duì)時(shí)序數(shù)據(jù)庫(kù)批量加載性能和查詢執(zhí)行性能的開(kāi)源測(cè)試工具,得到了越來(lái)越多的應(yīng)用。
二、TSBS 介紹
Time Series Benchmark Suite (TSBS) 是一個(gè)使用 go 語(yǔ)言編寫的,用于生成時(shí)序數(shù)據(jù)集的基準(zhǔn)測(cè)試工具,可以對(duì)各種時(shí)序數(shù)據(jù)庫(kù)的讀寫性能進(jìn)行基準(zhǔn)測(cè)試。TSBS 具有可擴(kuò)展性, 可以對(duì)各種時(shí)序數(shù)據(jù)場(chǎng)景(例如 devops,IoT 等)進(jìn)行批量寫入性能和查詢執(zhí)行性能基準(zhǔn)測(cè)試。
目前 TSBS 支持 IOT 及 Devops 兩種場(chǎng)景:
IoT 場(chǎng)景:模擬物聯(lián)網(wǎng)環(huán)境中的數(shù)據(jù)負(fù)載,這個(gè)用例模擬來(lái)自一個(gè)虛構(gòu)的卡車公司的一組卡車的數(shù)據(jù)流,包括來(lái)自每輛卡車的診斷數(shù)據(jù)和指標(biāo),并引入了相關(guān)的環(huán)境因素,例如 out-of-order 數(shù)據(jù)和批量攝取(對(duì)于離線一段時(shí)間的卡車)。它還跟蹤卡車元數(shù)據(jù),并使用它將度量和診斷作為查詢集的一部分聯(lián)系在一起。
Devops 場(chǎng)景:“開(kāi)發(fā)操作”用例,有兩種形式。完整形式用于生成、插入和測(cè)量 9 個(gè)“系統(tǒng)”中的數(shù)據(jù),這些數(shù)據(jù)可以在真實(shí)的devops場(chǎng)景(e.g.、CPU、內(nèi)存、磁盤等)中進(jìn)行監(jiān)控。這 9 個(gè)系統(tǒng)一起在每個(gè)讀取間隔生成 100 個(gè)度量。另一種形式只關(guān)注CPU指標(biāo),以實(shí)現(xiàn)更簡(jiǎn)單、更精簡(jiǎn)的用例。這個(gè)用例每次讀取生成 10 個(gè) CPU 指標(biāo)。除了度量讀數(shù)之外,還為數(shù)據(jù)集中的每個(gè)主機(jī)生成“標(biāo)記”(包括主機(jī)的位置、操作系統(tǒng)等)。
目前支持的數(shù)據(jù)庫(kù):
Akumulie
Cassandrae
ClickHousee
CrateDBe
InfluxDB
MongoDB
SiriDBe
TimescaleDB
VictoriaMetricse
未支持 TSBS 的時(shí)序數(shù)據(jù)庫(kù),可自行適配數(shù)據(jù)庫(kù)類型后開(kāi)展性能測(cè)試工作。
三、TSBS 測(cè)試工具
1. TSBS 測(cè)試工具安裝
(1)使用 go get 對(duì) TSBC 及其相關(guān)應(yīng)用進(jìn)行下載
(2)切換到 cmd 下使用 go install 進(jìn)行部分應(yīng)用的安裝
(3)切換到 cmd 下使用 go install 進(jìn)行剩下的安裝
2. TSBS 測(cè)試工具使用
TSBS 基準(zhǔn)測(cè)試分為 3 個(gè)階段:數(shù)據(jù)生成和查詢語(yǔ)生成、數(shù)據(jù)寫入/插入測(cè)試、查詢測(cè)試。下面 TSBS 測(cè)試工具三個(gè)階段的使用以 IOT 場(chǎng)景和 timescaledb 數(shù)據(jù)庫(kù)為例進(jìn)行介紹。
(1)數(shù)據(jù)生成
通過(guò) TSBS 生成基準(zhǔn)測(cè)試的數(shù)據(jù),將其作為基準(zhǔn)測(cè)試階段的輸入。需要的變量,如下:
--use-case:使用場(chǎng)景,包括iot、devops、cpu-only,例如iot;
--seed:用于確定性生成的 PRNG 種子。例如:123;
--scale:要生成的卡車/設(shè)備數(shù)量。例如:50000;
--timestamp-start:數(shù)據(jù)中時(shí)間戳的開(kāi)始時(shí)間。例如:2016-01-01T00:00:00Z;
--timestamp-end:數(shù)據(jù)中時(shí)間戳的結(jié)束時(shí)間。例如:2016-01-01T00:10:00Z;
--log-interval:每個(gè)設(shè)備的每次讀取之間應(yīng)該間隔多長(zhǎng)時(shí)間,以秒為單位。例如:10s;
--format:需要生成的數(shù)據(jù)庫(kù),例如: timescaledb。
可自行設(shè)置變量在自定義目錄下生成數(shù)據(jù)文件,示例:如使用上述變量生成數(shù)據(jù)集(在自定義目錄/tmp/下生成 tsdb-data 數(shù)據(jù)文件)。
上面示例會(huì)生成一個(gè)偽 -CSV 文件,用于將數(shù)據(jù)批量加載到 TimescaleDB 中。每個(gè)數(shù)據(jù)庫(kù)都有自己的格式,用于存儲(chǔ)數(shù)據(jù),使其數(shù)據(jù)庫(kù)對(duì)應(yīng)的加載器最容易寫入數(shù)據(jù)。
(2)查詢生成
需要的變量,如下:
與數(shù)據(jù)生成中的用例、卡車數(shù)量、開(kāi)始時(shí)間相同;
--timestamp-end:數(shù)據(jù)生成后一秒的結(jié)束時(shí)間,例如:對(duì)于 2016-01-01T00:10:00Z 使用 2016-01-01T00:10:01Z;
--queries:生成的SQL語(yǔ)句的查詢數(shù),例如:1000;
--query-type:要生成的SQL語(yǔ)句查詢類型,例如:" specific-sub-table ";
例如:下列為生成?timescaledb?單類型一組查詢的例子,可以通過(guò)改變查詢類型?--query-type?一項(xiàng)來(lái)生成其他查詢語(yǔ)句類型(查詢類型的完整列表見(jiàn)末尾附錄內(nèi)容):
(3)數(shù)據(jù)插入/寫入測(cè)試
TSBS 通過(guò)獲取上一步中生成的數(shù)據(jù)并將其用作特定于數(shù)據(jù)庫(kù)的命令行程序的輸入來(lái)測(cè)量插入/寫入性能。tsbs_load 可執(zhí)行文件可以在任何受支持的數(shù)據(jù)庫(kù)中加載數(shù)據(jù)??墒褂妙A(yù)生成的數(shù)據(jù)文件作為輸入。每個(gè)加載程序確實(shí)共享一些公共標(biāo)志——例如,batch-size 批處理大?。ㄒ黄鸩迦氲淖x取數(shù))、worker(并發(fā)插入的客戶端的數(shù)量)、連接詳細(xì)信息(主機(jī)和端口)等。要查找特定數(shù)據(jù)庫(kù)的標(biāo)志,請(qǐng)使用 -help 標(biāo)志(例如,tsbs_load_timescaledb -help)。
例如:
會(huì)在 TimescaleDB 中創(chuàng)建一個(gè)名為 benchmark 的新數(shù)據(jù)庫(kù),存儲(chǔ)數(shù)據(jù)。在加載完整數(shù)據(jù)集時(shí)除最后兩行之外的所有行都包含 CSV 格式的數(shù)據(jù),標(biāo)題中包含列名。這些列名對(duì)應(yīng)于:時(shí)間戳、期間每秒的指標(biāo)、插入總指標(biāo)、每秒總體指標(biāo)、期間每秒行數(shù)、總行數(shù)、每秒總行數(shù)。最后兩行為插入指標(biāo)數(shù)目(和適用的行),時(shí)間和平均寫入速率??梢酝ㄟ^(guò)更改 --workers 的值以控制同時(shí)運(yùn)行的并行 load 的級(jí)別,通過(guò)更改 --partitions 的值改變分區(qū)數(shù)。
(4)查詢測(cè)試
要測(cè)量 TSBS 中的查詢執(zhí)行性能,您首先需要使用上一節(jié)加載數(shù)據(jù)并生成如前所述的查詢。加載數(shù)據(jù)并生成查詢后,只需為正在測(cè)試的數(shù)據(jù)庫(kù)使用相應(yīng)的 tsbs_run_queries_ 二進(jìn)制文件,通過(guò)更改數(shù)據(jù)庫(kù)以及數(shù)據(jù)庫(kù)對(duì)應(yīng)自定義目錄下生成的查詢語(yǔ)句類型來(lái)實(shí)現(xiàn)各類型的查詢性能測(cè)試。缺少的條件也可以根據(jù) -help 進(jìn)行查詢。
例如:
對(duì)于 timescaledb 數(shù)據(jù)庫(kù)查詢“specific-sub-table”:
可以通過(guò)更改 --workers 的值以控制同時(shí)運(yùn)行的并行查詢的級(jí)別。
四、實(shí)踐
1. 測(cè)試環(huán)境

?
2. 導(dǎo)入性能測(cè)試
測(cè)試使用 TSBS 測(cè)試工具生成 IoT 場(chǎng)景下卡車運(yùn)輸公司的卡車數(shù)據(jù)集(約 9.9G),測(cè)試:TimescaleDB 在 workes=2 下 partitions 分別為 1、50、100、150 下的導(dǎo)入/查詢性能;
workes=1、2、4、8 下 TimescaleDB 的導(dǎo)入/查詢性能。
測(cè)試結(jié)果:

workers=2 下 TimescaleDB 測(cè)試不同 partitions,partitions=50?下具有最優(yōu)導(dǎo)入性能。具體如下圖所示:

在 partitions=50 時(shí)測(cè)試不同 workers 下 TimescaleDB 的導(dǎo)入性能,TimescaleD 導(dǎo)入性能如下所示:


3. 查詢性能測(cè)試
測(cè)試 workers=2,不同 partitions(1, 50, 100, 150)下 TimescaleDB 的查詢性能;
不同 workers(1, 2, 4, 8)下 TimescaleDB 的查詢性能。
(1)查詢語(yǔ)句:
query-specific-sub-table:
query-stationary-trucks-avg-velocity:
(2)測(cè)試結(jié)果:
query-stationary-trucks-avg-velocity:


specific-sub-table:


?
五、查詢類型
1. Devops/cpu-only

2.?IoT
