本篇主要对InfluxDB和TimeScaleDB进行功能和性能对比。
目录
对比InfluxDB与TimeScaleDB数据存储空间占用
目的及最终结论
对比InfluxDB与TimeScaleDB的功能
结论:TimeScaleDB的功能更加完善。
对比InfluxDB与TimeScaleDB数据写入性能
结论:InfluxDB的写入性能约为TimeScaleDB的两倍
使用相同的表结构,不做任何表结构层面的优化,在同一台机器进行测试,InfluxDB的写入性能约为TimeScaleDB的两倍
对比InfluxDB与TimeScaleDB数据存储空间占用
结论:InfluxDB的存储空间占用不到TimeScaleDB的50%
使用相同的表结构,不做任何表结构层面的优化,在同一台机器进行测试,InfluxDB的存储空间占用不到TimeScaleDB的50%
对比InfluxDB与TimeScaleDB数据读取性能
暂未完成
功能对比
TimeScaleDB的功能更完善。TimeScaleDB作为PostgreSQL的扩展,只是在数据存储上利用PostgreSQL的特性做了一些优化,PostgreSQL支持的功能,TimeScaleDB全部支持。而InfluxDB是分析型时序数据库,舍弃了很多交易型数据库必须支持的功能。
增删改:InfluxDB不支持对数据的修改,InfluxDB只支持按tag或时间戳删除。TimeScaleDB都支持。
索引:InfluxDB时间戳和tags带索引,不支持自定义索引。TimeScaleDB更加灵活,可自定义索引
约束:InfluxDB不支持,TimeScaleDB支持
聚合函数:常用的聚合函数两种数据库都支持,TimeScaleDB的函数覆盖面更广一些。
性能对比
测试环境
测试机
centos虚拟机
cpu: AMD Ryzen 5 1600 Six-Core(4线程)
内存:8G
磁盘:机械硬盘
TimeScaleDB配置
版本:PostgreSQL 10.4+TimeScaleDB 0.10
shared_buffers = 2g (推荐设置为机器内存的1/4,默认值为1g)
wal_buffers = 64m (推荐设置为shared_buffers的1/32,默认值为16m)
wal_writer_delay = 800ms(默认值200ms)
除上述修改之外均使用默认配置
InfluxDB配置
版本:1.6.0
cache-max-memory-size = "2g" (默认值为1g)
cache-snapshot-memory-size = "100m"(默认值为25m)
[http] log-enabled = false
wal与data目录指定不同磁盘
除上述修改之外均使用默认配置
测试方式
使用JAVA代码编写InfluxDB和TimeScaleDB的写入程序,在本地运行测试程序读写服务器的数据库,写入时batchsize为5000,读取数据时全表扫描读取
batchsize取用5000的原因是:使用上述表结构测试,TimeScaleDB和 Inf