码住!详解时序数据库不同分类与性能对比

8a615a9f98ffee2f6a21a201fc49fbee.png

加速发展中的时序数据库,基于不同架构,最流行的类别是?

作为管理工业场景时序数据的新兴数据库品类,时序数据库凭借着对海量时序数据的高效存储、高可扩展性、时序分析计算等特性,一跃成为物联网时代工业领域颇受欢迎的数据库。

从诞生到发展至今,时序数据库应用的关键技术也在不断进步。其中,管理海量时序数据,为其适配灵活、高压缩、支持高读写性能的存储架构便是亟需解决的难点之一。

根据存储架构的不同,时序数据库可以进一步分类。本文将详细解析三种不同存储架构下,每一类时序数据库的特点,及其对时序数据的读写、压缩等性能。

0b906e2293301b80ac61a5e3ff7fc445.png

三类时序数据库的存储架构分类、代表性系统与性能对比

01

基于关系型数据库的时序数据库

在没有专门管理时序数据的数据库之前,人们通常使用关系型数据库管理时序数据。

关系型数据库通常基于 B+tree 数据结构,这种数据结构在处理单个时间序列的批量数据写入时具有很高的性能。但是随着时序数据规模的不断增长,这种数据结构在同时处理数千、数万个时间序列的批量数据写入请求时,性能会急剧下降。

因此,在海量时序数据写入的工业场景中,关系型数据库的性能会显得捉襟见肘,并不适用。

部分时序数据库继承了关系型数据库的生态优势,如原生支持标准 SQL 语法,并通过扩展关系型数据库以优化时序数据存储。这类时序数据库在数据写入后建立针对时序数据的表模型,并按时间分区进行数据点的分区存储和压缩,最终写入关系型数据库中。

8c2b27a2806105e5b24cd80b71820bad.png

该类时序数据库的典型代表如 TimescaleDB,其通过扩展关系型数据库 PostgreSQL 实现时序数据管理。TimescaleDB 通过在 PostgreSQL 的查询计划器、数据模型和执行引擎添加钩子,可以构建高度定制化的扩展层。基于该扩展模型,TimescaleDB 可以利用 PostgreSQL 的多个属性,例如可靠性、安全性以及丰富的第三方工具。

总结来看,基于关系型数据库的时序数据库提供了全部的 SQL 功能,但由于无法避免时序数据场景中不需要的事务保证,对读写性能具有较大副作用。且由于关系型数据库基于行式存储构建时序数据的表模型,对于测点数、数据量大的时序数据来说,写入速度和压缩比相比采用列式存储的时序数据库,会有较大的差距,其分布式架构的可扩展性也存在短板

02

基于 KV 存储的时序数据库

基于 KV (key-value)存储的时序数据库,通过扩展 NoSQL 数据库实现时序数据存储,其将写入的时序数据解析后,构建成 KV 模型,并以 KV 形式将数据持久化在分布式文件系统上。一组键值对中,key 是由测量指标、标签组合、测量字段键构成,value 则是由测量字段值和时间戳构成。

38ab9a46ed00b1cea420888f5436e17d.png

该类数据库的代表是 OpenTSDB,其使用了日志结构合并树(log structured merge tree,LSM-tree)的数据结构。这是一种针对写入密集的工作负载优化的数据结构,非常适合时序数据写入频率高、体量大的应用场景。

LSM-tree 结构由三部分组成:预写日志(WAL)、内存表(分为可变内存表和不可变内存表)和排序字符串表(sorted string table,sstable)。

在此结构下写入或更新数据时,每条 KV 数据将以追加的方式写入预写日志(WAL),相同的数据也被再次写入可变内存表中,这个内存表也就是时序数据的缓存表。当可变内存表的大小达到阈值后,会变成不可变内存表,并首先对其缓存的数据按照 key 的字典顺序排序,然后将排序后的 KV 数据以数据块的形式顺序写入 sstable 文件。

需要注意的是,LSM-tree 层级(level)中只能容纳一定大小的 sstable 文件,不同文件之间可能存在 key 范围重叠的情况,这时会触发合并操作。数据库会将当前层级中与下一层级中存在 key 范围重叠的 sstable 文件合并写入一个新的 sstable 文件。

总体而言,基于 KV 存储的时序数据库运用 LSM-tree 结构,具有高通量写入的天然性能优势,再加上使用了分布式文件系统,因此具有很高的扩展性

但是这类数据库也存在一定的问题。由于合并操作的存在,相同的数据会在不同层级之间重复写入,因此产生了写放大问题,从而导致数据的写入吞吐量降低。同时,时序数据通常具有多个标签组合,当标签集的数据量增加时,基于标签组合的 key 的数量会急剧膨胀,而 key 通常是在内存中索引的,所以内存资源占用也会急剧增加

03

原生时序数据库

原生时序数据库是面向时序数据存储全新研发的时序数据库。该类型时序数据库不依赖第三方存储,使用列式存储,提供极致的数据写入、查询和压缩能力,部署和运维更加简单

从下图可以看出,这类数据库灵活运用了时序索引、数据缓存、数据分区、预写日志等多类设计,在存储结构 LSM-tree 的基础上,旨在全面提升全链路的时序数据管理性能。

deadcf98dce1e8295f0f073f0d552ab6.png

原生时序数据库的代表是 InfluxDB 和 IoTDB。InfluxDB 在其类似 LSM-tree 的 TSM-tree 结构中,引入了 series-key 的概念,根据时间特征对数据实现了很好的分类,从而有效减少了冗余存储,提高了数据压缩率。

IoTDB 则依靠自研的时序数据标准文件格式 Apache TsFile,为其写入、压缩、查询的优异性能提供了良好的基础。TsFile 是 IoTDB 的底层数据文件存储格式,其结构分为数据区与索引区,通过索引区的文件级索引,并仅将必要的数据列加载到内存中,TsFile 可实现海量序列低延迟查询;通过数据区的多种分段摘要信息,TsFile 能够保障 IoTDB 的数据过滤、聚合性能

同时,TsFile 支持列式存储,并采用二阶差分编码、游程编码(RLE)、位压缩和 Snappy 等先进的编码和压缩技术,优化时序数据的存储和访问,实现时序数据高压缩比,相比 InfluxDB 磁盘空间占用可降低 80%。TsFile 也支持对时间戳列和数据值列进行单独编码,以达到更好的数据处理效能

bc8e606a3b5969a00009aaacb8772744.png

基于 TsFile 文件格式,IoTDB 进一步自研构建了顺乱序分离引擎 IoTLSM。当新数据写入时,首先记入预写日志(WAL),通过 IoTDB 独有的顺乱序判断机制,将这个数据分到顺序空间或乱序空间。

如果数据分到顺序空间,并触发刷盘,存储引擎会直接将数据文件刷到最高层,这便对顺序数据实现了最优先、最优化的处理。如果数据分到乱序空间,IoTDB 会通过多种空间类合并、跨空间合并方法消除乱序文件,从而解决了工业场景出现乱序数据、影响写入性能的痛点

最后,对于前文提到的 LSM-tree 结构合并操作导致的写放大问题,IoTDB 的存储引擎结构也会明显地降低数据的写入次数、保障数据的高吞吐性能。可见,原生时序数据库在保障性能表现的基础上,通过其特性的各类技术,对于前文类型中数据库的结构痛点也能够进行优化。

3d4b8fb1ff0b7f82f17044ef6ef5bdff.png

04

总结

时序数据库的打造是一个系统工程,单个算法和机制不能决定一个时序数据库的性能和用户体验,需要将各个优化算法和处理机制统一融合到一个整体的系统中,来提高时序数据库的读写、压缩性能,其中也经常需要在不同技术之间进行权衡、互相补充。在时序数据库的众多架构路线中,原生时序数据库架构在迭代中受到的限制更小,能够更快地进行演进,这也是此类数据库最为流行的原因

尽管时序数据库已经实现一些突破,但相关核心技术仍在飞速发展中,可以预见未来将有更多更新颖的架构、方法被提出,不妨祝愿现有的各类时序数据库产品加速发展,期待未来有更多高性能、高稳定性的新型产品出现,从而更好地挖掘急剧增加、亟待管理的工业数据价值。

e0f1134f9de669cb8f068e381bbd97c4.gif

7f95858edf6533c234531d4521153347.jpeg

db3a89cfb9013964f866f6d8e39c9bd3.jpeg

665553f13c8f7768bbd51847951cde33.jpeg

ecc891da7e68e9d5f8a71d8c94954298.gif

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/354398.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RK3568技术笔记十二 Android编译方法

Android源码说明 Android源码在SAIL-RK3568开发板光盘->Android->源代码中,由于android源码太大,在进行压缩时,进行分包压缩,因此有4部分,如图所示: 进行解压时,需将4部分压缩包放置同一…

技术差异,应用场景;虚拟机可以当作云服务器吗

虚拟机和云服务器是现在市面上常见的两种计算资源提供方式,很多人把这两者看成可以相互转换或者替代的物品,实则不然,这两种资源提供方式有许多相似之处,但是也有不少区别,一篇文章教你识别两者的技术差异,…

快速搭建Jenkins自动化集成cicd工具

一、简介 jenkins是一款优秀的自动化持续集成运维工具,可以极大的简化运维部署的步骤。 传统的项目部署需要手动更换最新的项目代码,然后打包并运行到服务器上。 使用Jenkins可以自动化实现,当代码编写完成并提交到git后,Jenki…

【前端项目笔记】3 用户管理

用户管理相关功能实现 涉及表单、对话框、Ajax数据请求 基本页面 用户列表开发 在router.js中导入Users.vue 解决用户列表小问题 选中(激活)子菜单后刷新不显示高亮 给二级菜单绑定单击事件,点击链接时把对应的地址保存到sessionSto…

使用高德API计算两个地址的距离

要使用高德地图API来计算两个城市之间的距离,你需要首先在高德开放平台上注册并获取API密钥(AK)。以下是一个使用Java调用高德地图API来计算两个城市之间距离的示例代码。 步骤 1: 获取高德地图API密钥 访问高德开放平台(https:…

FreeRTOS源码分析

目录 1、FreeRTOS目录结构 2、核心文件 3、移植时涉及的文件 4、头文件相关 4.1 头文件目录 4.2 头文件 5、内存管理 6、入口函数 7、数据类型和编程规范 7.1 数据类型 7.2 变量名 7.3 函数名 7.4 宏的名 1、FreeRTOS目录结构 使用 STM32CubeMX 创建的 FreeRTOS 工…

【odoo | JSON-RPC】无会话(session_id)控制的api,外部api密钥的另一种表现!

概要 在Odoo中,JSON-RPC(JSON Remote Procedure Call)是一种基于JSON格式的远程过程调用协议,用于客户端和服务器之间的通信。此文章将介绍 JSON-RPC中无会话(session_id)控制的api,也是外部api密钥的另一种表现方式。…

百度文心智能体平台(想象即现实):轻松上手,开启智能新时代!创建属于自己的智能体应用。

目录 1.1、文心智能体平台 1.2、创建智能体 1.3、智能体报名入口 1.4、古诗词小助手 1.5、访问我的智能体 在这个全新的时代里,人工智能技术正以前所未有的速度发展,渗透到我们生活的方方面面。无论是智能家居、自动驾驶,还是医疗诊断、…

深入探讨:UART与USART在单片机中串口的实际应用与实现技巧

单片机(Microcontroller Unit, MCU)是一种集成了处理器、存储器和输入输出接口的微型计算机。它广泛应用于嵌入式系统中,用于控制各类电子设备。UART和USART是单片机中常见的通信接口,负责串行数据传输。下面我们详细介绍它们在单…

【LeetCode:394. 字符串解码 + 栈 | 递归】

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…

Sqlite3数据库基本使用

一、基本概念 数据:能够输入计算机并能被计算机程序识别和处理的信息集合 数据库:长期存储在计算机内、有组织的、可共享的大量数据的集合 DBMS:位于用户与操作系统之间的一层数据管理软件,用于操纵和管理数据库 二、安装 在线…

智能合约新项目 链上智能合约前端H5源码 智能合约区块链 以太坊前端调用智能合约

智能合约新项目 链上智能合约前端H5源码 智能合约区块链 以太坊前端调用智能合约 源码下载:https://download.csdn.net/download/m0_66047725/89402192 更多资源下载:关注我。

【OceanBase诊断调优】 —— DDL时报磁盘不足问题排查

1. 背景 由于在4.x的部分版本中,我们对于一些ddl操作还存在磁盘空间放大问题,本文主要介绍了这一类问题的排查。 2. 问题排查 2.1 整体排查链路 2.2 问题现象 DDL过程中报磁盘空间不足,需要确认是否符合预期,如果是符合预期&a…

1980python个性化电影推荐管理系统mysql数据库Django结构layUI布局elasticsearch存储计算机软件工程网页

一、源码特点 python Django个性化电影推荐管理系统是一套完善的web设计系统mysql数据库 利用elasticsearch存储浏览数据 ,对理解python编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。 开发环境pycharm…

基于STM32的智能水产养殖系统(四)

硬件原理 步进电动机 步进电动机(Step Motor 或 Stepper Motor)是一种将电脉冲信号转换成对应的角位移或线位移的电动机。与普通电动机不同,步进电动机每接收到一个脉冲信号,就会按设定的角度(步距角)转动…

定制汽车霍尔传感器

磁电效应霍尔传感器、饱和霍尔传感器、非线性霍尔传感器 霍尔传感器原理 霍尔传感器的工作原理基于霍尔效应,即当一块通有电流的金属或半导体薄片垂直地放在磁场中时,薄片的两端会产生电位差。这种现象称为霍尔效应,两端具有的电位差值称为…

STM32通过I2C软件读写MPU6050

文章目录​​​​​​​ 1. MPU6050 1.1 运动学概念 1.2 工作原理 2. 参数 2.1 量程选择 2.2 I2C从机地址配置 3. 硬件电路 4. 框架图 5. 软件和硬件波形对比 6. 软件I2C读写MPU6050 6.1 程序整体构架 6.2 一些需要注意的点: 6.3 MPU6050初始化配置 6…

【Python/Pytorch 】-- 滑动窗口算法

文章目录 文章目录 00 写在前面01 基于Python版本的滑动窗口代码02 算法效果 00 写在前面 写这个算法原因是:训练了一个时序网络,该网络模型的时序维度为32,而测试数据的时序维度为90。因此需要采用滑动窗口的方法,生成一系列32…

第58章SOCKET:TCP/IP网络基础

58.1 互联网 互联网会将不同的计算机网络连接起来并允许位于网络中的主机相互之间进行通信。互联网的目标是隐藏不同物理网络的细节以便向互联网中的所有主机呈现一个统一的网络架构,TCP/IP已经成了使用最为广泛的协议套件了, 术语Internet被用来指将全球…

【STM32-启动文件】

STM32-启动文件 ■ STM32-启动文件■ STM32-启动文件主要做了以下工作:■ STM32-启动文件指令■ STM32-启动文件代码详解■ 栈空间的开辟■■■ ■■■■■ ■ STM32-启动文件 STM32 启动文件由 ST 官方提供 启动文件由汇编编写,是系统上电复位后第一个…