无码人妻精品一区二区三18禁,影音先锋男人AV橹橹色,污污污污污污www网站免费,日韩成人av无码一区二区三区,欧美性受xxxx狂喷水

TDengine與InfluxDB對比測試

摘要:為(wei)(wei)(wei)幫助用戶了(le)解TDengine Database的(de)指標,特將TDengine與InfluxDB從數(shu)據庫的(de)讀(du)、寫、查(cha)(cha)詢、壓縮比等方面進(jin)行了(le)對(dui)比測試(shi)(shi)。從測試(shi)(shi)結(jie)果上看,TDengine的(de)性(xing)能遠超InfluxDB,寫入性(xing)能約(yue)為(wei)(wei)(wei)5倍,讀(du)取性(xing)能約(yue)為(wei)(wei)(wei)35倍,聚(ju)合函(han)數(shu)性(xing)能約(yue)為(wei)(wei)(wei)140倍,按(an)標簽分組查(cha)(cha)詢性(xing)能約(yue)為(wei)(wei)(wei)250倍,按(an)時間分組查(cha)(cha)詢性(xing)能約(yue)為(wei)(wei)(wei)12倍。

測試環境

對比測(ce)試的(de)(de)測(ce)試程序和(he)數據(ju)庫(ku)服務在同(tong)一臺4核8GB的(de)(de)Dell臺式機上部署,臺式機型(xing)號為OptiPlex-3050,詳細配置如下(xia)

OS: Ubuntu 16.04 x64
CPU: Intel(R) Core(TM) i3-7100 CPU @ 3.90GHz
Memory: 8GB
Disk: 1TB HDD

測試數據集及其生成方法

1.測試數據生成方法

本(ben)次測(ce)試調研了兩類比較熱門的(de)測(ce)試數據(ju)集

  • 紐約出租車運行數據,因該數據中抹去了單臺車輛的信息,無法對其進行建模
  • faker生成工具,因其只能生成字符串,并不適合物聯網場景下處理的數據

所(suo)以(yi),為使測試可輕易重復,單獨編(bian)寫了一個生成模擬(ni)數據的程(cheng)序(xu)來進行本次(ci)測試。

測(ce)試數(shu)據(ju)生(sheng)(sheng)成程序模擬(ni)若(ruo)干溫濕(shi)度(du)計生(sheng)(sheng)成的(de)數(shu)據(ju),其中(zhong)溫度(du)為(wei)整數(shu)、濕(shi)度(du)為(wei)浮點數(shu),同時每個(ge)溫度(du)計包(bao)含設(she)備(bei)ID、設(she)備(bei)分組、設(she)備(bei)名稱三個(ge)標簽。為(wei)了盡可能真實地模擬(ni)溫濕(shi)度(du)計的(de)生(sheng)(sheng)成數(shu)據(ju),沒有使(shi)用完全隨機數(shu),而是針對每個(ge)溫度(du)計確(que)保生(sheng)(sheng)成的(de)數(shu)據(ju)值呈正態分布。

測試數(shu)(shu)據的頻(pin)率為(wei)1秒鐘,數(shu)(shu)據集(ji)包含10000臺設(she)備,每臺設(she)備10000條(tiao)記錄。每條(tiao)數(shu)(shu)據采集(ji)記錄包含1個(ge)(ge)時間戳(chuo)字(zi)(zi)段、2個(ge)(ge)數(shu)(shu)據字(zi)(zi)段和3個(ge)(ge)標簽字(zi)(zi)段。

2.測試數據生成程序源碼

采用java程序(xu)生(sheng)成測試數據集,測試程序(xu)源代碼(ma)可以到下(xia)(xia)載,下(xia)(xia)載后執行如下(xia)(xia)語句

cd tests/comparisonTest/dataGenerator
javac com/taosdata/generator/DataGenerator.java 

3.測試數據生成程序用法

相關參數如下

  • dataDir 生成的數據文件路徑
  • numOfFiles 生成的數據文件數目
  • numOfDevices 測試數據集中的設備數目
  • rowsPerDevice 測試數據集中每臺設備包含的記錄條數

4.生成測試數據

執行如下(xia)命令,會在~/testdata目錄下(xia)生成(cheng)100個數據文件(jian),每個文件(jian)包含(han)100臺設備的測試數據;合計10000臺設備,每臺設備10000條記(ji)錄

mkdir ~/testdata
java com/taosdata/generator/DataGenerator -dataDir ~/testdata -numOfDevices 10000 -numOfFiles 100 -rowsPerDevice 10000

TDengine環境準備

TDengine是一個開源的專為物聯網、車聯網、工業互聯網、IT運維等設計和優化的大數據平臺。除核心的快10倍以上的時序數據庫(Time-Series Database)功(gong)能(neng)(neng)外,還提供緩(huan)存、數據訂閱等(deng)功(gong)能(neng)(neng),最大程(cheng)度減少研發和運維的工作量。

1.安裝部署

  • 下載tdengine-1.6.1.0.tar.gz,地址//yakult-sh.com.cn/
  • 安裝TDengine,解壓后運行install.sh進行安裝
  • 啟動TDengine,運行sudo systemctl start taosd
  • 測試是否安裝成功,運行TDengine的shell命令行程序taos,可以看到如下類似信息
Welcome to the TDengine shell, server version:1.6.1.0  client version:1.6.1.0
Copyright (c) 2017 by TAOS Data, Inc. All rights reserved.

taos> 

2.數據建模

TDengine為相(xiang)同結構(gou)的(de)設(she)(she)備(bei)創建(jian)一(yi)張超級表(biao),而每個具(ju)體的(de)設(she)(she)備(bei)則單獨創建(jian)一(yi)張數(shu)(shu)據表(biao)。因(yin)此,超級表(biao)的(de)數(shu)(shu)據字(zi)段為采集時(shi)間、溫度、濕度等(deng)與時(shi)間序列相(xiang)關(guan)的(de)采集數(shu)(shu)據;標(biao)簽字(zi)段為設(she)(she)備(bei)編(bian)號、設(she)(she)備(bei)分組編(bian)號、設(she)(she)備(bei)名稱等(deng)設(she)(she)備(bei)本身(shen)固定的(de)描述(shu)信(xin)息。

創建(jian)超級表(biao)的(de)SQL語句為

create table devices(ts timestamp, temperature int, humidity float) tags(devid int, devname binary(16), devgroup int);

以設備ID作為(wei)表(biao)(biao)(biao)名(例如device id為(wei)1,則(ze)表(biao)(biao)(biao)名為(wei)dev1),使用自動建表(biao)(biao)(biao)語(yu)句(ju),寫(xie)入一條記錄(lu)的語(yu)句(ju)為(wei)

insert into dev1 using devices tags(1,'d1',0) values(1545038786000,1,3.560000);

3.測試程序源碼

本文采用TDengine的(de)(de)原生(sheng)C語言接口,編寫數據寫入及查(cha)詢(xun)程序(xu),后續的(de)(de)其他文章會提供基(ji)于(yu)JDBCDriver的(de)(de)測試程序(xu)。

測(ce)試程序源代碼及查詢SQL語(yu)句(ju)可以到(dao)下載,下載后執(zhi)行如下語(yu)句(ju)

cd tdengine
make

會在當前目錄(lu)下生成可執(zhi)行文件./tdengineTest

4.測試程序用法

TDengine的測試程序用(yong)法與InfluxDB的用(yong)法相同,寫入相關參(can)數(shu)

  • writeClients 并發寫入的客戶端鏈接數目,默認為1
  • rowsPerRequest 一次請求中的記錄條數,默認為100,范圍1-1000
  • dataDir 讀取的數據文件路徑,來自于測試數據生成程序
  • numOfFiles 從數據文件路徑中讀取的文件個數

例如

./tdengineTest -dataDir ./data -numOfFiles 10 -writeClients 2 -rowsPerRequest 100

查詢相關參數

  • sql 將要執行的SQL語句列表所在的文件路徑,以逗號區分每個SQL語句

例如

./tdengineTest -sql ./sqlCmd.txt

InfluxDB環境準備

InfluxDB是一(yi)款開(kai)源的時序數(shu)據(ju)(ju)庫,由Go語(yu)言實(shi)現。適用(yong)于監控、實(shi)時分析、物(wu)聯網(wang)、傳感器數(shu)據(ju)(ju)等應(ying)用(yong)場景(jing),是目前最(zui)為(wei)流行的時間序列數(shu)據(ju)(ju)庫。

1.安裝部署

  • 下載并安裝InfluxDB
wget //dl.influxdata.com/influxdb/releases/influxdb_1.7.7_amd64.deb
sudo dpkg -i influxdb_1.7.7_amd64.deb
  • 啟動InfluxDB服務
sudo systemctl start influxdb 
  • 測試是否安裝成功,運行InfluxDB的shell命令行程序influx,可以看到如下類似信息
Connected to //localhost:8086 version 1.7.7
InfluxDB shell version: 1.7.7
> 

2.InfluxDB數據建模

創建(jian)一個(ge)名為(wei)devices的measurement,所有設備(bei)都屬于該(gai)measurement,不同設備(bei)通過標簽(qian)進(jin)行(xing)區分(fen)。每臺設備(bei)包含三個(ge)標簽(qian),分(fen)別為(wei)設備(bei)編(bian)號(hao)、設備(bei)分(fen)組編(bian)號(hao)、設備(bei)名稱(cheng)。每條記(ji)錄包含三個(ge)數據(ju)字段(duan),分(fen)別為(wei)時間戳(毫秒(miao)),溫度(整(zheng)型),濕(shi)度(浮點)。

3.InfluxDB測試程序源碼

本文采(cai)用(yong)InfluxDB的原生(sheng)GO語(yu)(yu)言接口,編寫數據寫入及查詢程序(xu),測試(shi)程序(xu)源代碼及查詢SQL語(yu)(yu)句可以到(dao)下載。下載后需(xu)要先安裝GO語(yu)(yu)言環境(jing)。

sudo apt install golang
mkdir -p $HOME/local/Golang
export GOPATH=$HOME/local/Golang
go get github.com/influxdata/influxdb1-client/v2

然后執行如下語句

cd tests/comparisonTest/influxdb
go build -o influxdbTest

會在當前目錄下生成可執行(xing)文件(jian)./influxdbTest

4.InfluxDB測試程序用法

寫入相關參數

  • writeClients 并發寫入的客戶端鏈接數目,默認為1
  • rowsPerRequest 一次請求中的記錄條數,默認為100,范圍1-1000
  • dataDir 讀取的數據文件路徑,來自于測試數據生成程序
  • numOfFiles 從數據文件路徑中讀取的文件個數

例如

./influxdbTest -dataDir ~/testdata -numOfFiles 1 -writeClients 2 -rowsPerRequest 100

查詢相關參數

  • sql 將要執行的SQL語句列表所在的文件路徑,以逗號區分每個SQL語句

例如

./influxdbTest -sql ./sqlCmd.txt

寫入性能對比

數(shu)(shu)據庫(ku)(ku)的一(yi)(yi)個(ge)寫(xie)入請求(qiu)可(ke)以(yi)包含一(yi)(yi)條(tiao)或多條(tiao)記錄(lu)(lu),一(yi)(yi)次(ci)請求(qiu)里包含的記錄(lu)(lu)條(tiao)數(shu)(shu)越多,寫(xie)入性能就會相(xiang)應(ying)提升。在以(yi)下測試中,使用R/R表示Records/Request ,即一(yi)(yi)次(ci)請求(qiu)中的記錄(lu)(lu)條(tiao)數(shu)(shu)。同時,一(yi)(yi)個(ge)數(shu)(shu)據庫(ku)(ku)可(ke)以(yi)支持多個(ge)客(ke)戶(hu)(hu)端連接,連接數(shu)(shu)增(zeng)加,系統總(zong)的寫(xie)入通吐(tu)量也會相(xiang)應(ying)增(zeng)加。因此(ci)測試中,對于每(mei)一(yi)(yi)個(ge)數(shu)(shu)據庫(ku)(ku),都會測試一(yi)(yi)個(ge)客(ke)戶(hu)(hu)端和(he)多個(ge)客(ke)戶(hu)(hu)端連接的情(qing)況。

1.TDengine的寫入性能

TDengine按照每次請求包含1,100,500,1000,2000條記錄各進行(xing)測(ce)試,同時(shi)也測(ce)試了不同客戶(hu)端連(lian)接數的情(qing)況(kuang)。測(ce)試步驟(zou)如下所示,您(nin)可以修改(gai)示例(li)中(zhong)的參數,完成多次不同的測(ce)試。

1.清空上次測試數據
運行TDengine的shell命令行程序taos,執行刪除測試數據庫語句
Welcome to the TDengine shell, server version:1.6.1.0  client version:1.6.1.0
Copyright (c) 2017 by TAOS Data, Inc. All rights reserved.

taos>drop database db;

2.測試執行
開啟5個客戶端讀取~/testdata目錄中的100個數據文件,每個請求寫入1000條數據,可以參考如下命令
./tdengineTest -dataDir ~/testdata -numOfFiles 100 -writeClients 5 -rowsPerRequest 1000

寫入吞吐量(liang)如(ru)下(xia),單位為記錄數/秒

R/R1 client2 clients3 clients4 clients5 clients6 clients7 clients
126824436995513762869645296864772277
100415800734484895522976085108790211710741192199
50047984688261210830321195100126919613642561417004
100050075191449411219141239157136798914181041476560
2000512820105552011741641306904142663514584341477208
TDengine Database
圖1 TDengine的寫入吞吐量

2.InfluxDB的寫入性能

InfluxDB按照每(mei)次(ci)請求包(bao)含1,100,1000,10000,20000,50000,100000條記錄各進行測(ce)試(shi)(shi),同時也測(ce)試(shi)(shi)了不同客(ke)戶端連接數的(de)情況。測(ce)試(shi)(shi)步(bu)驟如下所示(shi)(shi),您可以修(xiu)改示(shi)(shi)例中的(de)參數,完(wan)成多次(ci)不同的(de)測(ce)試(shi)(shi)。

1.清空上次測試數據
運行InfluxDB的shell命令行程序influx,可以看到如下類似信息
Connected to //localhost:8086 version 1.7.7
InfluxDB shell version: 1.7.7
> drop database db;

2.測試執行
開啟5個客戶端讀取~/testdata目錄中的100個數據文件,每個請求寫入10000條數據,可以參考如下命令
./influxdbTest -dataDir ~/testdata -numOfFiles 100 -writeClients 5 -rowsPerRequest 10000

寫入吞吐量如下,單(dan)位為記錄(lu)數(shu)/秒

R/R1 client2 clients3 clients4 clients5 clients6 clients7 clients
1314355678092106
10030244325570968198013920410173
100021940306594082550622605677031177174
1000088686155154209377234124245141257454261542
2000096277179492234413255805263160268466271249
50000125187200552243861264780271101270364273820
100000130108197202240059254973265922272275270859
TDengine Database
圖2 InfluxDB的寫入吞吐量

3.TDengin和InfluxDB的最佳性能對比

基(ji)于(yu)以上(shang)的測試數據(ju),將TDengine和InfluxDB測試出的最佳寫入(ru)速(su)度進行對比,結果(guo)如下(xia)

R/R1 client2 clients3 clients4 clients5 clients6 clients7 clients
TDengine512820105552011741641306904142663514584341477208
InfluxDB130108200552243861264780271101272275273820
TDengine Database
圖3 TDengine和InfluxDB的最佳寫入性能對比

從(cong)圖3可以看(kan)出,TDengine的(de)寫入(ru)速(su)(su)度(du)約(yue)為(wei)百萬條記錄(lu)/秒的(de)量(liang)級,而InfluxDB的(de)寫入(ru)速(su)(su)度(du)約(yue)為(wei)十萬條記錄(lu)/秒的(de)量(liang)級。因此(ci)可以得(de)出結論,在(zai)同等數據集和硬件(jian)環境下,TDengine的(de)寫入(ru)速(su)(su)度(du)遠高(gao)于InfluxDB,約(yue)為(wei)5倍。

需要指出(chu)的是(shi),InfluxDB的單條插入(ru)(ru)性能很低(di),因此必須(xu)采用Kafka或其(qi)他消(xiao)息隊列軟件(jian),成(cheng)批寫入(ru)(ru),這樣增加了系統開發和維護的復(fu)雜度與運營成(cheng)本。

讀取性能對比

本測試(shi)(shi)做了簡單的(de)遍歷查(cha)詢,就是將(jiang)寫入的(de)數(shu)據全(quan)部讀出。因為InfluxDB的(de)GO客戶端在解析(xi)JSON返回結果(guo)時(shi)的(de)限(xian)制,故每次查(cha)詢僅取出100萬條記(ji)錄。在測試(shi)(shi)數(shu)據準備時(shi),已經按照devgroup標(biao)簽將(jiang)設備拆(chai)分成100個(ge)分組(zu),本次測試(shi)(shi)隨機(ji)選取其中10個(ge)分組(zu)進行查(cha)詢。

1.TDengine的測(ce)試方法(fa)

測試SQL語句存儲在tdengine/q1.txt中,測試SQL語句參考
select * from db.devices where devgroup=0;

執行方法如下
./tdengineTest -sql ./q1.txt

2.InfluxDB的測試方法

測試SQL語句存儲在influxdb/q1.txt中,測試SQL語句參考
select * from devices where devgroup='0';

執行方法如下
./influxDBTest -sql ./q1.txt

如下(xia)所示,橫軸為(wei)設(she)備分組編號,測(ce)試結果(guo)的單位為(wei)秒

分組0分組10分組20分組30分組40分組50分組60分組70分組80分組90
TDengine0.2350.2120.2080.2180.2090.2100.2090.2090.2160.208
InfluxDB7.567.217.647.287.647.527.527.527.327.42
TDengine Database
圖4 TDengine和InfluxDB的讀取性能對比

從(cong)圖4中(zhong)可(ke)以看(kan)(kan)出,TDengine的100萬(wan)條(tiao)的讀取(qu)速度(du)穩(wen)定在0.21秒,吞吐量(liang)(liang)約(yue)為500萬(wan)條(tiao)記錄/秒,InfluxDB的100萬(wan)條(tiao)的讀取(qu)速度(du)穩(wen)定在7.5秒,吞吐量(liang)(liang)約(yue)為13萬(wan)條(tiao)記錄/秒。所以從(cong)測試結果來看(kan)(kan),TDengine的查詢吞吐量(liang)(liang)遠(yuan)高(gao)于InfluxDB。

聚合函數性能對比

本單元的測試包含COUNT,AVERAGE,SUM,MAX,MIN,SPREAD這六個TDEngine和InfluxDB共(gong)有的聚合函(han)(han)數。所有測試函(han)(han)數都會搭配篩(shai)選條件(WHERE)來選取設備(bei)的十分之(zhi)一、十分之(zhi)二、十分之(zhi)三(san)、直到全部(bu)設備(bei)。

1.TDengine的聚合函數性能

測(ce)試(shi)SQL語句(ju)存儲在tdengine/q2.txt中,測(ce)試(shi)SQL語句(ju)參考(kao)

select count(*) from db.devices where devgroup<10;

執行方法如下

./tdengineTest -sql ./q2.txt

如下所示,橫(heng)軸為查詢設(she)備占(zhan)總設(she)備的百分(fen)比,測試結果的單位為秒

10%20%30%40%50%60%70%80%90%100%
count0.0180.0260.0160.0180.0170.0240.0240.0270.0300.033
avg0.0070.0140.0150.0200.0240.0380.0440.0500.0570.060
sum0.0060.0100.0190.0180.0310.0360.0340.0370.0430.046
max0.0070.0130.0150.0200.0250.0300.0350.0390.0450.049
min0.0060.0100.0160.0240.0320.0390.0450.0410.0430.049
spread0.0070.0100.0150.0190.0330.0380.0460.0520.0590.066
TDengine Database
圖5 TDengine聚合函數性能

2.InfluxDb的聚合函數性能

測試(shi)SQL語(yu)句存儲(chu)在influxdb/q2.txt中(zhong)。因為(wei)InfluxDB的(de)標簽(qian)僅能為(wei)字符串,所以測試(shi)SQL語(yu)句的(de)篩選條(tiao)件為(wei)正則表達式(shi),如下的(de)SQL語(yu)句選取第10-19個(ge)group中(zhong)的(de)數(shu)據,例如

select count(*) from devices where devgroup=~/[1-1][0-9]/;

執行方法如下

./influxdbTest -sql ./q2.txt

如下所示,橫軸為(wei)查詢(xun)設(she)備占總(zong)設(she)備的百(bai)分比,測試結果的單位為(wei)秒

10%20%30%40%50%60%70%80%90%100%
count1.062.143.284.155.266.197.018.099.069.92
mean0.992.052.773.684.515.356.146.957.708.44
sum1.022.042.893.754.645.506.387.187.948.72
max1.011.992.853.774.695.526.357.177.958.80
min1.032.022.953.814.645.486.337.188.018.72
spread7.3816.9227.4438.2549.8660.6871.6182.5094.68105.26
TDengine Database
圖6 InfluxDB聚合函數性能

3.聚合函數性能對比

基于以上的測試(shi)數據,將TDengine和InfluxDB在1億(yi)條記錄數據集的測試(shi)結(jie)果(guo)進行對比

countaveragesummaxminspread
TDengine0.0330.060.0460.0490.0490.066
InfluxDB9.928.448.728.88.72105.26
TDengine Database
圖7 聚合函數性能對比

從圖(tu)7可以(yi)看出,TDengine的聚(ju)合函(han)數查詢時間(jian)在100毫秒以(yi)內,而(er)InfluxDb的查詢時間(jian)在10秒左右。因此(ci)可以(yi)得出結論,在同等(deng)數據集和硬(ying)件環境下(xia),TDengine聚(ju)合函(han)數的查詢速度遠(yuan)遠(yuan)高于InfluxDB,超過100倍。

按標簽分組查詢性能對比

本測試(shi)做了按標簽(qian)分(fen)組函數(shu)的性(xing)能測試(shi),測試(shi)函數(shu)會搭配篩選(xuan)條(tiao)件(WHERE)來選(xuan)取設備的十分(fen)之一(yi)、十分(fen)之二、十分(fen)之三、直(zhi)到(dao)全部(bu)設備。

1.TDengine的(de)測試方法(fa)

測試SQL語句存儲在tdengine/q3.txt中,例如(ru)

select count(temperature), sum(temperature), avg(temperature) from db.devices where devgroup<10 group by devgroup;

執行方法如下

./tdengineTest -sql ./q3.txt

2.InfluxDB的測試方(fang)法

測試SQL語(yu)句存儲(chu)在(zai)influxdb/q3.txt中,例如

select count(temperature), sum(temperature), mean(temperature) from devices where devgroup=~/[1-1][0-9]/ group by devgroup;

執行方法如下

./influxdbTest -sql ./q3.txt

如(ru)下所示,橫軸(zhou)為(wei)查詢設備占總設備的(de)百分比,測試結果的(de)單位(wei)為(wei)秒(miao)

10%20%30%40%50%60%70%80%90%100%
TDengine0.0300.0280.0310.0410.0690.0660.0770.0910.1020.123
InfluxDB3.196.379.6012.9515.9319.1622.0525.2028.0631.52
TDengine Database
圖8 TDengine和InfluxDB的按標簽分組查詢性能對比

從測試結果來看,TDengine的分組聚合(he)查詢速(su)度遠高于InfluxDB,約為300倍(bei)。

按時間分組查詢性能對比

本測(ce)(ce)試(shi)(shi)做了按時間分(fen)(fen)組函數的(de)性能測(ce)(ce)試(shi)(shi),測(ce)(ce)試(shi)(shi)函數會搭配篩選(xuan)條件(WHERE)來(lai)選(xuan)取設(she)備(bei)的(de)十(shi)分(fen)(fen)之(zhi)(zhi)一、十(shi)分(fen)(fen)之(zhi)(zhi)二、十(shi)分(fen)(fen)之(zhi)(zhi)三、直(zhi)到全(quan)部設(she)備(bei)。

1.TDengine的測試方法

測(ce)試SQL語(yu)句存儲在tdengine/q4.txt中,例(li)如

select count(temperature), sum(temperature), avg(temperature) from db.devices where devgroup<10 interval(1m);

執行方法如下

./tdengineTest -sql ./q4.txt

2.InfluxDB的測試方法

測試(shi)SQL語句存儲在influxdb/q4.txt中,例如

select count(temperature), sum(temperature), mean(temperature) from devices where devgroup=~/[1-1][0-9]/ group by time(1m);

執行方法如下

./influxdbTest -sql ./q4.txt

如(ru)下所示,橫軸(zhou)為查詢設備占總(zong)設備的(de)百分比,測(ce)試結果(guo)的(de)單(dan)位為秒

10%20%30%40%50%60%70%80%90%100%
TDengine0.2370.4720.6530.9021.1341.4221.7531.7842.0852.549
InfluxDB3.266.509.5912.8516.0719.0222.3225.4428.2931.44
TDengine Database
圖9 TDengine和InfluxDB的按時間分組查詢性能對比

從測試結果來看,TDengine的(de)分(fen)組聚合查詢速度(du)遠高于InfluxDB,約為(wei)12倍。

壓縮比對比

1.原始數據的磁盤占用

本次測試共生成100個(ge)測試數據文件,存儲在~/testdata目(mu)錄下,使用du命令查看~/testdata目(mu)錄的文件大小(xiao)

cd ~/testdata
du -m .

如下圖所示

TDengine Database
圖10 原始數據的磁盤占用情況

2.查看TDengine的磁盤占用

TDengine的磁盤(pan)文件(jian)默認(ren)位(wei)置在目錄(lu)/var/lib/taos/data下,在查看磁盤(pan)文件(jian)大小時(shi),首先將TDengine的服(fu)務停止(zhi)

sudo systemctl stop taosd

然后,調用du命令(ling),查看/var/lib/taos/data目(mu)錄(lu)下文件的大小

cd /var/lib/taos/data
du -h .
TDengine Database
圖11 TDengine的磁盤占用情況

3.查看InfluxDB的磁盤占用

InfluxDB的磁盤文(wen)件默認位置在目錄/var/lib/influxdb/data/db下,在查看磁盤文(wen)件大小時,首先將InfluxDB的服(fu)務(wu)停止

sudo systemctl stop influxDb

目(mu)錄(lu)/var/lib/taos/data為(wei)用戶influxdb所(suo)有,請確保當前用戶有查(cha)看(kan)該目(mu)錄(lu)的(de)權(quan)限。本(ben)測試中,數(shu)據存儲(chu)在autogen/84目(mu)錄(lu)下,調用du命令,查(cha)看(kan)該目(mu)錄(lu)下文件的(de)大小(xiao)。

cd /var/lib/influxdb/data/db/autogen/84
du -h .
TDengine Database
圖12 InfluxDB的磁盤占用情況

4.磁盤占用情況對比

生成的(de)測(ce)試數據文件(jian)占(zhan)(zhan)用的(de)磁盤(pan)大小為3941MB,InfluxDB磁盤(pan)占(zhan)(zhan)用855MB,TDengine磁盤(pan)占(zhan)(zhan)用459MB。在相對比(bi)較隨(sui)機數據集的(de)情況(kuang)下,TDengine的(de)壓(ya)縮比(bi)約為InfluxDB壓(ya)縮比(bi)的(de)1.86倍(bei)。

在(zai)物(wu)聯網場景下,大(da)多數(shu)采(cai)集數(shu)據的(de)變化范圍都比(bi)較小。由于TDengine采(cai)用列式存儲(chu),因此可(ke)以預期,TDengine在(zai)真實(shi)場景的(de)壓(ya)縮比(bi)表現(xian)會更好。

功能對比

TDengine與InfluxDB都(dou)能(neng)用(yong)(yong)于時序數據的處理(li),兩者(zhe)在數據庫層面上(shang)功能(neng)接近。但TDengine還具備消息(xi)隊列、緩存、消息(xi)訂閱等大(da)數據平臺所需要的功能(neng)。使用(yong)(yong)InfluxDB,還需要集成Kafka, Redis或其他類(lei)似軟件。具體對比如下:

功能支持TDengineInfluxDB
SQL語法支持支持支持
Schema需要定義無需定義
私有化部署支持支持支持
水平擴展能力支持支持
系統連接管理支持支持
查詢任務管理支持支持
數據導入工具支持支持
數據導出工具支持支持
Web管理工具支持支持
多介質分級存儲支持支持
Telegraf數據采集支持支持
Grafana數據可視化支持支持
RESTFul支持支持
C/C++支持不支持
JDBC/ODBC支持不支持
GO支持支持
Python支持支持
數據庫參數配置支持支持
配置副本數支持支持
數據時效支持支持
數據分區支持支持
連續查詢支持支持
數據訂閱支持不支持
緩存支持不支持
微秒級精度支持支持
聚合函數支持支持支持
數據降采樣支持支持
數據分頁支持支持
數據插值支持支持
歷史數據修改不支持支持
歷史數據的標簽修改支持不支持
時間線刪除支持支持
數據清空支持支持
Matlab 接口支持無官方支持
R 接口支持
安裝包大小1.5M48M

總結

此次測試,從數(shu)據庫的讀、寫、查詢、壓縮(suo)比等方面對TDengine和InfluxDB進行(xing)了對比測試。測試用(yong)數(shu)據集、測試程序(xu)源碼(ma)、執行(xing)的SQL語句都可(ke)以從下載,測試具備(bei)可(ke)重(zhong)復性(xing)。

從測試(shi)結果上看,TDengine的性(xing)能(neng)遠超InfluxDB,寫入性(xing)能(neng)約為(wei)5倍(bei),讀取性(xing)能(neng)約為(wei)35倍(bei),聚合函數性(xing)能(neng)約為(wei)140倍(bei),按標(biao)簽(qian)分(fen)(fen)組(zu)查詢(xun)性(xing)能(neng)約為(wei)250倍(bei),按時(shi)間分(fen)(fen)組(zu)查詢(xun)性(xing)能(neng)約為(wei)12倍(bei),壓縮比約為(wei)1.8倍(bei),具體(ti)見下(xia)表

TDengineInfluxDB
寫入吞吐量1477208 記錄數/秒273820 記錄數/秒
100萬條記錄讀取時間0.21秒7.5秒
1億條記錄取平均值時間0.06秒8.44秒
1億條記錄按標簽分組取均值時間0.123秒31.52秒
1億條記錄按時間分組取均值時間2.549秒31.44秒
1億條記錄的磁盤占用空間459MB855MB