iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >InfluxDB引擎原理
  • 644
分享到

InfluxDB引擎原理

2024-04-02 19:04:59 644人浏览 独家记忆
摘要

引言InfluxDB是一款Go语言写的时序数据库。时序数据库主要用于存储基于时间序列的指标数据,例如一个WEB页面的PV、UV等指标,将其定期采集,并打上时间戳,就是一份基于时间序列的指标。时序数据库通常用

引言

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操作而言,可以以数据文件为单位进行操作,效率会比较高。


您可能感兴趣的文档:

--结束END--

本文标题: InfluxDB引擎原理

本文链接: https://www.lsjlt.com/news/40192.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • JavaScript引擎的运行原理
    这篇文章主要讲解了“JavaScript引擎的运行原理”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JavaScript引擎的运行原理”吧!一些名词JS引擎...
    99+
    2024-04-02
  • JavaScript 引擎的运行原理是什么
    这篇文章将为大家详细讲解有关JavaScript 引擎的运行原理是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。注意:本文主要基于 Node.js 和基...
    99+
    2024-04-02
  • 搜索引擎工作原理是什么
    本篇内容介绍了“搜索引擎工作原理是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!搜索引擎发展过程现代意义上的搜索引擎的祖先,是1990年...
    99+
    2023-06-04
  • golang工作流引擎的原理是什么
    Golang工作流引擎的原理是通过定义和执行一系列工作流程来实现业务逻辑的自动化处理和流程管理。以下是工作流引擎的基本原理: 工...
    99+
    2024-02-29
    golang
  • MySQL 存储引擎 - InnoDB 实现原理介绍
    存储结构   内存结构 内存结构主要包括 Buffer Pool、Change Buffer、Adaptive Hash Index和 Log Buffer 四大组件 Buffer Pool 缓冲池,简称BP。BP以 Page 页为单位,...
    99+
    2023-10-04
    mysql 数据库
  • influxdb的原理和用法是什么
    今天就跟大家聊聊有关influxdb的原理和用法是什么,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。influxdb是什么influxdb是一个由g...
    99+
    2024-04-02
  • javascript与php模板引擎的实现原理
    这篇文章主要介绍“javascript与php模板引擎的实现原理”,在日常操作中,相信很多人在javascript与php模板引擎的实现原理问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望...
    99+
    2024-04-02
  • dedecms织梦模板引擎标签工作原理
    织梦模板引擎是一种使用XML名字空间形式的模板解析器,使用织梦解析器解析模板的最大好处是可以轻松的制定标记的属性,感觉上就像在用HTML一样,使模板代码十分直观灵活,新版的织梦模板引...
    99+
    2022-12-29
    dedecms模板引擎工作原理 织梦模板标签工作原理
  • MYSQL数据库Innodb 引擎mvcc锁实现原理
    目录1 数据库设置隔离级别2 数据库表以及案例操作3 mvcc 实现原理4 ACID 的实现前言: 大家都知道在java 开发过程中,会经常用到锁,在java 代码中,我们都知道锁是...
    99+
    2024-04-02
  • springboot学习之Thymeleaf模板引擎及原理介绍
    目录模板引擎什么是模板引擎?模板引擎的原理引入ThymeleafThymeleaf分析Thymeleaf 语法学习模板引擎 springboot我们目前是以jar包的形式打包,实际上...
    99+
    2024-04-02
  • MySql InnoDB存储引擎之Buffer Pool运行原理讲解
    目录1. 前言2. Buffer Pool2.1 Buffer Pool结构2.2 Free链表2.3 缓冲页哈希表2.4 Flush链表2.5 LRU链表2.6 多个实例2.7 Buffer Pool状态信息3. 总结...
    99+
    2023-01-04
    MySql InnoDB存储引擎Buffer Pool MySql InnoDB MySql InnoDB Buffer Pool
  • 如何解读MySQL的InnoDB引擎日志工作原理
    这篇文章主要介绍了如何解读MySQL的InnoDB引擎日志工作原理,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。当你使用UPDATE, IN...
    99+
    2024-04-02
  • 如何理解InnoDB引擎
    这期内容当中小编将会给大家带来有关如何理解InnoDB引擎,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。一、综述innodb的物理文件包括系统表空间文件ibdata,用户表空间文件ibd,日志文件ib_l...
    99+
    2023-05-31
  • MySql InnoDB存储引擎之Buffer Pool运行原理讲解
    目录1. 前言2. Buffer Pool2.1 Buffer Pool结构2.2 Free链表2.3 缓冲页哈希表2.4 Flush链表2.5 LRU链表2.6 多个实例2.7 B...
    99+
    2023-01-04
    MySql InnoDB存储引擎Buffer Pool MySql InnoDB MySql InnoDB Buffer Pool
  • Mysql存储引擎与数据存储的原理是什么
    Mysql存储引擎与数据存储的原理是什么,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。前言作为一名开发人员,在日常的工作中会难以避免地接触到数...
    99+
    2024-04-02
  • unity3D引擎
    Mecanim动画系统:导入模型与动画编辑Avatar编辑动画控制器材质预设脚本获取脚本组件:GetComponent(脚本组件名称);获取物体:定义变量、Gameobject.Find("物体路径名称");、Gameobject.Find...
    99+
    2023-01-31
    引擎 unity3D
  • 互联网中百度搜索引擎原理的示例分析
    这篇文章将为大家详细讲解有关互联网中百度搜索引擎原理的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、百度抓取原理百度搜索引擎在抓取我们网站的时候,必须要有一个渠道,当你网站刚上线的时候,新建了...
    99+
    2023-06-10
  • MySQL存储引擎怎么理解
    这篇文章主要讲解了“MySQL存储引擎怎么理解”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“MySQL存储引擎怎么理解”吧!今天发现了一个神奇的参数:-si...
    99+
    2024-04-02
  • MySQL中MyISAM默认存储引擎的实现原理是什么
    这篇文章将为大家详细讲解有关MySQL中MyISAM默认存储引擎的实现原理是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。默认MyISAM的表会在磁盘中产生3个文件:...
    99+
    2024-04-02
  • 详解MySQL执行原理、逻辑分层、更改数据库处理引擎
    用了那么长时间的MySQL,sql语句相信早已烂熟于心,于是,我就试着去了解它的执行原理,以下是我学习过程中的总结要点。 只要是B/S架构,都是会有客户端与服务端,mysql也不例外。 首先客户端发出一个请...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作