第五篇:数据库系统的实现

前言

        前面的文章中,主要都是在围绕关系数据库理论进行研究,没有涉及到数据库系统的具体实现。

        虽说数据库系统的具体实现因业务环境,RDBMS等因素而异,但总体开发流程,以及开发过程中所涉及到的一些问题,也具有不少统一的套路、标准。

        本文主要讨论数据库系统实现过程中的重点环节、基本开发流程、数据库管理以及数据质量工程等话题。

参照完整性约束对更新删除操作的影响

        在第三篇(传送门)中,我们已经讨论过,关系设计的目的就是为了减少冗余消除更新异常。但当时也留下一个问题:外码本身是冗余的,那么涉及到外码的更新时怎么办呢?

        关系数据库理论将这个问题交给了RDBMS,让它来解决涉及外码的更新异常。下面先来看一下,涉及外码的更新异常到底长什么样子。

        在下面的这个关系中:

        关系EMPLOYEE中的Dept属性是一个外码,它对应DEPARTMENT关系的主码。如果对该属性进行更新或者删除,那么这个外码就找不到它对应的主码,两个关系的联系就被破坏了。针对这个问题,RDBMS的解决方案有四个,下面以删除异常为例进行说明:

        1. 限制删除

        限制删除是指如果某记录主码被另一个记录外码对应,则该记录不允许被删除。如上面示例DEPARTMENT关系中的记录在删除的时候有可能被RDBMS禁止。

        2. 级联删除

        级联删除是指如果某个记录的主码被另一个记录的外码对应,那么这两个记录将一起被删除。

        3. 设置为空

        是指如果某个记录的主码被另一个记录的外码对应,那么在删除这个记录后,另外那个记录的外码字段置为空。

        4. 设置默认值

        同3,不过是将置为空改为设置成一个默认值。

        更新情况和删除一样,要注意的是所有处理都发生在对外码映射中的非外码关系进行操作时发生。这些处理主要是对外码关系进行附加操作,如级联删除,置空,置默认值,或者报错。

索引机制

        索引(index)机制的本质是一种检索加速机制,本文将从索引的逻辑意义上对它进行解析,至于其在各RDBMS里的物理实现细节则不做介绍。事实上若非数据库维护管理人员,也没必要知道。在下面这张客户关系表中:

        id是按顺序排列的,因此如果要检索某id对应记录,则由于记录已按id排好序,可使用多种查找算法提高检索效率,如二分查找等。但关系中某一列排好序以后,其他列必然是乱序的,那怎么办?在RDBMS中,这种情况可以通过新建一个只包含两列的附加表来实现:

        索引表中其中一列为索引字段,另一列则包含一个指针指向原纪录。这样在对索引列进行查询的时候,RDBMS会先对索引表进行操作,完了再映射到原表并返回结果。

        从本质上来说,这是一种牺牲空间换取时间的办法,索引建立不单耗费存储资源,而且会降低更新、删除等操作的效率。因此不是说建的索引越多就越好,具体建立何种索引,建立多少索引,则要取决于计算资源,RDBMS,业务场景等因素。

触发器机制

        触发器是一种规则,当关系中删除、插入、修改一条记录的时候执行。它的应用场景很多,故几乎所有RDBMS都提供了该功能。如下代码是在MYSQL中编写的触发器,它施加于student关系的insert操作上:每次insert一条学生记录后,都会更新关系中的记录数,如果记录数超过10,则不为新的学生分配导师:

CREATE TRIGER studentinserttrigger
    BEFORE INSERT ON student
FOR EACH ROW
BEGIN
    DECLARE totaladvised INT DEFAULT 0;
    SELECT COUNT(*) INTO totaladvised
    FROM student
    WHERE advisorid = NEW.advisorid;
    IF (totaladvised >= 10) THEN
        SET NEW.advisorid = NULL;
    END IF
END;

  注意这段代码不是标准SQL代码,不必细究。触发器实现代码的语法规则取决于RDBMS,需要时再有针对性的参考手册即可。

数据库系统开发流程

        所谓数据库系统(database system),就是指让用户和数据库信息之间进行有效交互的计算机系统。其典型的框架如下图所示:

 

        可见,  数据库系统的三大主要成分分别是:数据库,数据库管理软件RDBMS,还有前端应用程序(网站,APP等)。数据库是数据库系统的核心,负责存放所有数据。而数据库对外的所有交互,均通过RDBMS来进行。一般用户通过前端应用程序使用RDBMS,而比较专业的用户也可直接使用RDBMS操纵数据库。

        举例来说,某人通过APP订购商品,那么这个APP就是前端应用程序。而当他有一个具体行为,比如付款的时候,前段应用程序就会和RDBMS通信,让RDBMS完成扣款并返回操作执行结果。

        数据库系统的总体开发流程,可以总体划分为以下步骤:

        1. 数据库需求

        需求搜集是所有环节中最重要的一步,吃透了用户需求,往往就成功了大半。这些需求将指导后面如需求建模、实现、以及前端应用程序开发等。通常来说,需求都会通过ER图来表示(参考本系列第一篇),并和各业务方讨论搜集得到,最终整理成文档。

        要特别强调的一点是数据库系统开发需求阶段过程是循环迭代式的,一开始的需求集并不大,但随着项目的进展,需求会越来越多。而且不论是以上哪个阶段发生了需求变动,整个流程都需要重新走一遍,决不允许隐式变更需求。

        2. 数据库建模

        也就是逻辑模型建模,在本系列第二篇有过详细讲解,这里不再赘述。

        3. 数据库实现

       这一步的本质就是在空的RDBMS里实现2中创建的关系模型,一般通过使用SQL或者RDBMS提供的前端工具实现。

        4. 开发前端应用程序

        前端应用开发在需求搜集好了之后就开始进行,主要有网站、APP等前端形式。另外前端程序的实际实现涉及到和数据库之间交互,因此这一步的最终完成在数据库建模之后。

        5. 数据库部署

        顾名思义,这一步就是部署数据库系统的软硬件环境。笔者这里插一个故事,以前在A公司工作时,一哥们自告奋勇到某政府秘密部门部署私有云环境。那地方很偏僻,不允许外网,U盘都不能用,只能光盘安装。而A公司的云平台部署是一件非常复杂的活,于是那哥们就在那里呆了一个多月,回来后据说是瘦了7斤......

        回到正题,数据库部署往往还包含将初始数据填入数据库中的意思。对于云数据仓库,这一步就叫"数据上云"。

        6. 数据库使用

        这一步没啥多讲的,就再讲一个有关的故事吧。同样是在A公司,有一次某政企私有云项目完成后,我们有人被派去给他们培训如何使用。结果去的人回来后说政企意见很大,认为让他们学习SQL以外的东西都不行。拒绝用Python写UDF,更拒绝MR编程接口,只要SQL和图形界面操作方式。一开始我对政企的这种行为有点看不起,但后来我想,就是因为有这群挑剔的用户,才使得A公司云产品的易用性如此强大,从而占领国内云计算的大部分市场。用户的需求才是技术的唯一试金石。

        7. 数据库管理和维护

        严格来讲,这部分不算开发流程,属于数据库系统开发完成后的工作。接下来本文将围绕这个话题进行讲解。

数据库系统管理

        数据库系统发行后,控制权便从数据库设计、实现、部署的团队移交给了数据库管理员(database administrator, DBA),并由他们来对系统进行管理。

        数据库管理涵盖了确保一个已经部署的数据库系统正确运行的各种行为。为了实现这一目标,数据库管理具体包含以下范畴:

 

        这部分工作的涉及面相当广而深,应由专业的DBA团队去完成。本文主要针对人群是数据科学家,因此仅对这些工作做一个简明的介绍。

        1. 数据库系统监测与维护

        监测工作可以让DBA掌握数据库系统的运行情况,并针对发现的问题进行维护。比如发现存储资源不够用了,则要分配给数据库系统更多存储空间等。

        同时,监测工作也可以让DBA知道关系数据库中各关系的具体使用情况,从而进行优化。比如某两个表被大群用户频繁使用,并只用来重复创建相同的报表。这时候DBA就可以考虑建议数据库开发团队反规范化设计的将这两个表合并到一起。

        维护工作是指DBA在监测到了问题后,采取的修复行为。比如上面提到的分配更多存储空间,向数据系统加入新的关系(注: 数据库开发设计人员决定是否加入关系,DBA负责建议加入和具体执行),都属于维护范畴。

        2. 数据库安全保障

        数据库安全保障工作可以说是数据库系统管理工作中的首要任务,该任务需要DBA对数据的存取过程严加控制。

        具体点来说,就是要求DBA做好数据库访问人员的认证工作,并对所有用户进行权限划分。

        此外,对于特别敏感的数据,还应进行加密处理。这部分功能一些商业数据库做得很好,比如Oracle。

        3. 数据库备份与恢复

        这里简要说明一下数据库备份与恢复的原理。我们知道,数据库的数据,是存放到磁盘里的。而计算机对数据的处理过程,都是先把数据从硬盘转移到内存,处理完后再放回去。

        而如果数据在内存中进行处理,还没有将数据转移回磁盘的时候,数据库挂了的话就将导致数据丢失。因此RDBMS采用恢复日志(recovery log)机制,先记录更新操作要做的事情,比如那个数据被更新,更新前后的值,更新请求的用户等,然后再做具体的更新操作。在更新日志中可以设置"检查点",之后DBA可使用它进行周期性副本备份。失效事件发生之后,DBA可以利用"检查点"进行系统恢复:回滚(Roll Back)至指定检查点状态。

        对于那种彻底性毁坏的情况,比如发生火灾、地震等,可在多个不同物理站点上保留完全镜像备份(complete mirrored backup)。这些副本需持续更新保证与数据库系统一致。

        4. 数据库性能优化

        性能优化工作包括设置索引,逆规范化,SQL优化等等。通常有QPS(query per second)等指标来衡量数据库系统的优化效果。

        这部分工作内容很多也比较杂,主要通过DBA管理RDBMS的查询优化器完成。但对于数据库的开发员和使用者来说,也多多少少要知道一点,比如写Hive语句的时候需要灵活设置分区,避免数据倾斜等。这些具体环境的优化方案,本文篇幅有限就不一一讲解了。

        5. 数据库标准制定

        这部分工作包括数据库中字段命名规范,SQL编码规范的制定等。除了这些开发标准,还有使用标准,比如使用数据库的人需要遵守哪些有益于数据库系统健康的行为规范。

数据质量体系

        数据库系统,以及接下一个系列要讲的数据仓库系统,都需要始终重视数据质量问题。用一句话概括,数据质量就是衡量数据能否真实、及时反映客观世界的指标

        具体来说,数据质量包含以下几大指标:

        1. 准确性

        准确性要求数据能够正确描述客观世界。比如某用户姓名拼音mu chen错误的录入成了muc hen,就应该弹出警告语;

        2. 唯一性

        唯一性要求数据不能被重复录入,或者不能有两个几乎相同的关系。比如张三李四在不同业务环境下分别建立了近乎相同的关系,这时应将这两个关系合并;

        3. 完整性

        完整性要求进行数据搜集时,需求数据的被描述程度要高。比如一个用户的购买记录中,必然要有支付金额这个属性;

        4. 一致性

        一致性要求不同关系、或者同一关系不同字段的数据意义不发生冲突。比如某关系中昨天存货量字段+当天进货量字段-当天销售量字段不等于当天存活量,否则就可能是数据质量有问题;

        5. 及时性

        及时性要求数据库系统中的数据"保鲜"。比如当天的购买记录当天就要入库;

        6. 统一性

        统一性要求数据格式统一。比如nike这个品牌,不能有的字段描述为"耐克",而有的字段又是"奈克";

        数据质量和数据具体意义有很大相关性,因此无法单凭数据库理论来保证。且由于具体业务及真实世界的复杂性,数据质量问题必然会存在,不可能完全预防得了。因此很多RDBMS或第三方公司都提供了数据质量工程服务/软件,用来识别和校正数据库系统中的各种数据质量问题。

小结

        本篇作为数据库系列的终篇,主要围绕数据库系统实现所涉及到的方方面面进行讲解。想必读者看完本文后会和我一样,感受到一个完整而优秀的数据库系统实现并不简单,甚至可以说是比较繁琐。虽说实际项目中每个人只需要专门负责其中一个或者几个模块,不过笔者认为作为一名优秀的数据库开发人员,也必须对全局有一定的认识,这也是本文意义所在。

        最后谈点题外话吧。笔者本人是一名数据挖掘工程师,看到很多朋友把精力完全投到研究数据挖掘算法和实现上,私以为这样做是很不科学的。因为一个优秀的数据挖掘引擎,必然架构在一个优秀的数据库/数据仓库系统之上。而一个数据挖掘工程师80%的工作都是在利用这些系统进行数据清洗、特征提取等,深入思考算法模型的时间并不多(除非您是在特别牛的平台性算法团队工作)。因此在深入学习数据挖掘算法之前,一定要有良好的数据基础知识,不能好高骛远。

        下个系列的主题是数据仓库,它和本系列,以及另几个系列,如"数据可视化_R语言","数据分析_Excel"一样都是数据基础知识的重要组成部分。期待各位读者的持续关注、交流、指正。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
作者: Hector Garcia-Molina, Jeffrey D. Ullman, Jennifer Widom 本书是斯坦福大学计算机科学专业数据库系列课程第二门课的教科书。书中对数据库系统实现原理进行了深入阐述,并具体讨论了数据库管理系统的三个主要成分—存储管理器、查询处理器和事务管理器的实现技术。书中还对信息集成的最新技术,例如数据仓库、OLAP、数据挖掘、Mediator、数据立方体系统等进行了介绍。本书适合于作为高等院校计算机专业研究生的教材或本科生的教学参考书,也适合作为从事相关研究或开发工作的专业技术人员的高级参考资料 译者序 前言 第1章 DBMS实现概述 1.1 Megatr on 2000数据库系统介绍 1.1.1 Megatr on 2000实现细节 1.1.2 Megatron 2000如何执行查询 1.1.3 Megatron 2000有什么问题 1.2 数据库管理系统概述 1.2.1 数据定义语言命令 1.2.2 查询处理概述 1.2.3 主存缓冲区和缓冲区管理器 1.2.4 事务处理 1.2.5 查询处理器 1.3 本书梗概 1.3.1 预备知识 1.3.2 存储管理概述 1.3.3 查询处理概述 1.3.4 事务处理概述 1.3.5 信息集成概述 1.4 数据库模型和语言回顾 1.4.1 关系模型回顾 1.4.2 SQL回顾 1.4.3 关系的和面向对象的数据 1.5 小结 1.6 参考文献 第2章 数据存储 2.1 存储器层次 2.1.1 高速缓冲存储器 2.1.2 主存储器 2.1.3 虚拟存储器 2.1.4 第二级存储器 2.1.5 第三级存储器 2.1.6 易失和非易失存储器 习题 2.2 磁盘 2.2.1 磁盘结构 2.2.2 磁盘控制器 2.2.3 磁盘存储特性 2.2.4 磁盘访问特性 2.2.5 块的写入 2.2.6 块的修改 习题 2.3 辅助存储器的有效使用 2.3.1 计算的I/O模型 2.3.2 辅助存储器中的数据排序 2.3.3 归并排序 2.3.4 两阶段多路归并排序 2.3.5 扩展多路归并以排序更大的关系 习题 2.4 改善辅助存储器的访问时间 2.4.1 按柱面组织数据 2.4.2 使用多个磁盘 2.4.3 磁盘镜像 2.4.4 磁盘调度和电梯算法 2.4.5 预取和大规模缓冲 2.4.6 各种策略及其优缺点 习题 2.5 磁盘故障 2.5.1间断性故障 2.5.2 校验和 2.5.3 稳定存储 2.5.4 稳定存储的错误处理能力 习题 2.6 从磁盘崩溃中恢复 2.6.1 磁盘的故障模型 2.6.2 作为冗余技术的镜像 2.6.3 奇偶块 2.6.4 一种改进:RAID 2.6.5 多个盘崩溃时的处理 习题 2.7 小结 2.8 参考文献 第3章 数据元素的表示 3.1 数据元素和字段 3.1.1 关系型数据库元素的表示 3.1.2 对象的表示 3.1.3 数据元素的表示 3.2 记录 3.2.1 定长记录的构造 3.2.2 记录首部 3.2.3 定长记录在块中的放置 习题 3.3 块和记录地址的表示 3.3.1 客户机-服务器系统 3.3.2 逻辑地址和结构地址 3.3.3 指针混写 3.3.4 块返回磁盘 3.3.5 被固定的记录和块 习题 3.4 变长数据和记录 3.4.1 具有变长字段的记录 3.4.2 具有重复字段的记录 3.4.3 变格式的记录 3.4.4 不能装入一个块中的记录 3.4.5 BLOBS 习题 3.5 记录的修改 3.5.1 插入 3.5.2 删除 3.5.3 修改 习题 3.6 小结 3.7 参考文献 第4章 索引结构 4.1 顺序文件上的索引 4.1.1 顺序文件 4.1.2 稠密索引 4.1.3 稀疏索引 4.1.4 多级索引 4.1.5 重复键的索引 4.1.6 数据修改期间的索引维护 习题 4.2 辅助索引 4.2.1 辅助索引的设计 4.2.2 辅助索引的应用 4.2.3 辅助索引中的间接 4.2.4 文档检索和倒排索引 习题 4.3 B树 4.3.1 B树的结构 4.3.2 B树的应用 4.3.3 B树中的查找 4.3.4 范围查询 4.3.5 B树的插入 4.3.6 B树的删除 4.3.7 B树的效率 习题 4.4 散列表 4.4.1 辅存散列表 4.4.2 散列表的插入 4.4.3 散列表的删除 4.4.4 散列表索引的效率 4.4.5 可扩展散列表 4.4.6 可扩展散列表的插入 4.4.7 线性散列表 4.4.8 线性散列表的插入 习题 4.5 小结 4.6 参考文献 第5章 多维索引 5.1 需要多维的应用 5.1.1 地理信息系统 5.1.2 数据立方体 5.1.3 SQL多维查询 5.1.4 使用传统索引执行范围查询 5.1.5 利用传统索引执行最邻近查询 5.1.6 传统索引的其他限制 5.1.7 多维索引结构综述 习题 5.2 多维数据的类散列结构 5.2.1 网格文件 5.2.2 网格文件的查找 5.2.3 网格文件的插入 5.2.4 网格文件的性能 5.2.5 分段散列函数 5.2.6 网格文件和分段散列的比较 习题 5.3 多维数据的类树结构 5.3.1 多键索引 5.3.2 多键索引的性能 5.3.3 kd树 5.3.4 kd树的操作 5.3.5 使kd树适合辅存 5.3.6 四叉树 5.3.7 R树 5.3.8 R树的操作 习题 5.4 位图索引 5.4.1 位图索引的诱因 5.4.2 压缩位图 5.4.3 游程长度编码位向量的操作 5.4.4 位图索引的管理 习题 5.5 小结 5.6 参考文献 第6章 查询执行 6.1 一种查询代数 6.1.1 并、交和差 6.1.2 选择操作符 6.1.3 投影操作符 6.1.4 关系的积 6.1.5 连接 6.1.6 消除重复 6.1.7 分组和聚集 6.1.8 排序操作符 6.1.9 表达式树 习题 6.2 物理查询计划操作符介绍 6.2.1 扫描表 6.2.2 扫描表时的排序 6.2.3 物理操作符计算模型 6.2.4 衡量代价的参数 6.2.5 扫描操作符的I/O 代价 6.2.6 实现物理操作符的迭代器 6.3 数据库操作的一趟算法 6.3.1 一次多元组操作的一趟算法 6.3.2 全关系的一元操作的一趟算法 6.3.3 二元操作的一趟算法 习题 6.4 嵌套循环连接 6.4.1 基于元组的嵌套循环连接 6.4.2 基于元组的嵌套循环连接的迭代器 6.4.3 基于块的嵌套循环连接算法 6.4.4 嵌套循环连接的分析 6.4.5 迄今为止的算法的小结 习题 6.5 基于排序的两趟算法 6.5.1 利用排序去除重复 6.5.2 利用排序进行分组和聚集 6.5.3 基于排序的并算法 6.5.4 基于排序的交和差算法 6.5.5 基于排序的一个简单的连接算法 6.5.6 简单排序连接的分析 6.5.7 一种更有效的基于排序的连接 6.5.8 基于排序的算法小结 习题 6.6 基于散列的两趟算法 6.6.1 通过散列划分关系 6.6.2 基于散列的消除重复算法 6.6.3 基于散列的分组和聚集算法 6.6.4 基于散列的并、交、差算法 6.6.5 散列连接算法 6.6.6 节省一些磁盘I/O 6.6.7 基于散列的算法小结 习题 6.7 基于索引的算法 6.7.1 聚簇和非聚簇索引 6.7.2 基于索引的选择 6.7.3 使用索引的连接 6.7.4 使用有排序索引的连接 习题 6.8 缓冲区管理 6.8.1 缓冲区管理结构 6.8.2 缓冲区管理策略 6.8.3 物理操作符选择和缓冲区管理的关系 习题 6.9 使用超过两趟的算法 6.9.1 基于排序的多趟算法 6.9.2 基于排序的多趟算法的性能 6.9.3 基于散列的多趟算法 6.9.4 基于散列的多趟算法的性能 习题 6.10 关系操作的并行算法 6.10.1 并行模型 6.10.2 一次一个元组的并行操作 6.10.3 全关系操作的并行算法 6.10.4 并行算法的性能 习题 6.10 小结 6.11 参考文献 第7章 查询编译器 7.1 语法分析 7.1.1 语法分析与语法分析树 7.1.2 SQL的一个简单子集的语法 7.1.3 预处理器 习题 7.2 用于改进查询计划的代数定律 7.2.1 交换律与结合律 7.2.2 涉及选择的定律 7.2.3 下推选择 7.2.4 涉及投影的定律 7.2.5 有关连接与积的定律 7.2.6 有关重复消除的定律 7.2.7 涉及分组与聚集的定律 习题 7.3 从语法分析树到逻辑查询计划 7.3.1 转换成关系代数 7.3.2 从条件中去除子查询 7.3.3 逻辑查询计划的改进 7.3.4 结合/分配运算符的分组 习题 7.4 操作代价的估计 7.4.1 中间关系大小的估计 7.4.2 投影大小的估计 7.4.3 选择大小的估计 7.4.4 连接大小的估计 7.4.5 多连接属性的自然连接 7.4.6 多个关系的连接 7.4.7 其他操作的大小估计 习题 7.5 基于代价的计划选择介绍 7.5.1 大小参数估计值的获取 7.5.2 统计量的增量计算 7.5.3 减少逻辑查询计划代价的启发式 7.5.4 枚举物理计划的方法 习题 7.6 连接顺序的选择 7.6.1 连接的左右变元的意义 7.6.2 连接树 7.6.3 左深连接树 7.6.4 通过动态编程来选择连接顺序和分组 7.6.5 带有更具体的代价函数的动态编程 7.6.6 选择连接顺序的贪婪算法 习题 7.7 物理查询计划选择的完成 7.7.1 选取选择方法 7.7.2 选取连接方法 7.7.3 流水线操作与物化 7.7.4 一元流水线操作 7.7.5 二元流水线操作 7.7.6 物理查询计划的符号 7.7.7 物理操作的顺序 习题 7.8 小结 7.9 参考文献 第8章 系统故障对策 8.1 可回复操作的问题和模型 8.1.1 故障模式 8.1.2 关于事务的进一步讨论 8.1.3 事务的正确执行 8.1.4 事务的原语操作 习题 8.2 undo日志 8.2.1 日志记录 8.2.2 undo日志规则 8.2.3 使用undo日志的恢复 8.2.4 检查点 8.2.5 非静止检查点 习题 8.3 redo日志 8.3.1 redo日志规则 8.3.2 使用redo日志的恢复 8.3.3 redo日志的检查点 8.3.4 使用带检查点的redo日志的恢复 习题 8.4 undo/redo日志 8.4.1 undo/redo规则 8.4.2 使用undo/redo日志的恢复 8.4.3 undo/redo日志的检查点 习题 8.5 防备介质故障 8.5.1 备份 8.5.2 非静止转储 8.5.3 使用备份和日志的恢复 习题 8.6 小结 8.7 参考文献 第9章 并发控制 9.1 串行调度和可串行化调度 9.1.1 调度 9.1.2 串行调度 9.1.3 可串行化调度 9.1.4 事务语义的影响 9.1.5 事务和调度的一种记法 习题 9.2 冲突可串行性 9.2.1 冲突 9.2.2 优先图及冲突可串行性判断 9.2.3 优先图测试发挥作用的原因 习题 9.3 使用锁的可串行性实现 9.3.1 锁 9.3.2 封锁调度器 9.3.3 两阶段封锁 9.3.4 两阶段封锁发挥作用的原因 习题 9.4 用多种锁方式的封锁系统 9.4.1 共享锁与排他锁 9.4.2 相容性矩阵 9.4.3 锁的升级 9.4.4 更新锁 9.4.5 增量锁 习题 9.5 封锁调度器的一种体系结构 9.5.1 插入锁动作的调度器 9.5.2 锁表 习题 9.6 数据库元素层次的管理 9.6.1 多粒度的锁 9.6.2 警示锁 9.6.3 幻象与插入的正确处理 习题 9.7 树协议 9.7.1 基于树的封锁的动机 9.7.2 访问树结构数据的规则 9.7.3 树协议发挥作用的原因 习题 9.8 使用时间戳的并发控制 9.8.1 时间戳 9.8.2 物理上不可实现的行为 9.8.3 脏数据的问题 9.8.4 基于时间戳调度的规则 9.8.5 多版本时间戳 9.8.6 时间戳与封锁 习题 9.9 使用有效性确认的并发控制 9.9.1 基于有效性确认的调度器的结构 9.9.2 有效性确认规则 9.9.3 三种并发控制机制的比较 习题 9.10 小结 9.11 参考文献 第10章 再论事务管理 10.1 读未提交数据的事务 10.1.1 脏数据问题 10.1.2 级联回滚 10.1.3 回滚的管理 10.1.4 成组提交 10.1.5 逻辑日志 习题 10.2 视图可串行性 10.2.1 视图等价性 10.2.2 多重图与视图可串行性的判断 10.2.3 视图可串行性的判断 习题 10.3 死锁处理 10.3.1 超时死锁检测 10.3.2 等待图 10.3.3 通过元素排序预防死锁 10.3.4 时间戳死锁检测 10.3.5 死锁管理方法的比较 习题 10.4 分布式数据库 10.4.1 数据的分布 10.4.2 分布式事务 10.4.3 数据复制 10.4.4 分布式查询优化 习题 10.5 分布式提交 10.5.1 分布式原子性的支持 10.5.2 两阶段提交 10.5.3 分布式事务的恢复 习题 10.6 分布式封锁 10.6.1 集中封锁系统 10.6.2 分布式封锁算法的代价模型 10.6.3 封锁多副本的元素 10.6.4 主副本封锁 10.6.5 局部锁构成的全局锁 习题 10.7 长事务 10.7.1 长事务的问题 10.7.2 saga(系列记载) 10.7.3 补偿事务 10.7.4 补偿事务发挥作用的原因 习题 10.8 小结 10.9 参考文献 第11章 信息集成 11.1 信息集成的方式 11.1.1 信息集成的问题 11.1.2 联邦数据库系统 11.1.3 数据仓库 11.1.4 Mediator 习题 11.2 基于Mediator系统的包装器 11.2.1 查询模式的模板 11.2.2 包装器生成器 11.2.3 过滤器 11.2.4 其他在包装器上进行的操作 习题 11.3 联机分析处理 11.3.1 OLAP应用 11.3.2 OLAP数据的多维视图 11.3.3 星型模式 11.3.4 切片和切块 习题 11.4 数据立方体 11.4.1 立方体操作符 11.4.2 通过物化视图实现立方体 11.4.3 视图的格 习题 11.5 数据挖掘 11.5.1 数据挖掘的应用 11.5.2 关联规则的挖掘 11.5.3 A-Priori算法 11.6 小结 11.7 参考文献

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值