本篇主要对InfluxDB和TimeScaleDB进行功能和性能对比。

目录

目的及最终结论
<https://blog.csdn.net/u013480467/article/details/81478514#%E7%9B%AE%E7%9A%84%E5%8F%8A%E6%9C%80%E7%BB%88%E7%BB%93%E8%AE%BA>

对比InfluxDB与TimeScaleDB的功能
<https://blog.csdn.net/u013480467/article/details/81478514#%E5%AF%B9%E6%AF%94InfluxDB%E4%B8%8ETimeScaleDB%E7%9A%84%E5%8A%9F%E8%83%BD>

对比InfluxDB与TimeScaleDB数据写入性能
<https://blog.csdn.net/u013480467/article/details/81478514#%E5%AF%B9%E6%AF%94InfluxDB%E4%B8%8ETimeScaleDB%E6%95%B0%E6%8D%AE%E5%86%99%E5%85%A5%E6%80%A7%E8%83%BD>

对比InfluxDB与TimeScaleDB数据存储空间占用
<https://blog.csdn.net/u013480467/article/details/81478514#%E5%AF%B9%E6%AF%94InfluxDB%E4%B8%8ETimeScaleDB%E6%95%B0%E6%8D%AE%E5%AD%98%E5%82%A8%E7%A9%BA%E9%97%B4%E5%8D%A0%E7%94%A8>

对比InfluxDB与TimeScaleDB数据读取性能
<https://blog.csdn.net/u013480467/article/details/81478514#%E5%AF%B9%E6%AF%94InfluxDB%E4%B8%8ETimeScaleDB%E6%95%B0%E6%8D%AE%E8%AF%BB%E5%8F%96%E6%80%A7%E8%83%BD>

功能对比
<https://blog.csdn.net/u013480467/article/details/81478514#%E5%8A%9F%E8%83%BD%E5%AF%B9%E6%AF%94>

性能对比
<https://blog.csdn.net/u013480467/article/details/81478514#%E6%80%A7%E8%83%BD%E5%AF%B9%E6%AF%94>

测试环境
<https://blog.csdn.net/u013480467/article/details/81478514#%E6%B5%8B%E8%AF%95%E7%8E%AF%E5%A2%83>

测试机
<https://blog.csdn.net/u013480467/article/details/81478514#%E6%B5%8B%E8%AF%95%E6%9C%BA>

TimeScaleDB配置
<https://blog.csdn.net/u013480467/article/details/81478514#TimeScaleDB%E9%85%8D%E7%BD%AE>

InfluxDB配置
<https://blog.csdn.net/u013480467/article/details/81478514#InfluxDB%E9%85%8D%E7%BD%AE>

测试方式
<https://blog.csdn.net/u013480467/article/details/81478514#%E6%B5%8B%E8%AF%95%E6%96%B9%E5%BC%8F>

测试数据
<https://blog.csdn.net/u013480467/article/details/81478514#%E6%B5%8B%E8%AF%95%E6%95%B0%E6%8D%AE>

测试结果
<https://blog.csdn.net/u013480467/article/details/81478514#%E6%B5%8B%E8%AF%95%E7%BB%93%E6%9E%9C>

数据写入性能
<https://blog.csdn.net/u013480467/article/details/81478514#%E6%95%B0%E6%8D%AE%E5%86%99%E5%85%A5%E6%80%A7%E8%83%BD>

存储空间占用
<https://blog.csdn.net/u013480467/article/details/81478514#%E5%AD%98%E5%82%A8%E7%A9%BA%E9%97%B4%E5%8D%A0%E7%94%A8>

数据读取性能
<https://blog.csdn.net/u013480467/article/details/81478514#%E6%95%B0%E6%8D%AE%E8%AF%BB%E5%8F%96%E6%80%A7%E8%83%BD>

 

目的及最终结论

对比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和
InfluxDB的写入batchsize逐渐提升的过程中,当batchsize接近5000时性能有明显提升,当batchsize大于5000时InfluxDB性能下降明显,TimeScaleDB性能有微小提升。综合考虑后将batchsize设置为5000进行测试。测试数据如图:


 

耗时(S)


batchsize

timeScaleDB

InfluxDB


100万

415

——


10万

390

——


1万

438

677


5000

477

355


1000

590

499


500

611

606


100

866

1090

测试数据

表结构:
CREATE TABLE cpu_ts ( "time" timestamp with time zone, --精度ms,以1ms递增 hostname
text, --值为host_0到host_3999,循环取值 usage_user double precision,
--以下其他字段全部为随机生成的double值 usage_system double precision, usage_idle double
precision, usage_nice double precision, usage_iowait double precision,
usage_irq double precision, usage_softirq double precision, usage_steal double
precision, usage_guest double precision, usage_guest_nice double precision )
总行数:1亿行

总数据量:18.1G

单行大小:95byte

TimeScaleDB:使用默认的时间分区跨度:1个月 ,所有数据都将写入同一个分区

InfluxDB:使用默认的时间分区跨度:7天,所有数据都将写入同一个分区

测试结果

由于InfluxDB的时间戳是有索引的 ,因此测试TimeScaleDB时在时间戳字段创建了btree索引。

数据写入性能

单并发

单并发写入的情况下,InfluxDB的写入性能约为TimeScaleDB的2倍,写入数据的过程中,TimeScaleDB内存消耗明显高于InfluxDB。

  行数吞吐量 CPU 内存 网络 磁盘
TimeScaleDB 15865 15+% 50-99% 5M/s 10%-80%
InfluxDB 33101 20+% 30-50% 10+M/s 0-100%
多并发

4并发写入,InfluxDB的性能表现依旧比TimeScaleDB好,将近2倍写入性能,资源消耗差异不大。

  并发数 行数吞吐量 CPU 内存 网络 磁盘
TimeScaleDB 4 43572 50+% 99% 10-20M/s 30%-100%
InfluxDB 4 94786 60+% 90% 30-40M/s 20%-100%
存储空间占用

以上测试数据,InfluxDB存储空间占用不到TimeScaleDB的一半。(原始数据量18.1G)

  空间占用(G)
TimeScaleDB 16.4
InfluxDB 7.3
数据读取性能

暂未完成

 

友情链接
KaDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:[email protected]
QQ群:637538335
关注微信