欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 八卦 > 开源数据库 - mysql - 体系结构与组件

开源数据库 - mysql - 体系结构与组件

2024/10/26 21:28:29 来源:https://blog.csdn.net/weixin_46325250/article/details/143232447  浏览:    关键词:开源数据库 - mysql - 体系结构与组件

宏观架构

Mysql的架构与其他数据库DBMS软件基本一致,都是将客户端,SQL分析、执行 与 实际数据存储部分分开。我看的数据基本都将mysql分为三部分:

  • client层(其实这个我觉得如果不站在用户角度,这个都不应该算是mysql的一层,因为其他软件也可以实现客户端的功能)
  • server or SQL层(这一层涉及SQL语句的分析执行优化以及查询缓存、连接管理等十分重要)
  • 存储引擎层 (底层数据存取操作实现部分,实际上与数据文件直接交互就是在这个地方)

mysql具有许多种存储引擎,如InnoDB、MyISAM、Memory等。虽然书上说这些引擎各有优略,但是现在最常用的引擎还是InnoDB,因为相比其他存储引擎而说,InnoDB支持行锁、事务等一系列功能,这才使得mysql能够作为一个支持现代软件应用的数据库,大部分资料讲解mysql存储引擎,也是讲解InnoDB

可以看到这个的架构涉及可以让mysql数据库的执行计划与实际执行分开,将与底层交互的操作部分抽象为存储引擎,将SQL解析、优化等一些不直接与底层交互部分抽象为server层,当然这也是数据库常用架构。

存储引擎特点

  1. InnoDB
    • MySQL 5.5版本之后的默认存储引擎。
    • 支持事务、行级锁和外键完整性约束。
    • 提供了高可靠性和高性能的数据存储解决方案。
  2. MyISAM
    • 强调快速读取操作。
    • 不支持事务和外键,使用表级锁控制并发的读写操作。
    • 适用于高负载的SELECT操作和对事务完整性没有要求的应用。
  3. Memory
    • 在内存中创建临时表来存储数据。
    • 拥有极高的插入、更新和查询效率。
    • 但数据在mysqld进程异常、重启或计算机关机时会消失。
  4. 其他存储引擎
    • 如Archive、Merge、CSV等,它们各自具有特定的应用场景和优缺点。

详细组件

  1. 连接器(Connection Manager)
    • 管理客户端连接,进行身份验证和权限检查。
  2. 查询缓存(Query Cache)
    • 用于缓存已经执行过的SELECT语句的结果集。
    • 可以提高相同查询的响应速度,但由于缓存更新和维护的开销较大,通常在现代MySQL版本中会被禁用或优化掉。
  3. 解析器(Parser)
    • 将SQL语句进行解析,生成语法树。
    • 对SQL语句进行语法检查,并将语句分解为可执行的命令。
  4. 优化器(Optimizer)
    • 对查询语句进行优化,选择最优的执行计划。
    • 根据统计信息和索引等信息,估算各种执行计划的代价,并选择最佳的执行路径。
  5. 执行器(Executor)
    • 负责执行查询语句的具体操作。
    • 根据优化器选择的执行计划,逐步执行各个子操作,获取和返回结果。
  6. 存储引擎(Storage Engine)
    • MySQL支持多种存储引擎,如InnoDB、MyISAM、Memory等。
    • 不同的存储引擎具有不同的特性和适用场景,可以根据需求选择合适的存储引擎。
  7. 日志(Log)
    • MySQL有几种不同的日志类型,包括二进制日志(Binary Log)、错误日志(Error Log)等。
    • 二进制日志主要用于记录所有的数据更改操作,以便进行数据恢复和复制。
    • 错误日志则记录了MySQL服务器的错误和警告信息。
  8. 缓冲池(Buffer Pool)
    • 用于缓存数据页,提高数据的读取和写入性能。
    • MySQL使用缓冲池来管理内存中的数据页,可以减少对磁盘的访问。
  9. 锁管理器(Lock Manager)
    • 用于管理并发访问数据库的锁机制。
    • MySQL使用锁管理器来保证并发事务的隔离性和一致性,防止数据冲突和并发问题。

参考资料

《高性能mysql 第三版》
极客时间专栏 《mysql实战45讲》
一文搞懂MySQL索引_mysql各个索引区别-CSDN博客
MySQL数据库:存储引擎-腾讯云开发者社区-腾讯云
请介绍一下MySQL的架构 - 腾讯云开发者社区-腾讯云
mysql架构设计-CSDN博客

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com