type
status
date
slug
summary
tags
category
icon
password
前言
这篇文章基于前述的【Day51【概念解析】 MySQL | 易浅小站 (kuangyichen.com)】,着重介绍下 MySQL的架构。
本文概述了MySQL服务端的架构、各种存储引擎之间的主要区别,以及这些区别的重要性
MySQL的逻辑架构
数据库产品的架构一般可以分为应用层、逻辑层、物理层,对于MySQL,同样可以理解为如下的3个层次。
- 应用层。负责和客户端、用户进行交互,需要和不同的客户端和中间服务器进行交互,建立连接,记住连接的状态,响应它们的请求,返回数据和控制信息(错误信息、状态码等)。
- 逻辑层。负责具体的查询处理、事务管理、存储管理、恢复管理,以及其他的附加功能。查询处理器负责查询的解析、执行。当接收到客户端的查询时,数据库就会分配一个线程来处理它。先由查询处理器(优化器)生成执行计划,然后交由计划执行器来执行,执行器有时需要访问更底层的事务管理器、存储管理器来操作数据,事务管理器、存储管理器主要负责事务管理、并发控制、存储管理。这其中,将由事务管理器来确保“ACID”特性,通过锁管理器来控制并发,由日志管理器来确保数据持久化,存储管理器一般还包括一个缓冲管理器,由它来确定磁盘和内存缓冲之间的数据传输。
- 物理层。实际物理磁盘(存储)上的数据库文件,比如,数据文件、日志文件等。
上图时官方文档的一个基础架构图。
- 其中Connectors可以理解为各种客户端、应用服务;
- Connection Pool可以理解为应用层,负责连接、验证等功能;
- Management Services & Utilities、SQL Interface、Parser、Optimizer、Caches & Buffers、Pluggable Storage Engines可以理解为数据库的大脑——逻辑层
- 最下方的Files&Logs可以理解为物理层。
MySQL版本
MySQL目前可分为4个版本:MySQL社区版、MySQL标准版、MySQL企业版、MySQL集群版。
MySQL社区版
可免费下载使用的开源版本,遵循GPL协议,包括如下的这些特性。
- 可插拔的存储引擎架构
- 多存储引擎支持InnoDB、MyISAM、NDB(MySQL Cluster即采用NDB存储引擎)、Memory、Merge、Archive、CSV等
- 复制
- 分区
- 存储过程、触发器、视图
- 信息数据库(Information-Schema)
- MySQL连接器
- MySQL工作台(MySQL Workbench)
目前已经发布了MySQL 5.0、MySQL 5.1、MySQL 5.5、MySQL 5.6、MySQL 5.7一共5个GA版本。一般来说,后面的版本比前面的版本功能更强、扩展性更好。
MySQL标准版
和社区版差别不大,提供社区版所支持的各种特性。
MySQL企业版
MySQL企业版提供7×24小时的技术支持服务,用户可直接联系MySQL专业支持工程师,获取关于MySQL应用程序开发、部署和管理的全方位支持。
MySQL企业版提供了更全面的高级功能、管理工具和技术支持,例如:MySQL企业级备份可为数据库提供在线“热”备份,从而降低数据丢失的风险。它支持完全、增量和部分备份,以及时间点恢复和备份压缩。
MySQL线程池提供了一个高效的线程处理模型,旨在降低客户端连接和语句执行线程的管理开销。
MySQL企业级安全性提供了一些立即可用的外部身份验证模块,可将MySQL轻松集成到现有的安全基础架构中。
其他特性还有MySQL企业级审计、MySQL企业级监视器(MySQL Enterprise Monitor)和MySQL查询分析器(MySQL Query Analyzer)等。
MySQL的一些新特性出现在了企业版中,但并没有出现在社区版,这导致很多人对于MySQL产生了疑虑,但MySQL的生态已经建立成熟,官方版本和其他分支也都在稳定地发展改进中,一般的中小公司选择社区版本即可。一些行业、领域要求更好的服务,更高的稳定性,或者有其他复杂的业务需求,对于它们企业版是一个很好的选择。
MySQL集群(MySQL Cluster)版
Oracle收购MySQL之后,对MySQL Cluster做了大量改进,这也是Oracle力推的产品。集群版是一种分布式、无共享(share-nothing)的架构,也就是说把数据分布在各个节点的内存里。据官方宣称,集群版可比单机数据库提供更高的可用性,高达99.999%。它还有一些好处,比如自动分片、动态添加节点、支持跨IDC复制、减少维护成本等。但这个产品比较复杂,国内也缺少精通MySQL Cluster的专家,如果一定要使用,建议做好充分的测试验证工作。
据说现在的MySQL Cluster版本已经允许存储部分数据到硬盘上,但由于主要数据需要存放在内存中,因此其部署成本会比较高。另外,随着MySQL Cluster节点的增多,节点之间通信、同步的代价也越来越大,所以其扩展性也是有限的。对于海量数据,MySQL Cluster可能不是很好的方案,从理论上来讲,仅仅把热点数据加载到内存是更经济的做法。
理解体会
本文主要介绍了MySQL的架构以及MySQL的版本。
快速跳转链接
【概念解析】启动
【概念解析】Day 1 - 10
【概念解析】Day 11 - 20
【概念解析】Day 21 - 30
【概念解析】Day 31 - 40
【概念解析】Day 41 - 50
【概念解析】Day 51 - 60
【概念解析】Day 61 - 70
【概念解析】Day 71 - 80
【概念解析】Day 81 - 90
- 作者:eachenkuang
- 链接:https://kuangyichen.com/article/industry-day52
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。