一. 软件架构中数据库的定位
数据库一般位于整个软件架构的后端,而不直接服务于用户。数据的展示,应用逻辑的处理都是由其他层次的程序来实现的。
现在比较流行的一中软件架构的分类是:
- 双层架构(client-server架构):客户端直接与数据库服务器通信,比如通过“ODBC”,“JDBC”连接数据库
- 三层架构:客户端和服务器之间有一个中间服务器(web服务器,中间件),由中间服务器负责转发请求给数据库服务器
- 四层架构:在很多较大规模的Web应用中,在Web服务器和数据库服务器之间还可能存在一个应用服务器,这种结构称为“四层架构”
二. 三层架构
互联网最常见的软件架构为三层架构:如,网站应用、移动互联网应用
- 用户接口层:即各种终端,如:浏览器
- 业务逻辑和数据处理层:即应用程序服务器。比如,PHP、Java EE、ASP.NET、Ruby onRails等应用服务。网站处理网络访问请求的过程可能是这样的:由Nginx接受用户请求,处理静态页面,并且将动态请求转发给后端的PHP服务,PHP服务处理完动态请求后,将结果返还给Nginx,Nginx再返还给用户。有时也称该层为中间件(middle ware)。
- DBMS,即后端数据存储,如MySQL
软件系统架构
- 表现层(UI):即直接和用户交互的界面
- 业务逻辑层(BLL):即对业务逻辑进行处理,处理用户的请求,它将许多最终用户的业务逻辑集中到了应用服务器上。
- 数据访问层(DAL):直接操作数据库,即针对数据的增加、删除、修改、查找等操作。
三. MySQL基础架构
- 应用层:负责和客户端、用户进行交互,需要和不同的客户端和中间服务器进行交互,建立连接,记住连接的状态,响应它们的请求,返回数据和控制信息(错误信息、状态码等)
- 逻辑层:负责具体的查询处理、事务管理、存储管理、恢复管理,以及其他的附加功能。
- 物理层:实际物理磁盘(存储)上的数据库文件,比如,数据文件、日志文件等。
查询处理器负责查询的解析、 执行。当接收到客户端的查询时,数据库就会分配一个线程来处理它。先由查询处理器(优化器)生成执行计划,然后交由计 划执行器来执行,执行器有时需要访问更底层的事务管理器、存储管理器来操作数据,事务管理器、存储管理器主要负责事务 管理、并发控制、存储管理。这其中,将由事务管理器来确保“ACID”特性,通过锁管理器来控制并发,由日志管理器来确保数 据持久化,存储管理器一般还包括一个缓冲管理器,由它来确定磁盘和内存缓冲之间的数据传输。
四. MySQL版本
- 社区版
- 标准版
- 企业版
- 集群版
五. MySQL查询执行过程
客户端(Clients)发布查询的流程如下,首先连接MySQL(ConnectionHandling),然后发布查询,如果缓存QueryCache)中有结果集,则直接返回结果集。如果结果没有被缓存,那么,MySQL解析查询(Parser)将通过优化器(Optimizer)生成执行计划,然后运行执行计划通过API(Pluggable Storage Engine API)从存储引擎获取数据,并返回给客户端。什么是执行计划(查询计划)呢?执行计划就是一系列的操作步骤。SQL是声明性语言,它只告诉数据库要查询什么,但并不告诉数据库如何去查。数据库所要做的就是基于算法和统计信息计算出一条最佳的访问路径。这个工作是由优化器来完成的。优化器会比较不同的执行计划,然后选择其中最优的一套