mysql数据库的构成
mysql数据库的构成
总览分析
核心组件
- 进程管理器(process manager)
- 很多数据库具备一个需要妥善管理的进程/线程池。再者,为了实现纳秒级操作,一些现代数据库使用自己的线程而不是操作系统线程
- 网络管理器(network manager)
- 网路I/O是个大问题,尤其是对于分布式数据库。所以一些数据库具备自己的网络管理器
- 文件系统管理器(File system manager)
- 磁盘I/O是数据库的首要瓶颈。具备一个文件系统管理器来完美地处理OS文件系统甚至取代OS文件系统,是非常重要的
- 内存管理器(memory manager)
- 为了避免磁盘I/O带来的性能损失,需要大量的内存。但是如果你要处理大容量内存你需要高效的内存管理器,尤其是你有很多查询同时使用内存的时候
- 安全管理器(Security Manager)
- 客户端管理器(Client manager)
工具
- 备份管理器(Backup manager)
- 恢复管理器(Recovery manager)
- 监控管理器(Monitor manager)
- 管理员管理器(Administration manager)
- 用于保存元数据(比如表的名称和结构),提供管理数据库、模式、表空间的工具
查询管理器
- 查询解析器(Query parser)
- 用于检查查询是否合法,每一条SQL语句都要送到解析器来检查语法
- 查询重写器(Query rewriter)
- 用于预优化查询。重写器按照一系列已知的规则对查询执行检测,例如视图合并、子查询扁平化、去除不必要的运算符、排除冗余的联接、常数计算赋值、分区裁剪(Partition Pruning)、物化视图重写(Materialized view rewrite)、自定义规则、OLAP转换
- 查询优化器(Query optimizer)
- 所有的现代数据库都在用基于成本的优化(即CBO)来优化查询。道理是针对每个运算设置一个成本,通过应用成本最低廉的一系列运算,来找到最佳的降低查询成本的方法
- 由于创建查询计划是耗时的,大多数据库把计划保存在查询计划缓存,来避免重复计算。如果一个表的统计变化超过了上限,关于该表的查询计划就从缓存中清除
- 查询执行器(Query executor)
数据管理器
- 事务管理器(Transaction manager)
- 缓存管理器(Cache manager)
- 数据被使用之前置于内存,或者数据写入磁盘之前置于内存
- 数据库的主要瓶颈是磁盘 I/O。为了提高性能,现代数据库使用缓存管理器
- 数据访问管理器(Data access manager)
客户端管理器
- 客户端管理器是处理客户端通信的。客户端可以是一个(网站)服务器或者一个最终用户或最终应用。客户端管理器通过一系列知名的API(JDBC, ODBC, OLE-DB …)提供不同的方式来访问数据库。客户端管理器也提供专有的数据库访问API
mysql体系结构
网络连接层
- 负责MySQL和其他应用程序的连接交互,包括连接管理、授权认证、安全等。由客户端程序连接和MySQL服务器上的连接池组成
服务层(核心层)
- 管理服务和工具组件
- 系统管理和控制工具,例如备份恢复、MySQL复制、集群等
- SQL接口组件
- 查询分析器组件
- 优化器组件
- SQL语句在查询之前会使用查询优化器对查询进行优化,选取最优的路径进行条件联接并生成最终查询结果
- 缓冲(Cache)组件
存储引擎层
- 存储引擎负责MySQL中数据的存储与提取。 服务器中的查询执行引擎通过API与存储引擎进行通信,通过接口屏蔽了不同存储引擎之间的差异。由于关系数据库中数据是以表的形式存储的,存储引擎又被称为表类型
- MySQL采用插件式的表存储引擎,是其区别于其他数据库最重要的特点。在Oracle 和SQL Server等数据库中,所有的数据存储管理机制都是一样的。而MySQL提供了多种存储引擎,用户可以根据需求为每张表选择特定的存储引擎(存储引擎是针对于表的而不是针对库)
物理文件层
- 该层主要将数据库的数据(表,索引等)存储在文件系统上,并完成与存储引擎的交互。存储数据包括日志文件,数据文件,配置文件等