时序数据库 InfluxDB(四)

存储引擎


InfluxDB 数据的写入如下图所示:
在这里插入图片描述

所有数据先写入到 WAL( Write Ahead Log )预写日志文件,并同步到 Cache 缓存中,当 Cache 缓存的数据达到了一定的大小,或者达到一定的时间间隔之后,数据会被写入到 TSM 文件中。

为了更高效的存储大量数据,存储引擎会将数据进行压缩处理,压缩的输入和输出都是 TSM 文件,因此为了以原子方式替换以及删除 TSM 文件,存储引擎由 FileStore 负责调节对所有 TSM 文件的访问权限。

Compaction Planner 负责确定哪些 TSM 文件已经准备好了可以进行压缩,并确保多个并发压缩不会互相干扰。

Compactor 压缩器则负责具体的 Compression 压缩工作。

为了处理文件,存储引擎通过 Writers/Readers 处理数据的写和读。另外存储引擎还会使用 In-Memory Index 内存索引快速访问 measurements、tags、series 等数据。

在这里插入图片描述

存储引擎的组成部分:

  • In-Memory Index :跨分片的共享内存索引,并不是存储引擎本身特有的,存储引擎只是用到了它。
  • WAL :预写日志。
  • Cache :同步缓存 WAL 的内容,并最终刷写到 TSM 文件中去。
  • TSM Files :特定格式存储最终数据的磁盘文件。
  • FileStore :调节对磁盘上所有TSM文件的访问。
  • Compactor :压缩器。
  • Compaction Planner :压缩计划。
  • Compression :编码解码压缩。
  • Writers/Readers :读写文件。

硬件指南


为了应对不同的负载情况,我需要机器具有怎样的硬件配置?

由于集群模式只有商业版本,因此这里只看免费的单机版的情况。

为了定义负载,我们关注以下三个指标:

  • 每秒写入
  • 每秒查询
  • series 基数

对于查询情况,我们根据复杂程度分为三级:

  • 简单查询:
    • 几乎没用函数和正则表达式
    • 时间范围在几分钟,几小时,或者一天之内
    • 执行时间通常在几毫秒到几十毫秒
  • 中等复杂度查询:
    • 使用了多个函数和一两个正则表达式
    • 可能使用了复杂的 GROUP BY 语句,或者时间范围是几个星期
    • 执行时间通常在几百毫秒到几千毫秒
  • 复杂查询:
    • 使用了多个聚合、转换函数,或者多个正则表达式
    • 时间跨度很大,有几个月或几年
    • 执行时间达到秒级

硬件配置需要关注的有:CPU 核数,RAM 内存大小,IOPS 性能。

IOPS( Input/Output Operations Per Second ):每秒读写数,衡量存储设备(如 SSD 固态硬盘、HDD 机械硬盘等)的性能指标。

不同负载情况下的硬件配置参考如下:
在这里插入图片描述

由于 SSD 固态硬盘的性能更高,官方也建议使用 SSD ,上图也是使用 SSD 的情况。

对于元数据,诸如 database name、measurement、tag key、tag value、field key 都只会存储一次,只有 field value 和 timestamp 每个点都存储。非字符串的值大约需要三个字节,字符串的值需要的空间大小不固定,需要由压缩情况确定。

内存肯定是越大越好,但是如果 series 基数超过千万级别,在默认使用的 in-memory 索引方式下,会导致内存溢出,在数据结构设计时需要注意。

通过将 wal 和 data 目录设置到不同的存储设备上,有利于减少磁盘的争用,从而应对更高的写入负载。相关配置项(默认的配置文件为 influxdb.conf ):

[data]
    dir = "/var/lib/influxdb/data"
    wal-dir = "/var/lib/influxdb/wal"
时序数据库InfluxDB的性能测试是通过在特定环境下对其进行写入和查询测试来评估其性能表现。在一个具体的测试环境中,使用了4核16G的CPU内存和1Gbit/s的带宽,操作系统为Ubuntu 4.8.4-2ubuntu1~14.04.3。测试结果显示,InfluxDB在处理时序数据方面表现出色。 引用\[2\]中提到了对InfluxDB的性能测试报告。测试环境包括写入测试和查询测试。在写入测试中,通过模拟大量的写入操作来测试InfluxDB的写入性能。在查询测试中,通过执行各种类型的查询操作来测试InfluxDB的查询性能。 InfluxDB是用Go语言编写的一个开源分布式时序、事件和指标数据库,无需外部依赖。它专门设计用于处理时序数据,并且在处理大量数据和多样化数据类型方面表现出色。相比传统的关系型数据库InfluxDB时序数据处理方面具有更高的性能和效率。 总结来说,时序数据库InfluxDB在性能测试中展现出了优秀的表现,特别适用于处理时序数据。它的高性能和高效率使其成为许多应用场景中的首选数据库。 #### 引用[.reference_title] - *1* [【数据库时序数据库InfluxDB 性能测试和为什么时序数据库更快、时序数据库应用场景...](https://blog.youkuaiyun.com/weixin_42319496/article/details/119372355)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [性能爆表-时序数据库InfluxDB](https://blog.youkuaiyun.com/kobe_okok/article/details/117233188)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT枫斗者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值