InfluxDB vs TimeScaleDB 功能/性能对比 (二)

在上一篇文章《 InfluxDB vs TimeScaleDB 功能/性能对比 (一)》中,主要对比了两种数据库在功能方面的差异,以及不进行任何优化的情况下,数据批量写入的性能、存储空间的占用情况。

本篇主要对两种数据库在实际应用场景中的读写性能、空间占用进行对比,针对实际应用场景,两种数据库在表结构上都做了一些优化。

目录

测试目的及最终结论

写入性能

存储空间占用

读取性能

全表扫描性能对比

条件查询性能对比

聚合查询性能对比

测试环境

TimeScaleDB配置

InfluxDB配置

测试数据

测试方式

测试用例及结果

写入性能

存储空间占用

全表扫描性能

条件查询性能

数据源维度查询

时间维度查询

时间+数据源维度查询

采集指标维度小范围查询

聚合查询性能

全表

以数据源维度为聚合条件

以时间维度聚合条件


 

测试目的及最终结论

本次测试主要为了对比两种数据库写入性能以及不同场景下的查询性能。

由于InfluxDB的数据查询架构和数据存储方式特殊(数据存储可参见《InfluxDB存储引擎—— TSM文件与数据写入》,数据查询流程可参见《InfluxDB存储引擎—— TSI文件与数据读取》),因此fields的数量在一定程度会影响数据查询性能,所以整理了查询单列和查询所有列的测试结果。

总的来说,InfluxDB在写入性能和存储空间上有明显优势,读取时单列查询速度较快,多列查询性能比TimeScaleDB差。

所有结论都基于本次所采用的测试数据,不同的测试数据会有不同的测试结果。

写入性能

InfluxDB的写入性能约为TimeScaleDB的3倍

存储空间占用

InfluxDB的存储空间占用不到TimeScaleDB的30%

 

读取性能

全表扫描性能对比

查询所有列时,TimeScaleDB的性能是InfluxDB的7倍左右

查询单列时,InfluxDB的性能是TimeScaleDB的2倍左右

详细数据见下文

条件查询性能对比

查询所有列时,TimeScaleDB的性能是InfluxDB的7倍左右

查询单列时,InfluxDB的性能是TimeScaleDB的2倍左右

详细数据见下文

聚合查询性能对比

聚合查询单列时InfluxDB的性能约为TimeScaleDB的2倍,聚合查询多列时TimeScaleDB性能几乎没有变化,InfluxDB的性能随着聚合查询列数的增加而降低,性能与聚合查询列数成反比。

详细数据见下文

 

测试环境

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目录指定不同磁盘

除上述修改之外均使用默认配置

 

测试数据

场景:

以1秒为时间间隔,采集机器资源消耗情况,并记录机器的操作系统以及所在城市。假设共4个数据源,采集9个指标,示例如图:

设计表结构:

CREATE TABLE test_function (
    "time" timestamp with time zone,--以1秒递增
    type text,--数据源属性,只有2个取值:windows/linux 
	address text,--数据源属性,只有2个取值:guangzhou/shenzhen
    usage_system double precision,--以下其他字段全部为随机生成的double值
    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
) tablespace with_index_ts;

总行数:1000万行

总数据量:900M

单行大小:88byte

TimeScaleDB:时间分区跨度为7天,time/type/address三个字段带btree索引。

InfluxDB:时间分区跨度为7天,type/address设置为tag

 

测试方式

使用JAVA代码编写InfluxDB和TimeScaleDB的写入程序,在本地运行测试程序读写服务器的数据库。

 

测试用例及结果

写入性能

InfluxDB写入性能明显优于TimeScaleDB。

  行数吞吐量(行/秒)
InfluxDB 37593
TimeScaleDB 12269

原因分析:

InfluxDB存储引擎是基于LSM进行改进的TSM,LSM是利用顺序读写磁盘比随机读写主存的性能高三个数量级这一特性来保证数据的写性能,具体可参考:《Log Structured Merge Trees(LSM) 原理》

 

存储空间占用

InfluxDB对存储空间的占用明显小于TimeScaleDB。

  空间占用(M)
InfluxDB
  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值