TDengine与Cassandra对比测试

TDengine与Cassandra对比测试

为帮助用户了解TDengine的指标,特将TDengine与Cassandra做了读写性能对比测试。

测试环境

对比测试的测试程序和数据库服务在同一台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程序生成测试数据集,测试程序源代码行数较多,因此您可以到https://github.com/taosdata/TDengine/tree/master/tests/comparisonTest/dataGenerator 下载,执行如下语句

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

3.测试数据生成程序用法

相关参数如下

  • dataDir 生成的数据文件路径
  • numOfFiles 生成的数据文件数目
  • numOfDevices 测试数据集中的设备数目
  • rowsPerDevice 测试数据集中每台设备包含的记录条数

4.生成测试数据

执行如下命令,会在~/testdata目录下生成100个数据文件,每个文件包含100台设备的测试数据;合计10000台设备,每台设备10000条记录

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

TDengine环境准备

TDengine是一个开源的专为物联网、车联网、工业互联网、IT运维等设计和优化的大数据平台。除核心的快10倍以上的时序数据库功能外,还提供缓存、数据订阅、流式计算等功能,最大程度减少研发和运维的工作量。

1.安装部署

  • 下载tdengine-1.6.1.0.tar.gz,地址https://www.taosdata.com/
  • 安装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为相同结构的设备创建一张超级表,而每个具体的设备则单独创建一张数据表。因此,超级表的数据字段为采集时间、温度、湿度等与时间序列相关的采集数据;标签字段为设备编号、设备分组编号、设备名称等设备本身固定的描述信息。

创建超级表的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的测试程序。

测试程序源代码行数较多,因此您可以到https://github.com/taosdata/TDengine/tree/master/tests/comparisonTest/tdengine 下载,执行如下语句

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 http://www.apache.org/dist/Cassandra/debian 311x main" | sudo tee -a /etc/apt/sources.list.d/Cassandra.sources.list

curl https://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语言接口,编写数据写入及查询程序,测试程序源代码行数较多,因此您可以到https://gith

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值