跳到主要内容
版本:latest

性能测试

为了更直观的呈现 CnosDB 的性能,我们使用 tsdb-comparisons 测试工具,在CnosDB 2.3.0InfluxDB 1.8.10 之间做了写入性能测试的对比,下面是测试结论和测试细节信息。

测试结论

在保持同等batch-size大小,提高导入并发(至30);保持同等导入并发,提高batch-size大小(至2w);两种测试条件下,测试结果显示CnosDB的导入性能均要略优于InfluxDB。

测试前期

1.测试环境准备

CnosDBInfluxDB
版本2.3.01.8.10
机器1台1台
内核版本3.10.0-1160.81.1.el7.x86_643.10.0-1160.81.1.el7.x86_64
操作系统版本CentOS Linux release 7.9.2009 (Core)CentOS Linux release 7.9.2009 (Core)
CPU32核 Intel(R) Xeon(R) Gold 5218 CPU @ 2.30GHz32核 Intel(R) Xeon(R) Gold 5218 CPU @ 2.30GHz
内存256G256G
磁盘1块SSD盘(1T)1块SSD盘(1T)

注:CnosDB和InfluxDB均为容器内部署,CPU核数为8,内存限制为32G。

2.测试实例准备

  1. 提前安装好对应机器的db环境,go环境等,确保可以正常连接。

  2. 安装 CnosDB

    参照部署文档:Docker安装CnosDB

  3. 安装 InfluxDB

    参照官网:InfluxDB 1.8.10

3.配置项检查及修改

 CnosDB和InfluxDB均只修改了Data、Wal、Meta的存储文件夹路径,其余均保持默认,此处不做赘述。

4.数据集准备

用例确定性生成的PRNG种子要生成的设备数量开始时间戳结束时间戳每台设备每次读数时间间隔目标数据库数据量大小数据行数
iot1231002023-01-01T00:00:00Z2023-05-01T00:00:00Z50sCnosDB8G37,342,964
iot1231002023-01-01T00:00:00Z2023-05-01T00:00:00Z50sInfluxDB8G37,342,964

5.测试方案

此次测试方案主要从两个角度考量:保持同等batch-size下,测试导入并发;保持同等导入并发大小,测试batch-size。

batch-sizeworkers
100030
300030
300010
50008
200008

测试中期

  1. 生成CnosDB数据集
generate_data --use-case="iot" --seed=123 --scale=4000 --timestamp-start="2022-01-01T00:00:00Z" --timestamp-end="2022-02-01T00:00:00Z" --log-interval="10s" --format="cnosdb"gzip > /tmp/cnosdb-data.gz
  1. 生成InfluxDB数据集
generate_data --use-case="iot" --seed=123 --scale=4000 --timestamp-start="2022-01-01T00:00:00Z" --timestamp-end="2022-02-01T00:00:00Z" --log-interval="10s" --format="influxdb"gzip > /tmp/influxdb-data.gz
  1. 启动CnosDB
docker run --name cnosdb -p 8902:8902 -d --cpus=8 --memory=32g cnosdb/cnosdb:community-latest cnosdb run -M singleton
  1. 启动InfluxDB
docker run --name influxdb -p 8086:8086 -d --cpus=8 --memory=32g influxdb
  1. 执行load到CnosDB:
cd tsdb-comparisons/cmd/load_cnosdb
go build
./load_cnosdb --do-abort-on-exist=false --do-create-db=false --gzip=false --file=<file_path>/data.txt --db-name=<db_name> --urls="http://<ip>:8902" --batch-size=<batch_size_num> --workers=<workers_num>
  1. 执行load到InfluxDB:
cd tsdb-comparisons/cmd/load_cnosdb
go build
./load_influx --do-abort-on-exist=false --do-create-db=false --gzip=false --file=<file_path>/data.txt --db-name=<db_name> --urls="http://<ip>:8086" --batch-size=<batch_size_num> --workers=<workers_num>

测试结果

CnosDBInfluxDB性能倍数
batch-sizeworkersoverall row/soverall metric/soverall row/soverall metric/s
100030102089.67807526.6693781.54741809.551.08
300030137468.171087369.62106206.98840094.401.29
300010211845.941675695.81158378.111252766.681.33
50008176883.431399143.30162338.481284093.141.08
200008174757.781382329.47160626.451270551.001.08