数据库系统实现
存储管理
存储管理模块为底层数据与查询语句之间提供交互的接口。该模块与操作系统的文件系统进行交互。它将各种DML语句翻译成底层的文件系统的指令。它的职责在于数据库的存储、查询与更新。存储管理模块有以下几个部件组成:
- 权限与一致性管理器:该模块用于检查数据一致性约束以及用户的权限。
- 事务管理器:该模块用于保证数据库的一致状态。它确保数据库的数据在系统崩溃时依然能保持一致性,还要确保并发的事务同时执行时不会发生冲突。
- 文件管理器:该模块用于管理磁盘空间的分配以及存储在磁盘上的,用于表示信息的数据结构。
- 缓冲管理器:该模块用于将磁盘上的数据读入内存并决定那些数据要读入到内存中。它是数据库的关键模块,因为它能让数据库管理比内存容量还要多的数据。
存储管理器使用了以下几种数据结构来完成系统的物理实现:
- 数据文件:用于存储数据库本身
- 数据字典:用于存储元数据
- 索引:用于为数据项提供快速访问,类似于书中的目录。
查询处理
查询处理模块包括:
- DDL解释器:用于解释DDL语句以及记录数据字典中的定义
- DML编译器:用于将DML语句翻译为查询求值引擎可以理解的底层指令。一个查询语句通常会被翻译为多种可以得出同样结果的求值计划,DML编译器会选择效率最高的计划,这项操作被称为查询优化。
- 查询求值引擎:用于执行DML编译器生成的底层指令。
事务管理
事务特性:
- 原子性:若数据库中一个事务中的多个步骤只允许同时操作成功或不操作的特性称为事务的原子性。
- 一致性:数据库中的的不同数据在描述相同的实体要求这些数据需要正确描述这个实体,这种数据的正确性被称为一致性
- 持久性:在一次事务的进行中涉及的所有数据要求保持一致,即使事务出现了错误,涉及的所有数据也必须一致。这种要求称作持久性。
事务管理模块:
- 恢复管理器:该模块负责检测系统错误并将数据库恢复到错误发生之前的状态。
- 并发控制模块:该模块负责通过控制同时发生的事务,保证这些事务不会导致数据库的不一致性。
数据库架构
由于当今的数据库的用户一般不会在数据库所在的地方使用数据库,而是通过网络远程连接数据库,数据库会将客户端与服务端分离。
数据库架构一般可分为两部分或三部分:
- 双层架构:客户端部分在客户端机器上,用户通过查询语句来使用在服务端机器上的数据库系统。
- 三层架构:客户端机器仅仅是一个前端部分,并不提供直接的数据库调用。它仅仅有通过一些表单与处在服务端机器的应用服务器进行通讯的职责。而应用的事务逻辑才是负责与数据库系统的直接访问。此时,应用的事务逻辑则在应用服务器一处,而不是分散在多个客户端机器中。这种应用更适合在大型应用和互联网应用中。