学习一个经典的设计,有利于我们在未来有一个更加清晰的认识。这是我们迈出向一个全新视界和全新设计的第一步,我们将学习一个完整、自洽、优雅的数据库软件—— MySQL。
几个博主的文章比较好地介绍了这个入门https://www.cnblogs.com/novwind/p/17489997.html
https://www.cnblogs.com/better-farther-world2099/articles/14768929.html
MySQL 的架构
下图是 MySQL 5.7 的逻辑架构。在 MySQL 8.0 之后,移除了缓存模块。

连接池:与客户端交互的门户
任何一个软件,在设计理念上,都有自己核心负责的内容,是向内作内聚的——也就是高内聚、低耦合。大多数我们能接触到的知名软件都是可以用这个思路去学习和理解的。
而外部使用和操作这些软件,则需要这些软件提供专门的通信设计模块,在 MySQL 里面,也就是连接模块,具体来说,就是连接池。
连接池是为了避免线程频繁挂起和唤醒、频繁建立连接而产生的一种设计。我们可以发现:所有通信技术几乎都有这么一个发展阶段,从无到有的过程中,一开始是面向完成通讯的目的进行发展的,而后会慢慢优化考虑到效率的问题。
以 HTTP 协议发展历史为例
如 HTTP/1.1(一次持久 TCP 连接,单次请求单次响应,丢包可能造成队头阻塞), HTTP/2.0(为了提高稳定性和传输效率改为多路复用,数据结构上报文改为帧发送,引入流标识符维护顺序,但在传输层上有影响,帧丢失会导致 TCP 队头阻塞), HTTP/3 。
有几个核心参数:
- 最大连接数 max_connection
- 单次最大报文 max_allowed_packet
SQL 接口和 SQL 解析器
通过连接池建立连接后,SQL 语句可以通过连接进行发送传输。
SQL 解析器让我想到 MyBatis 的根据 Java 对象语句具备的 SQL 生成技术。这些语法解析器,一步步隐藏了更深的抽象,而将表述以技术人员更加熟悉的方式表达。

InnoDB 存储引擎
存储引擎负责执行 SQL 语句解析及优化后的执行方案,对数据进行存入和读取。

InnoDB 具有很高的可靠性与比较棒的性能。
- 事务控制
- 读写效率
- 多用户并发
- 索引搜索