六月婷婷AV,国产偷窥猎奇福利二区,日韩三级片。,好吊色网站,日韩成人中文在线视频,国产亚洲午夜啪啪,亚洲欧美另类国产精品,国产成人av1,任你艹在线观看

用InfluxDB開源的性能測試工具對比InfluxDB和TDengine

前言

TDengine Database開源項(xiàng)目里已經(jīng)包含了性能對比測試的工具源代碼。https://github.com/taosdata/TDengine/tests/comparisonTest,并基于這個開源的測試工具開展了TDengine和InfluxDB對比測試,TDengine和OpenTSDB對比測試,TDengine和Cassandra對比測試等一系列性能對比測試。為了更客觀的對比TDengine和其他時序數(shù)據(jù)庫(Time-Series Database)的性能差異,本項(xiàng)目采用由InfluxDB團(tuán)隊(duì)開源的性能對比測試工具來進(jìn)行對比測試,相同的數(shù)據(jù)產(chǎn)生器,相同的測試用例,相同的測試方法,以保證測試的客觀公平。

簡介

本項(xiàng)目是基于InfluxDB發(fā)布的一個性能對比測試項(xiàng)目的基礎(chǔ)上開發(fā)的。數(shù)據(jù)產(chǎn)生模塊可以模擬Devops場景下多臺服務(wù)器產(chǎn)生大量監(jiān)控?cái)?shù)據(jù)。數(shù)據(jù)寫入程序可以根據(jù)不同的數(shù)據(jù)庫格式,將產(chǎn)生的模擬數(shù)據(jù)以不同的格式寫入到不同數(shù)據(jù)庫里,以測試寫入性能。查詢模塊以相同的查詢類型產(chǎn)生相同的查詢?nèi)蝿?wù),以各數(shù)據(jù)庫自己的格式進(jìn)行查詢,并統(tǒng)計(jì)查詢消耗的時間,來測試查詢性能。

為了讓測試過程更簡單,本測試采用Docker容器方式來測試,所有被測的數(shù)據(jù)庫都以容器的方式,從Dockerhub拉取下來,并設(shè)定固定的IP地址運(yùn)行,便于腳本執(zhí)行。容器鏡像都是公開發(fā)布的,能保證測試的公平公正。

本測試項(xiàng)目目前支持以下時序數(shù)據(jù)庫的對比測試

  • InfluxDB
  • TDengine

本項(xiàng)目的Github鏈接:https://github.com/liu0x54/timeseriesdatabase-comparisons

前提條件

為了開展測試,需要準(zhǔn)備以下條件

  • 一臺Linux服務(wù)器,包含10GB的空閑硬盤空間,用于存儲產(chǎn)生的測試數(shù)據(jù)。因?yàn)闇y試模擬數(shù)據(jù)先生成并寫入硬盤文件,由數(shù)據(jù)加載程序從文件中讀取一條條的數(shù)據(jù)寫入語句,寫入時序數(shù)據(jù)庫。這種方式能夠?qū)?shù)據(jù)產(chǎn)生過程中的性能差異排除。
  • root權(quán)限。測試過程需要用root權(quán)限來安裝一個TDengine的客戶端驅(qū)動,用于TDengine數(shù)據(jù)加載程序的調(diào)用。TDengine數(shù)據(jù)寫入采用Go語言調(diào)用C語言連接器的方式。

準(zhǔn)備測試

先從下載地址下載我們已經(jīng)制作好的測試工具包,解壓到本地。

tar -zxf tsdbcompare.tar.gz

解壓后的目錄結(jié)構(gòu)如下:

用InfluxDB開源的性能測試工具對比InfluxDB和TDengine - TDengine Database 時序數(shù)據(jù)庫

bin 目錄里是提前編譯好的可執(zhí)行文件,包括數(shù)據(jù)產(chǎn)生,數(shù)據(jù)加載,查詢產(chǎn)生和查詢加載。提前編譯好方便大家下載即可用;如果有興趣的同學(xué)也可以自己從源文件編譯。源文件位于cmd下面的各個子目錄里??梢宰孕芯幾g后替換bin目錄的文件。

config 目錄里是TDengine寫入數(shù)據(jù)需要用到的schema配置文件,模擬數(shù)據(jù)產(chǎn)生的數(shù)據(jù)通過schema配置里的信息可以知道該往哪個表里存。

data 目錄是用來存儲測試過程中產(chǎn)生的數(shù)據(jù)文件。本測試采用先產(chǎn)生模擬數(shù)據(jù),并將模擬數(shù)據(jù)按各數(shù)據(jù)庫的寫入格式寫到文件里,再用加載程序從文件里讀取按格式寫好的語句往各數(shù)據(jù)庫里加載的方式來開展測試。這樣的方法,能夠?qū)⒃紨?shù)據(jù)轉(zhuǎn)換成不同的格式的過程帶來的差異進(jìn)行屏蔽,更純粹的對比數(shù)據(jù)庫的寫入性能。

prepare.sh 是用來準(zhǔn)備測試環(huán)境的腳本,包含三部分,1.安裝docker程序,2.安裝TDengine的客戶端,3.拉取InfluxDB和TDengine的Docker鏡像。

#!/bin/bash
set -x
#install docker
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh

#install tdengine client
tar -zxf TDengine-client-1.6.4.5.tar.gz
cd TDengine-client-1.6.4.5
./install_client.sh
cd ..
#pull influxdb and tdengine docker images
docker pull influxdb
docker pull tdengine/tdengine:v1.6.4.5.c

如果目標(biāo)系統(tǒng)上已經(jīng)安裝了docker程序,就不用執(zhí)行這個prepare.sh腳本了,可以直接按腳本里的第二、三部分去安裝TDengine Client和拉取對應(yīng)的Docker鏡像。

在上面的步驟都執(zhí)行完成,并確認(rèn)成功后,可以開展測試工作了。

注意事項(xiàng):

1.如果系統(tǒng)里已經(jīng)安裝了其他版本的TDengine,請先卸載TDengine,否則會因?yàn)榭蛻舳撕头?wù)端版本不一致導(dǎo)致測試數(shù)據(jù)加載程序連接TDengine失敗。

2.要確認(rèn)TDengine-client-1.6.4.5.tar.gz安裝成功,因?yàn)楸敬螠y試的加載和查詢程序都是用的這個版本的client端lib庫進(jìn)行編譯的,如果版本不匹配,會導(dǎo)致連接TDengine失敗

3.啟動前請先將系統(tǒng)里運(yùn)行的InfluxDB、TDengine停止下來,釋放出這倆個數(shù)據(jù)庫占用的端口,否則Docker container加載的時候會因?yàn)槎丝诒徽加昧藢?dǎo)致加載失敗,從而無法完成測試。

開展測試

在整個測試過程中,建議另開一個終端,運(yùn)行top,查看系統(tǒng)的CPU和內(nèi)存占用情況。

寫入測試

本測試包提供了一個run.sh腳本,自動執(zhí)行將docker容器按指定IP地址運(yùn)行起來,然后產(chǎn)生數(shù)據(jù),寫入數(shù)據(jù)文件,并寫入時序數(shù)據(jù)庫。 數(shù)據(jù)產(chǎn)生和寫入由以下兩條命令完成

#產(chǎn)生模擬數(shù)據(jù)并寫入數(shù)據(jù)文件
bin/bulk_data_gen -seed 123 -format influx-bulk -sampling-interval 1s -scale-var 10 -use-case devops -timestamp-start "2018-01-01T00:00:00Z" -timestamp-end "2018-01-02T00:00:00Z" >data/influx.dat
bin/bulk_data_gen -seed 123 -format tdengine -sampling-interval 1s -tdschema-file config/TDengineSchema.toml -scale-var 10 -use-case devops -timestamp-start "2018-01-01T00:00:00Z" -timestamp-end "2018-01-02T00:00:00Z" > data/tdengine.dat

解釋一下以上的命令:按influxDB/TDengine的格式,以1秒一條數(shù)據(jù)的產(chǎn)生頻率,模擬10臺設(shè)備,以devops場景產(chǎn)生24小時的數(shù)據(jù),并寫入influx.dat文件。 Devops模型下,一臺服務(wù)器會產(chǎn)生9類數(shù)據(jù),分別是cpu,disk,mem,等,因此總共會產(chǎn)生7776000條數(shù)據(jù)記錄。 數(shù)據(jù)文件完成后,就開始數(shù)據(jù)寫入測試:

#數(shù)據(jù)寫入數(shù)據(jù)庫
cat data/influx.dat |bin/bulk_load_influx --batch-size=5000 --workers=20 --urls="http://172.15.1.5:8086"
cat data/tdengine.dat |bin/bulk_load_tdengine --url 172.15.1.6:0 --batch-size 300 -do-load -report-tags n1 -workers 20 -fileout=false

上面命令的含義是以每批次寫入5000/300條記錄,分20個線程,將數(shù)據(jù)文件讀取出來后寫入influxDB/TDengine中

查詢測試

在完成寫入后,就開始查詢測試。 查詢測試設(shè)定了四個查詢用例的語句,每個查詢語句都執(zhí)行1000遍,然后統(tǒng)計(jì)總的查詢用時:

測試用例1,

查詢所有數(shù)據(jù)中,用8個hostname標(biāo)簽進(jìn)行匹配,匹配出這8個hostname對應(yīng)的模擬服務(wù)器CPU數(shù)據(jù)中的usage_user這個監(jiān)控?cái)?shù)據(jù)的最大值。

#TDengine
bin/bulk_query_gen -seed 123 -format tdengine -query-type 8-host-all -scale-var 10 -queries 1000 | bin/query_benchmarker_tdengine -urls="http://172.15.1.6:6020" -workers 50 -print-interval 0
#InfluxDB
bin/bulk_query_gen -seed 123 -format influx-http -query-type 8-host-all -scale-var 10 -queries 1000 | bin/query_benchmarker_influxdb -urls="http://172.15.1.5:8086" -workers 50 -print-interval 0

測試用例2,

查詢所有數(shù)據(jù)中,用8個hostname標(biāo)簽進(jìn)行匹配,匹配出這8個hostname對應(yīng)的模擬服務(wù)器CPU數(shù)據(jù)中的usage_user這個監(jiān)控?cái)?shù)據(jù),以1小時為粒度,查詢每1小時的最大值。

#TDengine
bin/bulk_query_gen -seed 123 -format tdengine -query-type 8-host-allbyhr -scale-var 10 -queries 1000 | bin/query_benchmarker_tdengine -urls="http://172.15.1.6:6020" -workers 50 -print-interval 0
#InfluxDB
bin/bulk_query_gen -seed 123 -format influx-http -query-type 8-host-allbyhr -scale-var 10 -queries 1000 | bin/query_benchmarker_influxdb -urls="http://172.15.1.5:8086" -workers 50 -print-interval 0

測試用例3,

隨機(jī)查詢12個小時的數(shù)據(jù),用8個hostname標(biāo)簽進(jìn)行匹配,匹配出這8個hostname對應(yīng)的模擬服務(wù)器CPU數(shù)據(jù)中的usage_user這個監(jiān)控?cái)?shù)據(jù),以10分鐘為粒度,查詢每10分鐘的最大值。

#TDengine
bin/bulk_query_gen -seed 123 -format tdengine -query-type 8-host-12-hr -scale-var 10 -queries 1000 | bin/query_benchmarker_tdengine -urls="http://172.15.1.6:6020" -workers 50 -print-interval 0
#InfluxDB
bin/bulk_query_gen -seed 123 -format influx-http -query-type 8-host-12-hr -scale-var 10 -queries 1000 | bin/query_benchmarker_influxdb -urls="http://172.15.1.5:8086" -workers 50 -print-interval 0

測試用例4,

隨機(jī)查詢1個小時的數(shù)據(jù),用8個hostname標(biāo)簽進(jìn)行匹配,匹配出這8個hostname對應(yīng)的模擬服務(wù)器CPU數(shù)據(jù)中的usage_user這個監(jiān)控?cái)?shù)據(jù),以1分鐘為粒度,查詢每1分鐘的最大值。

#TDengine
bin/bulk_query_gen -seed 123 -format tdengine -query-type 8-host-1-hr -scale-var 10 -queries 1000 | bin/query_benchmarker_tdengine -urls="http://172.15.1.6:6020" -workers 50 -print-interval 0
#InfluxDB
bin/bulk_query_gen -seed 123 -format influx-http -query-type 8-host-1-hr -scale-var 10 -queries 1000 | bin/query_benchmarker_influxdb -urls="http://172.15.1.5:8086" -workers 50 -print-interval 0

查詢過程結(jié)束后,將測試結(jié)果以以下格式打印出來

用InfluxDB開源的性能測試工具對比InfluxDB和TDengine - TDengine Database 時序數(shù)據(jù)庫

結(jié)果分析

通過本測試包產(chǎn)生的數(shù)據(jù)和相關(guān)的寫入、查詢用例測試可以看出,TDengine在性能上相比InfluxDB有較大的優(yōu)勢。

用InfluxDB開源的性能測試工具對比InfluxDB和TDengine - TDengine Database 時序數(shù)據(jù)庫

細(xì)致分析下來可以有以下結(jié)論:

  • 寫入性能:相同數(shù)據(jù)源InfluxDB寫入用時約是TDengine的4倍
  • 全部數(shù)據(jù)聚合計(jì)算查詢:InfluxDB查詢用時約為TDengine的80倍
  • 全部數(shù)據(jù)聚合計(jì)算查詢以小時為顆粒聚合結(jié)果:InfluxDB查詢用時約為TDengine的10倍
  • 隨機(jī)選取12小時的數(shù)據(jù)聚合計(jì)算查詢以10分鐘為顆粒聚合結(jié)果:InfluxDB用時約為TDengine的6倍
  • 隨機(jī)選取1小時的數(shù)據(jù)聚合計(jì)算查詢以1分鐘為顆粒聚合結(jié)果:InfluxDB用時約為TDengine的2.5倍

通過top命令的觀察,我們可以看到,測試用例執(zhí)行時,InfluxDB的CPU占用率基本達(dá)到滿負(fù)荷,以4核CPU的服務(wù)器為例,經(jīng)常達(dá)到390%以上;而TDengine的CPU占用率則低很多。