摘要:為幫助用戶了解TDengine Database的指標,特將TDengine與Cassandra從數據庫的讀、寫、查詢、壓縮比等方面進行了對比測試。從測試結果上看,TDengine的性能遠超Cassandra,寫入性能約為20倍,讀取性能約為17倍,聚合函數性能約為4000倍,按標簽分組查詢性能約為2500倍,按時間分組查詢性能約為119倍。
測試環境
對比測試的測試程序和數據庫服務在同一臺4核8GB的Dell臺式機上部署,臺式機型號為OptiPlex-3050,詳細配置如下
OS: Ubuntu 16.04 x64
CPU: Intel(R) Core(TM) i3-7100 CPU @ 3.90GHz
Memory: 8GB
Disk: 1TB HDD
測試數據集及其生成方法
1.測試數據生成方法
本次測試調研了兩類比較熱門的測試數據集:
- 1. 紐約出租車運行數據,因該數據中抹去了單臺車輛的信息,無法對其進行建模
- 2. faker生成工具,因其只能生成字符串,并不適合物聯網場景下處理的數據。
所以,為了使得測試可輕易重復,自己寫了一個生成模擬數據的程序來進行本次測試。
測試數據生成程序模擬若干溫濕度計生成的數據,其中溫度為整數、濕度為浮點數,同時每個溫度計包含設備ID、設備分組、設備名稱三個標簽。為了盡可能真實地模擬溫濕度計的生成數據,沒有使用完全隨機數,而是針對每個溫度計確保生成的數據值呈正態分布。
測試數據的頻率為1秒鐘,數據集包含10000臺設備,每臺設備10000條記錄。每條數據采集記錄包含3個標簽字段,2個數據字段,1個時間戳字段。
2.測試數據生成程序源碼
采用java程序生成測試數據集,測試程序源代碼行數較多,因此您可以到 下載,執行如下語句
cd tests/comparisonTest/dataGeneratorjavac com/taosdata/generator/DataGenerator.java
3.測試數據生成程序用法
相關參數如下
- dataDir 生成的數據文件路徑
- numOfFiles 生成的數據文件數目
- numOfDevices 測試數據集中的設備數目
- rowsPerDevice 測試數據集中每臺設備包含的記錄條數
4.生成測試數據
執行如下命令,會在~/testdata目錄下生成100個數據文件,每個文件包含100臺設備的測試數據;合計10000臺設備,每臺設備10000條記錄
mkdir ~/testdatajava com/taosdata/generator/DataGenerator -dataDir ~/testdata -numOfDevices 10000 -numOfFiles 100 -rowsPerDevice 10000
TDengine環境準備
TDengine是一個開源的專為物聯網、車聯網、工業互聯網、IT運維等設計和優化的大數據平臺。除核心的快10倍以上的時序數據庫(Time-Series Database)功能外,還提供緩存、數據訂閱、流式計算等功能,最大程度減少研發和運維的工作量
1.安裝部署
- 下載tdengine-1.6.1.0.tar.gz,地址//www.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.0Copyright (c) 2017 by TAOS Data, Inc. All rights reserved.
taos>
2.數據建模
TDengine Database為相同結構的設備創建一張超級表(STable),而每個具體的設備則單獨創建一張數據表。因此,超級表的數據字段為采集時間、溫度、濕度等與時間序列相關的采集數據;標簽字段為設備編號、設備分組編號、設備名稱等設備本身固定的描述信息。
創建超級表的SQL語句為
create table devices(ts timestamp, temperature int, humidity float) tags(devid int, devname binary(16), devgroup int);
以設備ID作為表名(例如device id為1,則表名為dev1),使用自動建表語句,寫入一條記錄的語句為
insert into dev1 using devices tags(1,'d1',0) values(1545038786000,1,3.560000);
3.測試程序源碼
本文采用TDengine的原生C語言接口,編寫數據寫入及查詢程序,后續的其他文章會提供基于JDBCDriver的測試程序。
測試程序源代碼行數較多,因此您可以到 下載,執行如下語句
cd tdengine
make
會在當前目錄下生成可執行文件./tdengineTest
4.測試程序用法
TDengine的測試程序用法與Cassandra的用法相同,寫入相關參數
- writeClients 并發寫入的客戶端鏈接數目,默認為1
- rowsPerRequest 一次請求中的記錄條數,默認為100,范圍1-1000
- dataDir 讀取的數據文件路徑,來自于測試數據生成程序
- numOfFiles 從數據文件路徑中讀取的文件個數
例如
./tdengineTest -dataDir ./data -numOfFiles 10 -writeClients 2 -rowsPerRequest 100
查詢相關參數
- sql 將要執行的SQL語句列表所在的文件路徑,以逗號區分每個SQL語句
例如
./tdengineTest -sql ./sqlCmd.txt
Cassandra環境準備
Apache Cassandra是一個高度可擴展的高性能分布式數據庫,用于處理大量商用服務器上的大量數據,提供高可用性,無單點故障。這是一種NoSQL類型的數據庫。
1.安裝部署
- 下載并安裝Cassandra
echo "deb //www.apache.org/dist/cassandra/debian 311x main" | sudo tee -a /etc/apt/sources.list.d/cassandra.sources.list
curl //www.apache.org/dist/cassandra/KEYS | sudo apt-key add -
sudo apt-get update
sudo apt-get install cassandra
- 啟動Cassandra服務
sudo service cassandra start
- 測試是否安裝成功,運行Cassandra的shell命令行程序cqlsh,可以看到如下類似信息
Connected to Test Cluster at 127.0.0.1:9042.[cqlsh 5.0.1 | Cassandra 3.11.4 | CQL spec 3.4.4 | Native protocol v4]Use HELP for help.
cqlsh>
2.Cassandra數據建模
創建一個名為Cassandra.test的measurement,所有設備都屬于該measurement。每條記錄包含六個數據字段,分別為時間戳(毫秒),溫度(整型),濕度(浮點),設備編號(整型)、設備分組編號(整型)、設備名稱(字符型)。主鍵為(設備分組編號、設備編號、設備名稱,時間戳)。因為Cassandra的where語句里只對主鍵進行搜索,所以在后面查詢時需要進行篩選的列一定要放進主鍵里。同時,因為Cassandra里group by語句只能對主鍵且按照主鍵的順序進行聚合,所以這里將后面聚合查詢用到的設備分組編號放在主鍵的第一位。
3.Cassandra測試程序源碼
本文采用Cassandra的原生Java語言接口,編寫數據寫入及查詢程序,測試程序源代碼行數較多,因此您可以到 下載。
安裝Cassandra Java 客戶端。本次測試使用DataStax提供的客戶端,具體可見。 DataStax使用maven管理源碼,在Cassandra/Cassandratest/pom.xml 里DataStax客戶端已經被添加入maven的庫里。
4.Cassandra測試程序用法
測試準備
由于Cassandra建表寫入查詢速度比較慢,在本次測試中很容易出現timeout錯誤,測試無法進行下去。因此測試前一定需要修改Cassandra服務端和客戶端的timeout的默認值。
- 服務端修改, 將/etc/Cassandra/Cassandra.yaml 中所有含有“timeout”的設置選項里的默認值增加100-1000倍。
- 客戶端修改, 在測試源代碼Cassandra/目錄下提供了“application.conf”文件,里面修改了客戶端timeout默認值,執行源代碼時需要提供這個文件的路徑。
寫入相關參數
- writeClients 并發寫入的客戶端鏈接數目,默認為1
- rowsPerRequest 一次請求中的記錄條數,默認為100,范圍1-1000
- dataDir 讀取的數據文件路徑,來自于測試數據生成程序
- numOfFiles 從數據文件路徑中讀取的文件個數
- conf Cassandra客戶端參數文件所在路徑(修改timeout默認值)
例如
cd cassandra/cassandratest/target
java -jar cassandratest-1.0-SNAPSHOT-jar-with-dependencies.jar -datadir ./data -numofFiles 100 -rowsperrequest 2000 -writeclients 4 -conf cassandra/application.conf
查詢相關參數
- sql 將要執行的SQL語句列表所在的文件路徑,以逗號區分每個SQL語句
例如
cd cassandra/cassandratest/target
java -jar cassandratest-1.0-SNAPSHOT-jar-with-dependencies.jar -sql cassandra/sqlCmd.txt -conf cassandra/application.conf
寫入性能對比
數據庫的一個寫入請求可以包含一條或多條記錄,一次請求里包含的記錄條數越多,寫入性能就會相應提升。在以下測試中,使用R/R表示Records/Request ,即一次請求中的記錄條數。同時,一個數據庫可以支持多個客戶端鏈接,鏈接數增加,系統總的寫入通吐量也會相應增加。因此測試中,對于每一個數據庫,都會測試一個客戶端和多個客戶端連接的情況。
1.TDengine的寫入性能
TDengine按照每次請求包含1,100,500,1000,2000條記錄各進行測試,同時也測試了不同客戶端連接數的情況。測試步驟如下所示,您可以修改示例中的參數,完成多次不同的測試。
1.清空上次測試數據
運行TDengine的shell命令行程序taos,執行刪除測試數據庫語句Welcome to the TDengine shell, server version:1.6.1.0 client version:1.6.1.0Copyright (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
寫入吞吐量如下,單位為記錄數/秒
| R/R | 1 client | 2 clients | 3 clients | 4 clients | 5 clients | 6 clients | 7 clients |
|---|---|---|---|---|---|---|---|
| 1 | 26824 | 43699 | 55137 | 62869 | 64529 | 68647 | 72277 |
| 100 | 415800 | 734484 | 895522 | 976085 | 1087902 | 1171074 | 1192199 |
| 500 | 479846 | 882612 | 1083032 | 1195100 | 1269196 | 1364256 | 1417004 |
| 1000 | 500751 | 914494 | 1121914 | 1239157 | 1367989 | 1418104 | 1476560 |
| 2000 | 512820 | 1055520 | 1174164 | 1306904 | 1426635 | 1458434 | 1477208 |

2.Cassandra的寫入性能
Cassandra按照每次請求包含1,10,50, 100,500,1000條記錄各進行測試,同時也測試了不同客戶端連接數的情況。測試步驟如下所示,您可以修改示例中的參數,完成多次不同的測試。
1.清空上次測試數據運行Cassandra的shell命令行程序cqlsh,可以看到如下類似信息Connected to Test Cluster at 127.0.0.1:9042.[cqlsh 5.0.1 | Cassandra 3.11.4 | CQL spec 3.4.4 | Native protocol v4]Use HELP for help.cqlsh> drop database Cassandra;
2.測試執行開啟5個客戶端讀取~/testdata目錄中的100個數據文件,每個請求寫入1000條數據,可以參考如下命令java -jar cassandratest-1.0-SNAPSHOT-jar-with-dependencies.jar -dataDir ~/testdata -numOfFiles 100 -writeClients 5 -rowsPerRequest 1000 -conf cassandra/application.conf
寫入吞吐量如下,單位為記錄數/秒
| R/R | 1 client | 2 clients | 3 clients | 4 clients | 5 clients | 6 clients | 7 clients |
|---|---|---|---|---|---|---|---|
| 1 | 3515 | 4925 | 5529 | 5991 | 6331 | 6380 | 6597 |
| 10 | 35998 | 35542 | 35124 | 34135 | 35077 | 35886 | 36102 |
| 50 | 31743 | 49423 | 51626 | 55752 | 57282 | 56815 | 55831 |
| 100 | 38328 | 50387 | 54519 | 56940 | 57853 | 59335 | 61708 |
| 500 | 30417 | 36264 | 38078 | 39066 | 39459 | 39758 | 39918 |
| 1000 | 21555 | 25293 | 26224 | 26559 | 26765 | 26511 | 26693 |

3.TDengin和Cassandra的最佳性能對比
基于以上的測試數據,將TDengine和Cassandra測試出的最佳寫入速度進行對比,結果如下
| R/R | 1 client | 2 clients | 3 clients | 4 clients | 5 clients | 6 clients | 7 clients |
|---|---|---|---|---|---|---|---|
| TDengine | 512820 | 1055520 | 1174164 | 1306904 | 1426635 | 1458434 | 1477208 |
| Cassandra | 38328 | 50387 | 54519 | 56940 | 57835 | 59335 | 61708 |

從圖3可以看出,TDengine的寫入速度約為百萬條記錄/秒的量級,而Cassandra的寫入速度約為1~10萬條記錄/秒的量級。因此可以得出結論,在同等數據集和硬件環境下,TDengine的寫入速度遠高于Cassandra,約為20倍。
讀取性能對比
本測試做了簡單的遍歷查詢,就是將寫入的數據全部讀出。
1. TDengine的測試方法
測試SQL語句存儲在tdengine/q1.txt中,測試SQL語句參考select * from db.devices where devgroup=0;
執行方法如下
./tdengineTest -sql ./q1.txt
2.Cassandra的測試方法
測試SQL語句存儲在Cassandra/q1.txt中,測試SQL語句參考select * from devices where devgroup=0;
執行方法如下
java -jar cassandratest-1.0-SNAPSHOT-jar-with-dependencies.jar -conf cassandra/application.conf -sql cassandra/q1.txt
讀取速度如下,單位為秒
| Latency | G-0 | G-10 | G-20 | G-30 | G-40 | G-50 | G-60 | G-70 | G-80 | G-90 |
|---|---|---|---|---|---|---|---|---|---|---|
| TDengine | 0.235 | 0.212 | 0.208 | 0.218 | 0.209 | 0.210 | 0.209 | 0.209 | 0.216 | 0.208 |
| Cassandra | 3.92 | 3.68 | 3.65 | 3.61 | 3.69 | 3.57 | 3.55 | 3.59 | 3.66 | 3.64 |

從圖表中可以看出,TDengine的100萬條的讀取速度穩定在0.21秒,吞吐量約為500萬條記錄/秒,Cassandra的100萬條的讀取速度大約在3.6秒,吞吐量約為30萬條記錄/秒。所以從測試結果來看,TDengine的查詢吞吐量高于Cassandra,約為Cassandra的17倍。
聚合函數性能對比
本單元的測試包含COUNT,AVERAGE,SUM,MAX,MIN這五個TDEngine和Cassandra共有的聚合函數。所有測試函數都會搭配篩選條件(WHERE)來選取設備的十分之一、十分之二、十分之三、直到全部設備。
1.TDengine的聚合函數性能
測試SQL語句存儲在tdengine/q2.txt中,測試SQL語句參考
select count(*) from db.devices where devgroup<10;
執行方法如下
./tdengineTest -sql ./q2.txt
查詢速度如下表,單位為秒
| Latency | 10% | 20% | 30% | 40% | 50% | 60% | 70% | 80% | 90% | 100% |
|---|---|---|---|---|---|---|---|---|---|---|
| count | 0.018 | 0.026 | 0.016 | 0.018 | 0.017 | 0.024 | 0.024 | 0.027 | 0.030 | 0.033 |
| avg | 0.007 | 0.014 | 0.015 | 0.020 | 0.024 | 0.038 | 0.044 | 0.050 | 0.057 | 0.060 |
| sum | 0.006 | 0.010 | 0.019 | 0.018 | 0.031 | 0.036 | 0.034 | 0.037 | 0.043 | 0.046 |
| max | 0.007 | 0.013 | 0.015 | 0.020 | 0.025 | 0.030 | 0.035 | 0.039 | 0.045 | 0.049 |
| min | 0.006 | 0.010 | 0.016 | 0.024 | 0.032 | 0.039 | 0.045 | 0.041 | 0.043 | 0.049 |
| spread | 0.007 | 0.010 | 0.015 | 0.019 | 0.033 | 0.038 | 0.046 | 0.052 | 0.059 | 0.066 |

2.Cassandra的聚合函數性能
測試SQL語句存儲在Cassandra/q2.txt中。
select count(*) from devices where devgroup<10;
執行方法如下Java -jar cassandratest-1.0-SNAPSHOT-jar-with-dependencies.jar -sql cassandra/q2.txt -conf cassandra/application.conf
查詢速度如下表,單位為秒
| Latency | 10% | 20% | 30% | 40% | 50% | 60% | 70% | 80% | 90% | 100% |
|---|---|---|---|---|---|---|---|---|---|---|
| count | 33.79 | 67.23 | 87.64 | 105.82 | 131.52 | 160.88 | 188.70 | 213.85 | 240.39 | 264.49 |
| mean | 28.88 | 57.83 | 87.16 | 114.87 | 145.30 | 173.32 | 204.11 | 235.33 | 261.29 | 290.97 |
| sum | 29.35 | 58.19 | 86.24 | 115.56 | 145.73 | 173.81 | 203.94 | 234.15 | 260.41 | 292.51 |
| max | 28.94 | 57.85 | 85.60 | 115.02 | 145.62 | 175.08 | 202.53 | 232.61 | 260.37 | 288.46 |
| min | 29.58 | 58.26 | 87.27 | 117.22 | 144.01 | 174.20 | 201.88 | 235.98 | 263.69 | 290.27 |

3.聚合函數性能對比
基于以上的測試數據,將TDengine和Cassandra在1億條記錄數據集的測試結果進行對比
| Latency | count | average | sum | max | min |
|---|---|---|---|---|---|
| TDengine | 0.033 | 0.06 | 0.046 | 0.049 | 0.049 |
| Cassandra | 264.49 | 290.97 | 291.51 | 288.46 | 290.27 |

從圖7可以看出,TDengine的聚合函數查詢時間在100毫秒以內,而Cassandra的查詢時間在200~300秒左右。因此可以得出結論,在同等數據集和硬件環境下,TDengine的聚合查詢速度遠遠高于Cassandra,超過100倍。
按標簽分組查詢性能對比
本測試做了按標簽分組函數的性能測試,測試函數會搭配篩選條件(WHERE)來選取設備的十分之一、十分之二、十分之三、直到全部設備。
1. TDengine的測試方法
測試SQL語句存儲在tdengine/q3.txt中,例如
select count(temperature), sum(temperature), avg(temperature) from db.devices where devgroup<10 group by devgroup;
執行方法如下
./tdengineTest -sql ./q3.txt
2. Cassandra的測試方法
測試SQL語句存儲在Cassandra/q3.txt中,例如
select count(temperature), sum(temperature), avg(temperature) from db.devices where devgroup<10 group by devgroup;
執行方法如下
java -jar cassandratest-1.0-SNAPSHOT-jar-with-dependencies.jar -sql cassandra/q3.txt -conf cassandra/application.conf
讀取速度如下,單位為秒
| Latency | 10% | 20% | 30% | 40% | 50% | 60% | 70% | 80% | 90% | 100% |
|---|---|---|---|---|---|---|---|---|---|---|
| TDengine | 0.030 | 0.028 | 0.031 | 0.041 | 0.069 | 0.066 | 0.077 | 0.091 | 0.102 | 0.123 |
| Cassandra | 31.40 | 62.21 | 92.12 | 122.01 | 154.95 | 185.03 | 217.46 | 249.59 | 281.86 | 308.89 |

從測試結果來看,TDengine的分組聚合查詢速度遠高于Cassandra,約為3000倍。
按時間分組性能對比
本測試做了按時間分組函數的性能測試,測試函數會搭配篩選條件(WHERE)來選取設備的十分之一、十分之二、十分之三、直到全部設備。
1. TDengine的測試方法
測試SQL語句存儲在tdengine/q4.txt中,例如
select count(temperature), sum(temperature), avg(temperature) from db.devices where devgroup<10 interval(1m);
執行方法如下
./tdengineTest -sql ./q4.txt
2. Cassandra的測試方法
因為前面提到的Cassandra 在where和group by 語句里的限制,在測試之前,需要重新寫入數據,在原表中加入“minute”這一列,同時將它放入主鍵的第一位。執行下面命令再寫入一次數據
java -jar cassandratest-1.0-SNAPSHOT-jar-with-dependencies.jar -datadir ~/testdata -numofFiles 100 -rowsperrequest 2000 -writeclients 4 -conf cassandra/application.conf -timetest
測試SQL語句存儲在Cassandra/q4.txt中,例如
select count(temperature), sum(temperature), mean(temperature) from devices where devgroup<10 group by minute;
執行方法如下
java -jar cassandratest-1.0-SNAPSHOT-jar-with-dependencies.jar -sql cassandra/q4.txt -conf cassandra/application.conf
讀取速度如下,單位為秒
| Latency | 10% | 20% | 30% | 40% | 50% | 60% | 70% | 80% | 90% | 100% |
|---|---|---|---|---|---|---|---|---|---|---|
| TDengine | 0.237 | 0.472 | 0.653 | 0.902 | 1.134 | 1.422 | 1.753 | 1.784 | 2.085 | 2.549 |
| Cassandra | 131.35 | 153.87 | 169.40 | 188.86 | 203.47 | 227.61 | 250.41 | 274.53 | 294.87 | 303.51 |

從測試結果來看,TDengine的按時間分組聚合查詢速度遠高于Cassandra,約為100倍。
壓縮比對比
1.原始數據的磁盤占用
本次測試共生成100個測試數據文件,存儲在~/testdata目錄下,使用du命令查看~/testdata目錄的文件大小
cd ~/testdata
du -h .
如下圖所示

2.查看TDengine的磁盤占用
TDengine的磁盤文件默認位置在目錄/var/lib/taos/data下,在查看磁盤文件大小時,首先將TDengine的服務停止
sudo systemctl stop taosd
然后,調用du命令,查看/var/lib/taos/data目錄下文件的大小
cd /var/lib/taos/datadu -h .
如下圖所示

3.查看Cassandra的磁盤占用
Cassandra的磁盤文件默認位置在目錄/var/lib/Cassandra/data/keyspace_name下,在查看磁盤文件大小時,首先將Cassandra的服務停止
sudo service Cassandra stop
本測試中,數據存儲在/var/lib/Cassandra/data/Cassandra目錄下,調用du命令,查看該目錄下文件的大小。
cd /var/lib/Cassandra/data/Cassandra
du -sh .
如下圖所示

4.磁盤占用情況對比
生成的測試數據文件占用的磁盤大小為3941MB,Cassandra磁盤占用12GB,TDengine磁盤占用459MB。在相對比較隨機數據集的情況下,TDengine的壓縮比約為Cassandra壓縮比的26.7倍。
在物聯網場景下,大多數采集數據的變化范圍都比較小。由于TDengine采用列式存儲,因此可以預期,TDengine在真實場景的壓縮比表現會更好。
功能對比
TDengine與Cassandra都是用與處理時序數據的存儲引擎,其功能比較接近,各有特色。
| 功能支持 | TDengine | Cassandra |
|---|---|---|
| SQL語法支持 | 支持 | 不支持 |
| 查詢中的計算支持* | 支持 | 不支持 |
| 非主鍵分組 | 支持 | 不支持 |
| 私有化部署支持 | 支持 | 支持 |
| 水平擴展能力 | 支持 | 支持 |
| 系統連接管理 | 支持 | 支持 |
| 查詢任務管理 | 支持 | 支持 |
| 數據導入工具 | 支持 | 支持 |
| 數據導出工具 | 支持 | 支持 |
| Web管理工具 | 支持 | 支持 |
| 多介質分級存儲 | 支持 | 支持 |
| Telegraf數據采集 | 支持 | 支持 |
| Grafana數據可視化 | 支持 | 支持 |
| RESTFul | 支持 | 支持 |
| C/C++ | 支持 | 不支持 |
| JDBC/ODBC | 支持 | 不支持 |
| GO | 支持 | 支持 |
| Python | 支持 | 支持 |
| 數據庫參數配置 | 支持 | 支持 |
| 配置副本數 | 支持 | 支持 |
| 數據時效 | 支持 | 支持 |
| 數據分區 | 支持 | 支持 |
| 流式計算 | 支持 | 不支持 |
| 數據訂閱 | 支持 | 不支持 |
| 微秒級精度 | 支持 | 支持 |
| 聚合函數支持 | 支持 | 支持 |
| 數據降采樣 | 支持 | 支持 |
| 數據分頁 | 支持 | 支持 |
| 數據插值 | 支持 | 支持 |
| 歷史數據修改 | 不支持 | 支持 |
| 時間線刪除 | 支持 | 支持 |
| 數據清空 | 支持 | 支持 |
總結
此次測試,從數據庫的讀、寫、查詢、壓縮比等方面對TDengine和Cassandra進行了對比測試。測試用數據集、測試程序源碼、執行的SQL語句都可以從 下載,測試具備可重復性。
從測試結果上看,TDengine Database的性能遠超Cassandra,寫入性能約為20倍,讀取性能約為17倍,聚合函數性能約為4000倍,按標簽分組查詢性能約為2500倍,按時間分組查詢性能約為119倍,具體見下表。
| TDengine | Cassandra | |
|---|---|---|
| 寫入吞吐量 | 1477208 記錄數/秒 | 記錄數61708/秒 |
| 100萬條記錄讀取時間 | 0.21秒 | 3.64秒 |
| 1億條記錄取平均值時間 | 0.06秒 | 264.49秒 |
| 1億條記錄按標簽分組取均值時間 | 0.123 | 308.39秒 |
| 1億條記錄按時間分組取均值時間 | 2.549秒 | 303.51秒 |



























