关系型数据库的工作原理(二)

数据库概览

·数据库不是简单的一堆文件叠加整理在一起,而是有多个组件相互合作而成。忽略具体某种数据库,一般数据库由以下组件构成:

Fig. 8

    核心组件:

        进程管理器:很多数据库需要许多进程/线程同时都运行,所以搞了一个进程/线程池来管理这些进程/线程。 比如,有些数据库为了得到纳秒( nanoseconds) 信息,不直接使用操作系统的线程,而是通过自己创建的线程来实现。

        网络管理器:网络 I/O 是一个大问题,尤其是分布式数据库。 所以,许多数据库有自己的网络管理器。

        文件系统管理器: 磁盘 I/O 是数据库的最常见的瓶颈所在。 数据库有自己的文件系统管理器,可以更好的解决数据库与操作系统的文件系统之间数据交换, 甚至替换操作习惯的文件系统。

        内存管理器: 为了避免磁盘 I/O 的效率低下的问题,大量的内存的使用肯定很有价值。但是,如果操作大量内存时,必须一个独立的高效的内存管理器。特别是, 同一时间有很多查询都在存取内存时,显得尤为必要。

 安全管理器: 用户身份的鉴定和权限管理。

   客户端管理器: 管理多个客户端连接。

    工具:

        备份管理器: 备份和恢复一个数据库

        恢复管理器: 数据库发生崩溃后重启,需要把数据库的所有数据做到一致状态

   监控管理器: 使用 log 记录数据库的所有行为,并且提供工具和信息用以监控数据库

   Administration manager:恢复数据库的原数据( 比如某个表的表名和结构),提供工具和信息用以管理数据库、 Schemas(模式) 和表空间

  数据管理器:

      事务管理器:处理事务

      Cache 管理器: 在数据被使用前先加载到内存,保存将要写入数据库的数据

      数据存取管理器: 存取磁盘上的数据

   查询管理器:

       查询解析: 检查一个查询是否有效

 查询重写: 预优化一个查询

 查询优化: 优化一个查询

 查询执行: 编译以及执行一个查询

    

    现在回到最初的问题,即:数据库是如何处理一个 SQL 查询的,从客户端管理器->查询管理器->事务管理器三个部分来解释改问题。

 

客户端管理器:

    数据库的客户端管理器,负责处理来自客户的连接。客户,可以是一个服务器,或 Web 服务器, 或者一个终端用户和终端软件。 客户端管理器实现了各种不同的访问数据库的接口,比如众所周知的: JDBC, ODBC, OLE-DB,以及其他专用数据库接口。

Fig. 9

    当客户端连接数据库:

  1. 检查用户登陆验证信息(账号和密码),以及检查用户是否有访问数据库权限;
  2. 检查是否有空余线程/进程处理该连接;
  3. 检查数据库负载如何(是否过重);
  4. 如果连接需要等待,当超过等待时间,将返回可读的错误提示;
  5. 如果连接可用,查询将传递给查询管理器
  6. 由于查询处理是一个"all or noting"过程,故当查询到数据后,查询结果将部分存入缓存并开始发送给客户端。
  7. 客户端连接意外断开时,会收到可读接受,并释放连接的资源。

     

posted @ 2017-03-16 13:20  Splace  阅读(969)  评论(0编辑  收藏  举报