iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >MySQL中怎么设计时间序列存储引擎
  • 363
分享到

MySQL中怎么设计时间序列存储引擎

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

Mysql中怎么设计时间序列存储引擎,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。首先,让我们看看OpenTSDB是什么样的情况。下图便是

Mysql中怎么设计时间序列存储引擎,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

首先,让我们看看OpenTSDB是什么样的情况。下图便是OpenTSDB的部署与运行图示。OpenTSDB的后端存储是HBase,需要在各个server上部署信息收集的前端,通过dashboard展示信息。对于现有的时间序列数据库,每一个都有自己的部署与运行方案。而这些方案并不具备架构上的通用性。

MySQL中怎么设计时间序列存储引擎

我们所期望的架构是除了底层的存储组件不同,对于mysql的用户来说没有什么不同。已有的大部分运维经验(HA、复制、备份等等)和已有的开发经验(插入、删除和更新的操作)都可以继承自之前的积累,这是任何一个使用Mysql的公司所希望的情况。就如下图所展示的架构,对于上层用户来说,感觉不到太多的变化。用户可以通过标准的SQL编写自己的应用客户端来完成数据的采集和展示,提高灵活性。

经过以上的考量,产生了我们的试验产品,存储引擎CFL(ctrip fast  log),该引擎能够以快速的日志方式进行数据的记录。其完成后就如下图所示,满足之前所设想的种种情况。

MySQL中怎么设计时间序列存储引擎

技术介绍

从层次结构来看,MySQL的存储引擎分为两个部分。一是实现存储功能相关的组件,该层提供存储引擎的具体功能(增删改查),我们称之为功能层;一是和MySQL插件接口对接的组件,该层将MySQL的功能调用转换为存储引擎的功能调用,我们称之为接口层。如下图所示,数据库的操作(诸如增删改查等操作)将通过引擎管理层达到存储引擎的接口层,再由接口层到达功能层。

MySQL中怎么设计时间序列存储引擎

功能层

功能层是存储引擎的核心,由于设计目标的不同,存储引擎的功能层所提供的功能也是不同的。比如innobase引擎的功能层,提供了事务ACID/数据存储/元信息管理/mvcC等一系列功能,提供完整的数据库功能;再如CSV存储引擎,仅提供字符类型的行存储。这些不同功能的存储引擎组件,在MySQL的框架下,提供多种多样的服务。

介绍携程时间序列存储引擎的功能层将从两个主要方面介绍。一是功能层的架构,也就是运行时涉及到的对象和这些对象的作用;一是进行持久化的存储,该部分将说明在文件层面,数据是如何存储的。

架构

CFL的架构设计目标是尽可能的提高数据的插入效率,因此并行处理的想法需要贯穿始终。其机制为,不同会话并行的将数据向表对象中插入;表对象通过缓冲区保存插入的数据,当缓冲区写满之后,缓冲区加入磁盘写入队列,通过专门的写盘线程并发的写入磁盘。

下图为携程时间序列存储引擎的架构:

MySQL中怎么设计时间序列存储引擎

存储

在设计存储的时候,根据时序数据库的特点,首先考虑的是插入的效率,然后是快速的故障恢复。针对插入效率,在设计数据结构时,采用严格的顺序写入策略,以此来保证连续插入的效率。这样不论在传统硬盘还是在SSD硬盘上,都可以高效的写入。针对快速故障恢复,通过控制写入顺序(依次写入数据、索引和控制信息),实现快速的恢复。***考虑实现上的简易性,采用索引和数据分别存储的方式,降低在同一文件中进行存储管理的控制。

MySQL中怎么设计时间序列存储引擎

接口层

程序片段

如下代码片段为接口层部分。

MySQL提供的基类handler,存储引擎需要提供继承自该类,并实现基类中如ha_open/ha_close等功能函数的类。

MySQL中怎么设计时间序列存储引擎

继承handler类的携程时间序列数据库的类。

MySQL中怎么设计时间序列存储引擎

接口层架构

该部分将以ha_cfl为例,说明MySQL存储引擎管理层和引擎接口之间的关系。

MySQL中怎么设计时间序列存储引擎

操作发送给会话后,会话从引擎管理层获取到ha_cfl的对象,将操作转化为对ha_cfl接口的调用,该步骤完成了SQL到存储引擎接口的对接。

ha_cfl接口接到调用后,将调用转化为对表对象的操作,完成handler接口功能到表对象的实现的对接。

效果

通过对时间序列数据进行针对性的开发,CFL存储引擎的插入性能相对于InnoDB和MyISAM引擎有很大的提高。

引擎\insert线程

1线程(ips)

3线程(ips)

6线程(ips)

CFL

3700

5700

8400

MyISAM

3300

4500

6000

InnoDB

1900

2100

3000

2核ssd虚拟机

MySQL中怎么设计时间序列存储引擎

ips:insert per second

总结

由于本次开发为探索性质的开发,时间上或者人力上的限制使产品还不够完善,不论是设计还是实现上都存在需要改进的地方。如,创建表时对时间戳类型使用和索引列的指定存在限制,导致无法创建多列索引,仅能够创建时间索引。存储结构的限制导致删除和更新无法快速灵活的进行。

但在资源有限的情况下,完成一个概念完整和实现完整的产品。而且正是通过这次探索性开发,打开了MySQL存储引擎的一扇大门,不论从整体架构到实现细节都有深入研究,积累了很多经验。携程技术保障中心DBA团队希望这些经验在将来能够为国内的MySQL社区提供帮助。

关于MySQL中怎么设计时间序列存储引擎问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注编程网数据库频道了解更多相关知识。

您可能感兴趣的文档:

--结束END--

本文标题: MySQL中怎么设计时间序列存储引擎

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

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

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

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

下载Word文档
猜你喜欢
  • MySQL中怎么设计时间序列存储引擎
    MySQL中怎么设计时间序列存储引擎,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。首先,让我们看看OpenTSDB是什么样的情况。下图便是...
    99+
    2024-04-02
  • MySQL中怎么设置存储引擎
    今天就跟大家聊聊有关MySQL中怎么设置存储引擎,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。MySQL设置存储引擎 1)查询存储引擎l ...
    99+
    2024-04-02
  • MySQL中InnoDB存储引擎是如何设计的
    小编给大家分享一下MySQL中InnoDB存储引擎是如何设计的,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!  MySQL 中的...
    99+
    2024-04-02
  • MySQL存储引擎怎么理解
    这篇文章主要讲解了“MySQL存储引擎怎么理解”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“MySQL存储引擎怎么理解”吧!今天发现了一个神奇的参数:-si...
    99+
    2024-04-02
  • Prometheus怎么存储时间序列数据
    Prometheus 是一款开源的监控系统,通常用于存储和查询时间序列数据。它使用一种称为“metric”的数据模型来表示时间序列数...
    99+
    2024-04-09
    Prometheus
  • MySQL中InnoDB存储引擎是什么
    这篇文章给大家分享的是有关MySQL中InnoDB存储引擎是什么的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。在MySQL中InnoDB属于存储引擎层,并以插件的形式集成在数据库...
    99+
    2024-04-02
  • mysql中怎么修改默认存储引擎
    mysql中怎么修改默认存储引擎,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。修改mysql的默认存储引擎 1、查看mysql存储引...
    99+
    2024-04-02
  • Mysql中存储引擎之间有哪些区别
    这篇文章主要介绍Mysql中存储引擎之间有哪些区别,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!MyISAM存储引擎MyISAM基于ISAM存储引擎,并对其进行扩展。它是在Web、数据仓储和其他应用环境下最常使用的存...
    99+
    2023-06-15
  • Mysql中MERGE存储引擎是什么
    这篇文章给大家分享的是有关Mysql中MERGE存储引擎是什么的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。MERGE 存储引擎把一组 MyISAM 数据表当做一个逻辑单元来对待...
    99+
    2024-04-02
  • 什么是存储引擎以及如何查看MySQL安装支持的存储引擎列表?
    它可以被定义为数据库管理系统(DBMS)用来处理不同的SQL操作(如创建、读取、更新和删除数据库中的数据)的软件组件。换句话说,它被DBMS用来管理数据库中的信息。最常用的存储引擎是InnoDB,它也是MySQL5.5及更高版本的默认存储引...
    99+
    2023-10-22
  • MySQL怎么批量修改存储引擎
    本篇内容主要讲解“MySQL怎么批量修改存储引擎”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MySQL怎么批量修改存储引擎”吧!再看MySQL手册,看到有关修...
    99+
    2024-04-02
  • Linux下怎么查看MySql存储引擎
    这篇文章主要介绍Linux下怎么查看MySql存储引擎,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!在Oracle 和SQL Server等数据库中只有一种存储引擎,所有数据存储管理机制都是一样的。而MySql数据库...
    99+
    2023-06-27
  • mysql中InnoDB存储引擎指的是什么
    这篇文章主要介绍了mysql中InnoDB存储引擎指的是什么,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。mysql中InnoDB存储引擎1、说明MySQL默认事务型存储引擎...
    99+
    2023-06-15
  • Cassandra中的时间序列数据怎么存储和查询
    在Cassandra中,时间序列数据可以使用具有时间戳的列来存储。一种常见的方法是使用时间戳作为行键的一部分,然后将时间序列数据存储...
    99+
    2024-03-11
    Cassandra
  • Innodb中怎么查询存储引擎查
    本篇文章给大家分享的是有关Innodb中怎么查询存储引擎查,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。源码分析查询于存储引擎的实现密切相关,...
    99+
    2024-04-02
  • 怎么用Python获取和存储时间序列数据
    今天小编给大家分享一下怎么用Python获取和存储时间序列数据的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。要求本教程在通过...
    99+
    2023-07-06
  • mysql中MyISAM存储引擎的特性是什么
    这篇文章将为大家详细讲解有关mysql中MyISAM存储引擎的特性是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1、加锁和并发将整个表加锁到特定行上。对已读的表在读时加共享锁,在写时加排它锁。支持并...
    99+
    2023-06-15
  • Mysql数据库中的存储引擎是什么
    这篇文章主要介绍了Mysql数据库中的存储引擎是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Mysql数据库中的存储引擎是什么文章都会有所收获,下面我们一起来看看吧。存储...
    99+
    2023-04-03
    mysql
  • innodb中怎么实现一个存储引擎锁
    本篇文章为大家展示了innodb中怎么实现一个存储引擎锁,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。| innodb存储引擎行锁的算法数据库对锁的使用是...
    99+
    2024-04-02
  • MySQL中怎么实现基于时间序列的数据计算
    在MySQL中实现基于时间序列的数据计算可以通过使用日期和时间函数以及聚合函数来实现。以下是一些常用的时间序列数据计算方法: 计算...
    99+
    2024-04-29
    MySQL
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作