《19》数据存储和查询
① 数据库系统划分为不同的模块,每个模块完成整个系统的一个功能;数据库系统的功能模块大致可分为存储管理器和查询处理部件;
② 企业的大型数据库的大小可以达到数百个gigabyte,甚至达到terabyte ;一个gigabyte大约等于1000个(实际上是1024个)megabyte(十亿字节),一个terabyte等于一百万个megabyte(一万亿字节);
③ 查询处理器帮助数据库系统简化和方便了数据的访问,查询处理器使得数据库用户能获得很高的性能,同时可以在视图的层次上工作,不必承受了了解系统实现的物理层次细节的负担;
将在逻辑层编写的更新和查询转变成物理层的高效操作序列,这是数据库的任务;
《20》存储管理器
① 存储管理器是数据库系统中负责在数据库中存储的底层数据与应用程序以及向系统提交的查询之间提供接口的部件;
② 存储管理器负责与文件管理器进行交互;原始数据通过操作系统提供的文件系统存储在磁盘上,存储管理器将各种DML语句含义为底层文件系统命令;
③ 因此,存储管理器负责数据库中数据的存储、检索和更新;
④存储管理部件包括:
• 权限及完整性管理器(authorization and integrity manager):检索是否满足完整性约束,并检查试图访问数据的用户的权限;
• 事物管理器(transaction manager):保证了即使发生故障,数据库也保持在一致(正确)的状态,并保证并发事务的执行不发生冲突;
• 文件管理器(file manager):管理磁盘存储空间的分配,管理用于表示磁盘上所存储的数据结构;
• 缓冲区管理器(buffer manager):负责将数据从磁盘中取到内存中来,并决定那些数据应被缓冲存储在内存中;缓冲区管理器是数据库中的一个关键部分,因为它使得数据库可以处理比内存更大的数据;
⑤ 存储管理器的几种数据结构,作为系统物理实现的一部分:
• 数据文件(data files):存储数据库本身;
• 数据字典(data dictionary):存储关于数据库结构的元数据,尤其是数据库模式;
• 索引(index ):提供对数据库的快速访问;和书中的索引一样,数据库索引提供了指向包含特定值的数据的指针;
如:可以运用索引找到具有特定的ID的instructor 记录,或具有特定的name的所有instructor记录;
散列是另外一种索引方式,在某些情况下速度更快,但不是在所有的情况下都这样;
《20》查询处理器
查询处理器组件包括:
• DDL解释器(DDL interpreter):解释DDL语句并将这些定义记录在数据字典中;
• DML编译器(DML compiler):将查询语言中的DML语句翻译为一个执行方案,包括一系列查询执行引擎能理解的低级指令;
一个查询通常可以翻译成多种等价的具有相同结果的执行方案的一种。DML编译器还可以进行查询优化(query optimization),也就是从几种选择中选出代价最小的一种;
• 查询优化引擎(query evaluation engine):执行由DML编译器产生的低级指令;
《21》事务管理
① 通常,对数据库的几个操作合起来形成一个逻辑单元;
②如:A、B两个账户间进行资金转账,其中A账户进行取出操作,另一个账户B进行存入操作;显然这两个操作必须保证要么都不发生,要么都发生,也就是说,资金转账必须完成或根本不发生;
• 这种要么完成要么不发生的要求称为原子性(atomicity);
• 除此之外,资金转账还必须保持数据库的一致性,也就是说,A和B之间的余额之和应该保持不变,这种要求称做为一致性(consistency);
• 最后,当资金转账成功结束后,即使数据发生故障,账户A和账户B的余额也应该保持转账成功结束后的新值,这种保持的要求称作持久性(durability);
③ 事物(transaction)是数据库应用中完成单一逻辑功能的集合操作,每个事务时一个既有原子性又有一致性的单元;
• 因此我们要求事物不违反任何的数据库一致性约束,也就是说,如果事物启动时数据库是一致的,那么当这个事物成功结束时也应该时一致的;
• 然而,在事物执行过程中,必要时允许暂时的不一致,因此无论是A取出的操作在前,还是B存入的操作在前,这两个操作都必然由一个先后次序;这种暂时的不一致虽然是必须的,但在故障发生时,很可能导致问题的产生;
④ 适当地定义各个事物时程序员的责任,事务的定义应使之能保持数据库的一致性;
• 如:资金从账户A转到账户B这个事物可以被定义为由两个单独的程序组成:一个对账户A执行取出操作,另一个对账户B执行存入操作,这两个程序依次执行可以保持一致性;但是,这两个程序自身都不是把数据库从一个一致的状态转入一个新的一致的状态,因此他们都不是事物;
⑤ 原子性和持久性的保证时数据库系统自身的职责,确切的说,时恢复管理器(recovery manager)的职责;
• 在没有故障发生的情况下,所有事物均完成成功,这时要保证原子性很容易,但是,由于各种各样的故障,事物并不总能成功执行完成;
• 为了保证原子性,失败的事物必须对数据库状态不产生任何影响,因此数据库必须恢复到该失败事物开始执行以前的状态,这种情况下数据库系统必须进行故障恢复(failure recovery),即检测系统故障并将数据库恢复到故障发生以前的状态;
⑥ 当多个事物同时对数据库进行更新时,即使每个事物都是正确的,数据的一致性也可能被破坏;
• 并发控制管理器(concurrency-control manager)控制并发事物间的相互影响,保证数据库一致性;
• 事物管理器(transaction manager)包括并发控制管理器和恢复管理器;