跳到主要内容
版本:latest

CnosDB vs TimeScaleDB

CnosDB支持原生HTTP接口写入Line Protocol协议数据,TimeScaleDB不支持原生HTTP接口写入Line Protocol协议数据,因此采用了不同的数据源

CnosDB 2.4.1 vs TimeScaleDB 2.10.1

CnosDB 2.4.1TimeScaleDB 2.10.1 之间做了写入、查询和压缩比性能测试的对比,下面是测试结论和测试细节信息。

测试结论

在写入、查询和压缩比方面,CnosDB均更优于TimeScaleDB

测试前期

1.测试环境准备

CPU:64 CPUs x Intel(R) Xeon(R) Gold 5218 CPU @ 2.30GHz

内存:256 GB

硬盘:SSD NVMe 协议

2.测试实例准备

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

  2. 安装 CnosDB

    参照部署文档:安装CnosDB

  3. 安装 TimeScaleDB

    参照官网:TimeScaleDB 2.10.1

3.配置项检查及修改

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

4.数据集准备

用例确定性生成的PRNG种子要生成的设备数量开始时间戳结束时间戳每台设备每次读数时间间隔目标数据库数据量大小数据行数
iot1231002020-01-01T00:00:00Z2021-01-01T00:00:00Z6.3sCnosDB201G450,721,871
iot1231002020-01-01T00:00:00Z2021-01-01T00:00:00Z6.3sTimeScaleDB164G450,729,188

测试中期

TimeScaleDB测试工具

CnosDB测试工具

  1. 生成CnosDB数据集
generate_data --use-case="iot" --seed=123 --scale=100 --timestamp-start="2020-01-01T00:00:00Z" --timestamp-end="2021-01-07T00:00:00Z" --log-interval="6.3s" --format="cnosdb" | gzip > cnosdb-iot-123-100-2021-data.gz
  1. 生成TimeScaleDB数据集
tsbs_generate_data --use-case="iot" --seed=123 --scale=100 --timestamp-start="2020-01-01T00:00:00Z" --timestamp-end="2021-01-01T00:00:00Z" --log-interval="6.3s" --format="timescaledb" | gzip > timescaledb-iot-123-100-2021-data.gz
  1. 启动CnosDB
nohup ./target/release/cnosdb run --config ./config/config_8902.toml -M singleton &
  1. 启动TimeScaleDB
systemctl start postgresql-14
  1. 执行load到CnosDB:
./load_cnosdb --do-abort-on-exist=false --do-create-db=false --gzip=false --file=cnodb-iot-seed-123-scale-100-2021 --db-name=<db_name> --urls="http://<ip>:8902" --batch-size=<batch_size_num> --workers=<workers_num>
  1. 执行load到TimeScaleDB:
./bin/tsbs_load_timescaledb --postgres="sslmode=disable" --host="localhost" --port=5432 --pass="password" --user="postgres" --file="./timescaledb-iot-123-100-2021-data" --db-name="benchmark" --batch-size=<batch_size_num> --workers=<workers_num>

写入测试结果

CnosDB 2.4.1TimeScaleDB 2.10.1性能倍数
110w~150w row/s60~63w row/s2

查询测试结果

SQLCnosDB 2.4.1TimeScaleDB 2.10.1
select count (*) from readings1.221s6.902 s
1天时间聚合查询(select count(*), max(latitude), min(latitude), avg(latitude) from readings where ts >= '2021-01-01 00:00:00.000000' and ts <= '2021-01-02 00:00:00.000000';)0.166s0.085 s
10天时间聚合查询(select count(*), max(latitude), min(latitude), avg(latitude) from readings where ts >= '2021-01-01 00:00:00.000000' and ts <= '2021-01-10 00:00:00.000000';)0.176s0.707 s
90天时间聚合查询(select count(*), max(latitude), min(latitude), avg(latitude) from readings where ts >= '2020-01-01 00:00:00.000000' and ts <= '2021-01-01 00:00:00.000000';)1.352s6.831 s
180天时间聚合查询(select count(*), max(latitude), min(latitude), avg(latitude) from readings where ts >= '2020-01-01 00:00:00.000000' and ts <= '2021-01-01 00:00:00.000000';)2.313s13.827 s
1年时间聚合查询(select count(*), max(latitude), min(latitude), avg(latitude) from readings where ts >= '2020-01-01 00:00:00.000000' and ts <= '2021-01-01 00:00:00.000000';)3.564s28.063 s

压缩比测试结果

CnosDB 2.4.1TimeScaleDB 2.10.1
原始数据201G164G
写入后落盘数据26G22G
压缩比7.73077.45