Skip to content

caict-benchmark/BDC-TS

Repository files navigation

时序数据库性能基准测试说明

工具基于influxdb-comparisons,以BDC-TS为基准打造的压测工具。支持以下的数据库,或者基于以下数据库改写的数据库。

一、准备工作

需要安装golang和安装测试工程

1: 安装golang

yum install golang

2: 安装测试工程

测试工程包括生成数据工具、导入工具、生成查询语句工具和查询测试工具

如果没有指定GOPATH,需要指定GOPATH

export GOPATH=/root/go  # 指定工程目录,随便指定一个地方

安装生成数据工具

go install github.com/caict-benchmark/BDC-TS/cmd/bulk_data_gen@latest

安装导入数据工具

导入数据需要根据你基于的数据库不同,安装不同的导入工具

# influx
go install github.com/caict-benchmark/BDC-TS/cmd/bulk_load_influx@latest

# ES
go install github.com/caict-benchmark/BDC-TS/cmd/bulk_load_es@latest

# OPENTSDB
go install github.com/caict-benchmark/BDC-TS/cmd/bulk_load_opentsdb@latest

二、测试工具基本使用介绍

在安装完golang和测试工具以后,就可以开始测试了

1、启动数据库

测试之前,需要把你的时序数据库启动。测试工具默认去读写的是localhost:8086,如果你的数据库不是在这个地址,请在使用工具的时候指定参数-url

2、生成数据

生成数据有两种方式,分别是生成数据到文件和边生成数据边写入数据库

生成数据到文件

以influx为例(其他数据库替换工具名即可)

$GOPATH/bin/bulk_data_gen --seed=123 --use-case=vehicle --scale-var=1 --format=influx-bulk | gzip > influx_bulk_records__usecase_vehicle__scalevar_1__seed_123.gz

use-case:这里使用的vehicle,也就是BDC-TS标准,请不要修改
scalevar:定义有多少个设备同时上报,BDC-TS案例中约定20000或者20个车辆
format: 写es、influx、opentsdb等,根据实际填入
timestamp-start:数据开始时间 格式诸如 2008-01-01T08:00:01Z
timestamp-end:数据结束时间 格式诸如 2008-01-01T08:00:01Z

如,20000个设备产生1秒的数据应该使用以下命令

$GOPATH/bin/bulk_data_gen --seed=123 --use-case=vehicle --scale-var=20000 --format=es-bulk --timestamp-start=2008-01-01T08:00:00Z --timestamp-end=2008-01-01T08:00:01Z | gzip > es_bulk_records_usecase_vehicle__scalevar_20000_seed_123.gz

边生成数据边导入数据库

以influx为例(其他数据库替换工具名即可)

$GOPATH/bin/bulk_data_gen --seed=123 --use-case=vehicle --scale-var=1 --format=influx-bulk | $GOPATH/bin/bulk_load_influx  -workers 10 

3、导入数据

以influx为例(其他数据库替换工具名即可)

cat influx_bulk_records__usecase_vehicle__scalevar_1__seed_123.gz | gunzip | $GOPATH/bin/bulk_load_influx --batch-size=5000 --workers=2

4、生成查询语句

TODO

5、执行查询

TODO

6、测试结束后清理数据

以influx为例,其他的DB的清理方法欢迎补充

curl -XPOST 'http://localhost:8086/query?q=drop%20database%20benchmark_db'

7、处理测试结果

当测试结束后,导入测试会产生如下的测试结果,统计十分困难。所以这里提供一个处理脚本进行处理 结果很多

Elastic Search version 5.6.4
loaded 20000 items in 1.073012sec with 35 workers (mean point rate 18639.126855 items/sec, mean value rate 1118347.611283/s, 19.15MB/sec from stdin)
daemon URLs: [http://100.121.150.106:9207 http://100.121.153.226:9207]

处理脚本位置:BDC-TS/practices/filter_load_data.go 处理脚本的使用

filter_load_data.go --filePath "/Users/xxxx/xxx.txt"

统计结果如下面格式:

Items: 200000
Time token: 10.638713 sec
Workers: 35
Items rate: 19103.367969 items/sec
Values rate: 1146202.081250 values/sec
Data rate: 19.631000 MB/sec

三、时序数据库基准测试(BDC-TS)

我们工程的核心,是实现BDC-TS的测试。BDC-TS测试方案详见(CTSDB最佳实践):https://github.com/caict-benchmark/BDC-TS/blob/master/practices/CTSDB_Tencent/README.md
大家可以参考这个最佳实践进行测试

实时数据集

参考国标GB/T 32960.3-2016 电动汽车远程服务与管理系统技术规范 第3部分:通讯协议及数据格式,模拟实时生成的新能源汽车的运行数据 60个指标*20,000辆车=1,200,000个测点 数据生成间隔:1s(每个测点每隔1s产生一条数据,时间戳精确到毫秒,每秒共有120万个数据点生成,持续写入1小时,数据量约为73.8GB)

历史数据集

数据集1:测点少 数据生成到文件,数据总量约620.5GB 测点数:60个指标*20辆车=1,200个测点,数据跨度为1年

数据集2:测点多 数据生成到文件,数据总量约738GB 测点数:60个指标*20,000辆车=1,200,000个测,数据跨度为10小时

四、自定义数据库

如果你的数据库不是基于InfluxDB、Elasticsearch 、Cassandra 、MongoDB、OpenTSDB中的任何一种,或者数据格式与这些数据库不一致,请自行添加数据库类型。或者联系gdchaochao进行协助

方法是:仿照bulk_load、bulk_query_gen、cmd文件夹下的代码,重写一个数据库模型

五、java工具使用

java_tools目录下是使用java编写的部分工具,独立放在一个目录是为了和go编写的工具区分开来,java_tools目录下的工程目前只有一个数据生成工具,可以生成电网测试数据,格式是csv,使用方法见https://github.com/caict-benchmark/BDC-TS/blob/master/java_tools/data_gen/README.MD

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published