我的编程空间,编程开发者的网络收藏夹
学习永远不晚

InfluxDB引擎原理

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

InfluxDB引擎原理

引言

InfluxDB是一款Go语言写的时序数据库。时序数据库主要用于存储基于时间序列的指标数据,例如一个Web页面的PV、UV等指标,将其定期采集,并打上时间戳,就是一份基于时间序列的指标。时序数据库通常用来配合前端页面来展示一段时间的指标曲线。

为什么需要时序数据库

时序数据库较传统的关系型数据库以及NoSQL究竟有什么优势,下面会结合相关模型的特性进行分析

LSM Tree

LSM tree是基于Google的BigTable架构,数据以K-V方式存储。

写数据首先会插入到内存中的树。当内存中的树中的数据超过一定阈值时,会进行合并操作。合并操作会从左至右遍历内存中的树的叶子节点与磁盘中的树的叶子节点进行合并,当被合并的数据量达到磁盘的存储页的大小时,会将合并后的数据持久化到磁盘,同时更新父亲节点对叶子节点的指针。

InfluxDB引擎原理

这种机制保证了写入的效率,因为数据会在合并后顺序写入磁盘页。但会推迟磁盘回写,因此为保障读数据的一致性,会先在内存中查询,如果内存中没有,则到磁盘上查询。

删除数据时,在内存(C0)中查找,如果没有,则在内存中新建一个索引,将键值设置删除标记(创建墓碑),这样后续的滚动合并操作时,再有查询操作,就会被直接返回该键值不存在。 数据会在之后的Compaction当中从数据文件中删除。

Compaction

当日志文件超过一定大小的阈值是 (默认为 1MB):

建立一个新的memtable和日志文件,以后的操作都是用新的memtable和日志文件

后台进行如下操作:

  1. 将旧的 memtable写到SSTable中(过程为先转为immtable_table,然后遍历写入)

  2. 废弃旧的 memtable

  3. 删除旧的 memtable和日志文件

  4. 将新的SSTable加到level 0中.

InfluxDB引擎原理

对于时序数据而言,LSM tree的读写效率很高。但是热备份以及数据批量清理的效率不高。

B+ Tree

B+ Tree,很多关系型数据库像 Berkerly DB , sqlite , mysql 数据库都使用了B+树算法处理索引。B+ Tree的特点是数据按照索引有序排放,牺牲一定写入性能,保证了读取效率。但数据量很大时(GB),查询效率就会很低。因为数据量越大,树分叉就越多,遍历时的开销就越大。

TSM

influxdb在v0.9.5版本引入TSM引擎,该引擎修改自LSM

预写日志

当前日志文件达到2MB大小后封闭,并开始写新的日志文件

写数据时,日志文件落盘(fsync)且数据索引加入内存表后返回成功。这样的设计保证了数据的一致性。同时对写盘的吞吐性能提出要求,建议批量提交数据(influxdb提供了批量提交的API)。日志遵循TLV格式,并采用较精简的数据结构,来减少写操作的开销。

数据文件

文件结构
InfluxDB引擎原理一个文件的中数据块按照时序进行排列

对照LevelDB的结构,增加了min和max time, 基于一段时间范围的数据提取会非常简单

Data Block结构
InfluxDB引擎原理ID由存放的key (measurement name + tagset) 以及 field name进行hash(fnv64-a hash)生成
Compressd block当中会存储metric值,数据压缩算法后面会进行详述

Index Block结构
InfluxDB引擎原理

读取数据

首先会根据查询请求的时间范围,在数据文件中进行二进制搜索,找到符合范围的文件。之后在内存中的映射表根据查询指标项HASH获取ID,并通过索引找到数据块的起始地址。之后根据数据块及其下一数据块的timestamp我们可以推算出需要取出多少个数据块,最后将数据块中的数据解压,得到结果

更新数据

如果多个更新在同一个时间范围内,预写日志会缓存起来一起更新。

删除数据

两阶段式处理,第一阶段,预写日志会将其持久化在日志中,并通知索引维护内存中的墓碑. 此时查询数据,就会返回不存在。第二阶段,预写日志写索引文件,会优先处理删除,之后再处理删除操作之后的其他插入(包括删除的序列以及其他序列),并清除内存中的墓碑。

数据压缩

数据压缩的目的是为了减少存储空间以及降低写磁盘的开销
InfluxDB引擎原理每个压缩数据块当中会包含一个系列的点(压缩时间戳、压缩值), 因为时间戳是一个单调递增的序列,因此压缩时填入的时间的偏移量

总结

influxdb的数据存储结构实现了数据基于系列以及时间戳2个维度的有序存取。并通过压缩数据来降低I/O开销。在取一个系列在一定时间范围内的数据这个场景下,能够提高处理速度。 由于数据按时间进行归并,对Retention操作而言,可以以数据文件为单位进行操作,效率会比较高。


免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

InfluxDB引擎原理

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

搜索引擎工作原理是什么

本篇内容介绍了“搜索引擎工作原理是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!搜索引擎发展过程现代意义上的搜索引擎的祖先,是1990年
2023-06-04

golang工作流引擎的原理是什么

Golang工作流引擎的原理是通过定义和执行一系列工作流程来实现业务逻辑的自动化处理和流程管理。以下是工作流引擎的基本原理:工作流程定义:使用特定的语法或编程接口来定义工作流程,包括工作步骤、流程顺序、条件判断、并行处理等。这些定义可以通过
golang工作流引擎的原理是什么
2024-02-29

MySQL MyISAM默认存储引擎实现原理

默认MyISAM的表会在磁盘中产生3个文件:.frm(表结构文件)、.MYD(数据文件)、.MYI(索引文件)可以在创建的时候指定数据文件和索引文件的存储位置,只有MyISAM表支持:DATA DIRECTORY [=] 数据保存的绝对路径
2022-05-28

Python搜索引擎实现原理和方法

如何在庞大的数据中高效的检索自己需要的东西?本篇内容介绍了Python做出一个大数据搜索引擎的原理和方法,以及中间进行数据分析的原理也给大家做了详细介绍。 布隆过滤器 (Bloom Filter) 第一步我们先要实现一个布隆过滤器。 布隆过
2022-06-04

HBase的存储引擎内部原理剖析

HBase是一个分布式、可扩展、面向列的NoSQL数据库,它建立在Hadoop分布式文件系统(HDFS)之上,用于处理大规模数据集。以下是HBase存储引擎内部原理的剖析:HBase存储引擎内部原理数据模型:HBase的数据模型是一个稀疏
HBase的存储引擎内部原理剖析
2024-10-19

MySql数据库InnoDB引擎ACID的实现原理

那么数据库是如何实现这四大特性的呢? 本文以MySQL的InnoDB引擎为例,详细分析ACID四大事务特性的实现原理; 一、原子性(Atomicity),原子性的特点是一个事务必须被视为一个不可分割的最小工作单元,整个事务中的所有操作要么全部提交成功,要么全部
MySql数据库InnoDB引擎ACID的实现原理
2015-09-05

dedecms织梦模板引擎标签工作原理

织梦模板引擎是一种使用XML名字空间形式的模板解析器,使用织梦解析器解析模板的最大好处是可以轻松的制定标记的属性,感觉上就像在用HTML一样,使模板代码十分直观灵活,新版的织梦模板引擎不单能实现模板的解析还能分析模板里错误的标记。
2022-12-29

MySQL原理 - InnoDB引擎 - 行记录存储 - Redundant行格式

本文基于 MySQL 8在上一篇:MySQL原理 - InnoDB引擎 - 行记录存储 - Compact格式 中,我们介绍了什么是 InnoDB 行记录存储以及 Compact 行格式,在这一篇中,我们继续介绍其他三种行格式。Redundant 行格式这个是
MySQL原理 - InnoDB引擎 - 行记录存储 - Redundant行格式
2020-12-09

如何理解InnoDB引擎

这期内容当中小编将会给大家带来有关如何理解InnoDB引擎,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。一、综述innodb的物理文件包括系统表空间文件ibdata,用户表空间文件ibd,日志文件ib_l
2023-05-31

编程热搜

目录