1.7 数据存储和查询
1.7 数据存储和查询
数据库系统划分为不同的模块,每个模块完成整个系统的一个功能。数据库系统的功能部件大致可分为存储管理器
和查询处理部件
。
存储管理非常重要,因为数据库常常需要大量存储空间。企业的大型数据库的大小达到数百个gigabyte
,甚至达到terabyte
。一个gigabyte
大约等于1000个(实际上是1024个) megabyte
(十亿字节),一个terabyte
等于一百万个megabyte
(一万亿个字节)。
由于计算机主存不可能存储这么多信息,所以信息被存储在磁盘上。需要时数据在主存和磁盘间移动。由于相对于中央处理器的速度来说数据出入磁盘的速度很慢,因此数据库系统对数据的组织必须满足使磁盘和主存之间数据的移动最小化。
査询处理也非常重要,因为它帮助数据库系统简化和方便了数据的访问。查询处理器使得数据库用户能够获得很高的性能,同时可以在视图的层次上工作,不必承受了解系统实现的物理层次细节的负担。
将在逻辑层编写的更新和查询转变成物理层的高效操作序列,这是数据库系统的任务
1.7.1 存储管理器
存储管理器负责与文件管理器进行交互。原始数据通过操作系统提供的文件系统存储在磁盘上。存储管理器将各种DML
语句翻译为底层文件系统命令。因此,存储管理器负责数据库中数据的存储、检索和更新。
存储管理部件
存储管理部件包括:
- 权限及完整性管理器(
authonzation and integnty manager
),它检测是否满足完整性约束,并检查试图访问数据的用户的权限。 - 事务管理器(
transaction manager)
,它保证即使发生了故障,数据库也保持在一致的(正确的)状态,并保证并发事务的执行不发生冲突。 - 文件管理器(
file manager
),它管理磁盘存储空间的分配,管理用于表示磁盘上所存储信息的数据结构 - 缓冲区管理器(
buffer manager
),它负责将数据从磁盘上取到内存中来,并决定哪些数据应被缓冲存储在内存中。缓冲区管理器是数据库系统中的一个关键部分,因为它使数据库可以处理比内存更大的数据。
存储管理器实现的数据结构
存储管理器实现了几种数据结构,作为系统物理实现的一部分
- 数据文件(
data files
),存储数据库自身。 - 数据字典(
data dictionary
),存储关于数据库结构的元数据
,尤其是数据库模式
- 索引(
index
),提供对数据项的快速访问。和书中的索引一样,数据库索引提供了指向包含特定值的数据的指针。例如,我们可以运用索引找到具有特定的ID
的instructor
记录,或者具有特定的name
的所有instructor
记录。散列是另外一种索引方式
,在某些情况下速度更快,但不是在所有情况下都这样。
我们在第10章讨论存储介质、文件结构和缓冲区管理,第11章讨论通过索引和散列高效访问据的方法。
1.7.2 查询处理器
查询处理器组件包括:DDL
解释器(DDL interpreter
),它解释DDL
语句并将这些定义记录在数据字典中。DML
编译器(DML compiler
),将查询语言中的DML
语句翻译为一个执行方案,包括一系列查询执行引擎能理解的低级指令。
查询执行引擎(query evaluation engine
),执行由DML
编译器产生的低级指令。
一个査询通常可被翻译成多种等价的具有相同结果的执行方案的一种。DML
编译器还进行查询优化(query optimization
),也就是从几种选择中选出代价最小的一种。