本书是斯坦福大学计算机科学专业数据库系列课程第二门课的教科书。书中对数据库系统实现原理进行了深入阐述,并具体讨论了数据库管理系统的三个主要成分——存储管理器、查询处理器和事务管理器的实现技术。此外,第2版充分反映了数据管理技术的新进展,对内容进行了扩充,除了在第1版中原有的“信息集成”一章中加入了新的内容外,还增加了两个全新的章:“数据挖掘”和“数据库系统与互联网”。
本书适合作为高等院校计算机专业研究生的教材或本科生的教学参考书,也适合作为从事相关研究或开发工作的专业技术人员的高级参考资料。
数据库系统实现 第2版
Database System Implementation
Second Edition
(美) Hector Garcia-Molina Jeffrey D. Ullman Jennifer Widom (斯坦福大学)著 杨冬青 吴愈青 包小源 唐世渭 等译
本书是关于数据库系统实现方面内容最为全面的著作之一,是美国斯坦福大学计算机科学专业数据库系列课程第二门课程的指定教材。书中从数据库实现者的角度对数据库系统实现原理进行了深入阐述,并具体讨论了数据库管理系统的三个主要成分——存储管理器、查询处理器和事务管理器的实现技术。斯坦福大学计算机科学专业数据库系列课程第一门课程的内容包括数据库设计和数据库编程,本书的后两位作者Jeffrey D. Ullman和Jennifer Widom为该课程编写的教材《数据库系统基础教程》(A First Course in Database Systems)第3版的中文翻译版和英文影印版已由机械工业出版社出版。
本书内容深入且全面,技术实用且先进,叙述深入浅出,是一本难得的高层次的教材,适合作为高等院校计算机专业研究生的教材或本科生的教学参考书,也适合作为从事相关研究或开发工作的专业技术人员的高级参考资料。
作者简介
Hector Garcia-Molina
斯坦福大学计算机科学与电子工程系的Leonard Bosack和Sandra Lerner教授。他在数据库系统、分布式系统和数字图书馆领域中发表了大量论文,研究兴趣包括分布式计算系统、数据库系统和数字图书馆。他是ACM会士、美国艺术与科学院会士和美国国家工程院成员。他在1999年获得了ACM SIGMOD创新奖。
Jeffrey D. Ullman
斯坦福大学计算机科学与电子工程系Stanford W. Ascherman教授,数据库技术专家。他独立或与人合作出版了15本著作,发表了170多篇技术论文,研究兴趣包括数据库理论、数据库集成、数据挖掘和利用信息基础设施进行教育。他是美国国家工程院成员,曾获得Knuth奖、SIGMOD贡献奖、Karlstrom杰出教育家奖和Edgar F. Codd发明奖。
Jennifer Widom
美国康奈尔大学计算机科学博士,现为斯坦福大学计算机科学与电子工程系教授,研究兴趣包括半结构化数据的数据库系统和XML、数据仓库以及主动数据库系统。她是ACM会士、Guggenheim会士和美国国家工程院成员,并且是多个编辑委员会、程序委员会和顾问委员会的成员。她在2007年获得了ACM SIGMOD Edgar F. Codd发明奖。
在斯坦福大学,因为实行的是一年四学期制,所以数据库引论课被分为两门课程。第一门课程是CS145,该课程只要求学生学会使用数据库系统,而不要求知道DBMS实现的内容。CS145是CS245的预修课,CS245介绍DBMS实现。学生若想进一步学习数据库方面的课程,可以学习CS345(此课是理论课)、CS346(此课是DBMS实现实验课)以及CS347课程(此课介绍事务处理及分布式数据库)。
从1997年开始,我们已经出版了两本配套教材:《数据库系统基础教程》是为CS145课程编写的,《数据库系统实现》是为CS245课程以及部分CS346课程编写的。本书就是《数据库系统实现》的最新版——第2版。
第2版保持了第1版的总体风格,但对于数据存储和索引结构的阐述进行了适当的压缩,分别将原来的两章合并为一章;另外,增加了一章“并行与分布式数据库”(第9章),其中包括了第1版中分散在查询处理和事务管理的相关章节中的内容,并增加了有关分布式查询执行的一些新内容。同时,第2版充分反映了数据管理技术的新进展,对内容进行了扩充,除了在第1版中原有的“信息集成”一章(第10章)中加入了新的内容外,还增加了两个全新的章:“数据挖掘”(第11章)和“数据库系统与互联网”(第12章)。
预备知识
学生一般不会在大学的第一学年选修数据库系统实现课程,所以本书读者应具有广泛的计算机科学背景知识。我们假定读者已经学过数据库语言,特别是SQL。读者最好了解关系代数,并且熟悉基本的数据结构。同样,关于文件系统和操作系统的知识也是很有用的。
习题
本书几乎在每一节都包括大量的练习,我们用感叹号对难题做了标记,对最难的习题用双感叹号做了标记。
网上支持
本书的网址是:
http://infolabstanfordedu/~ullman/fcdbhtml
该网站包括勘误表及支持材料。
本书中文版(ISBN 9787111268284)和影印版(ISBN 9787111247333)已由机械工业出版社出版。——编辑注
计算机\数据库
本书是关于数据库系统实现方面内容最为全面的著作之一,是美国斯坦福大学计算机科学专业数据库系列课程第二门课程的指定教材。书中从数据库实现者的角度对数据库系统实现原理进行了深入阐述,并具体讨论了数据库管理系统的三个主要成分——存储管理器、查询处理器和事务管理器的实现技术。斯坦福大学计算机科学专业数据库系列课程第一门课程的内容包括数据库设计和数据库编程,本书的后两位作者Jeffrey D. Ullman和Jennifer Widom为该课程编写的教材《数据库系统基础教程》(A First Course in Database Systems)第3版的中文翻译版和英文影印版已由机械工业出版社出版。
本书内容深入且全面,技术实用且先进,叙述深入浅出,是一本难得的高层次的教材,适合于作为高等院校计算机专业研究生的教材或本科生的教学参考书,也适合作为从事相关研究或开发工作的专业技术人员的高级参考资料。
(美) Hector Garcia-Molina (斯坦福大学) Jeffrey D. Ullman (斯坦福大学) Jennifer Widom(斯坦福大学)著:Hector Garcia-Molina 斯坦福大学计算机科学与电子工程系的Leonard Bosack和Sandra Lerner教授。他在数据库系统、分布式系统和数字图书馆领域中发表了大量论文,研究兴趣包括分布式计算系统、数据库系统和数字图书馆。他是ACM会士、美国艺术与科学院会士和美国国家工程院成员。他在1999年获得了ACM SIGMOD创新奖。 Jeffrey D. Ullman 斯坦福大学计算机科学与电子工程系教授Stanford W. Ascherman教授,数据库技术专家。他独立或与人合作出版了15本著作,发表了170多篇技术论文。研究兴趣包括数据库理论、数据库集成、数据挖掘和利用信息基础设施进行教育。他是美国国家工程院成员,曾获得Knuth奖、SIGMOD贡献奖、Karlstrom杰出教育家奖和Edgar F. Codd发明奖。 Jennifer Widom 美国康奈尔大学计算机科学博士,现为斯坦福大学计算机科学与电子工程系教授,研究兴趣包括半结构化数据的数据库系统和XML、数据仓库以及主动数据库系统。她是ACM会士、Guggenheim会士和美国国家工程院成员,并且是多个编辑委员会、程序委员会和顾问委员会的成员。她在2007年获得了ACM SIGMOD Edgar F. Codd发明奖。
杨冬青 吴愈青 包小源 唐世渭 等译:暂无简介
随着计算机硬件、软件技术的飞速发展和计算机系统在各行各业的广泛应用,数据已经成为各种机构的宝贵资源,数据库系统对于当今科研部门、政府机关、企事业单位等来说都是至关重要的。而数据库系统中的核心软件是数据库管理系统(DBMS)。DBMS用于高效地创建和存储大量的数据,并对数据进行有效的管理、处理和维护,是数据库专家和技术人员数十年研究开发的结果,是当前最复杂的系统软件之一。要深入掌握数据库系统的原理和技术,进而从事数据库管理软件和工具的开发,必须学习和研究数据库管理系统实现技术。要深入了解数据库系统的内部结构,以开发出高效的数据库应用系统,也需要学习和研究数据库管理系统实现技术。
Hector GarciaMolina、Jeffrey DUllman和Jennifer Widom是斯坦福大学著名的计算机科学家,多年来他们在数据库系统领域中做了大量的开创性工作,由他们撰写的《数据库系统实现》一书是关于数据库系统实现方面内容最为全面的著述之一。我们于2000年将《数据库系统实现》的第1版译成中文,国内许多大学采用它作为研究生数据库课程的教材或主要教学参考书,收到了良好的效果。
现在我们又翻译了《数据库系统实现》第2版。第2版保持了第1版的总体风格,首先对数据库系统实现原理进行了深入阐述,并具体讨论了数据库管理系统的三个主要成分——存储管理器、查询处理器和事务管理器的实现技术。与第1版相比,第2版对于数据存储和索引结构的阐述进行了适当的压缩,分别将原来的两章合并为一章;另外,增加了一章“并行与分布式数据库”(第9章),其中包括了第1版中分散在查询处理和事务管理的相关章节中的内容,并增加了有关分布式查询执行的一些新内容,例如,mapreduce并行架构、P2P数据库以及分布式散列的实现等。同时,第2版充分反映了数据管理技术的新进展,对内容进行了扩充,除了在第1版中原有的“信息集成”一章(第10章)中加入了新的内容外,还增加了两个全新的章:“数据挖掘”(第11章)和“数据库系统与互联网”(第12章)。“数据挖掘”一章中包含了关联规则与频繁项集挖掘技术,从一个非常大的数据库或Web页面集合中发现“相似”的项的“最小散列”和“局部敏感散列”等关键技术,以及高维空间中大规模数据的聚簇问题等。“数据库系统与互联网”一章中重点阐述了与互联网相关的两个方面的数据库技术:Web搜索引擎及其PageRank算法,流数据模型以及管理数据流形式的大量数据所需的技术。
我们认为这本书既适合作为高等院校计算机专业研究生的教材或本科生的教学参考书,又适合作为从事相关研究或开发工作的专业技术人员的高级参考资料。
杨冬青全面组织了本书的翻译,吴愈青、包小源、唐世渭在本书的翻译和审校中做了大量的工作。除此之外,参加翻译的还有闫秋玲、郑丽丽、蔡慧慧、马煜、张棋、陈巍、郭思祺、夏海峰、翁学天、郭少松、李树节。
限于译者水平,译文中难免有疏漏和错误,欢迎批评指正。
译者
于北京大学
出版者的话
译者序
译者简介
出版前言
第1章DBMS系统概述
11数据库系统的发展
111早期的数据库管理系统
112关系数据库系统
113越来越小的系统
114越来越大的系统
115信息集成
12数据库管理系统概述
121数据定义语言命令
122查询处理概述
123主存和缓冲区管理器
124事务处理
125查询处理器
13本书概述
14数据库模型和语言回顾
141关系模型回顾
142SQL回顾
15参考文献
第一部分数据库系统实现
第2章辅助存储管理
21存储器层次
211存储器层次
212在存储器层次间传送数据
213易失和非易失存储器
214虚拟存储器
215习题
22磁盘
221磁盘结构
222磁盘控制器
223磁盘存取特性
224习题
23加速对辅助存储器的访问
231计算的I/O模型
232按柱面组织数据
233使用多个磁盘
234磁盘镜像
235磁盘调度和电梯算法
236预取和大规模缓冲
237习题
24磁盘故障
241间断性故障
242校验和
243稳定存储
244稳定存储的错误处理能力
245从磁盘崩溃中恢复
246作为冗余技术的镜像
247奇偶块
248一种改进:RAID 5
249多个盘崩溃时的处理
2410习题
25组织磁盘上的数据
251定长记录
252定长记录在块中的放置
253习题
26块和记录地址的表示
261客户机-服务器系统中的地址
262逻辑地址和结构地址
263指针混写
264块返回磁盘
265被钉住的记录和块
266习题
27变长数据和记录
271具有变长字段的记录
272具有重复字段的记录
273可变格式的记录
274不能装入一个块中的记录
275BLOB
276列存储
277习题
28记录的修改
281插入
282删除
283修改
284习题
29小结
210参考文献
第3章索引结构
31索引结构基础
311顺序文件
312稠密索引
313稀疏索引
314多级索引
315辅助索引
316辅助索引的运用
317辅助索引中的间接
318文档检索和倒排索引
319习题
32B-树
321B-树的结构
322B-树的应用
323B-树的查找
324范围查询
325B-树的插入
326B-树的删除
327B-树的效率
328习题
33散列表
331辅存散列表
332散列表的插入
333散列表的删除
334散列表索引的效率
335可扩展散列表
336可扩展散列表的插入
337线性散列表
338线性散列表的插入
339习题
34多维索引
341多维索引的应用
342利用传统索引执行范围查询
343利用传统索引执行最近邻查询
344多维索引结构综述
35多维数据的散列结构
351网格文件
352网格文件的查找
353网格文件的插入
354网格文件的性能
355分段散列函数
356网格文件和分段散列的比较
357习题
36多维数据的树结构
361多键索引
362多键索引的性能
363kd-树
364kd-树的操作
365使kd-树适合辅助存储器
366四叉树
367R-树
368R-树的操作
369习题
37位图索引
371位图索引的动机
372压缩位图
373分段长度编码位向量的操作
374位图索引的管理
375习题
38小结
39参考文献
第4章查询执行
41物理查询计划操作符介绍
411扫描表
412扫描表时的排序
413物理操作符计算模型
414衡量代价的参数
415扫描操作符的I/O代价
416实现物理操作符的迭代器
42一趟算法
421一次单个元组操作的一趟算法
422整个关系的一元操作的一趟算法
423二元操作的一趟算法
424习题
43嵌套循环连接
431基于元组的嵌套循环连接
432基于元组的嵌套循环连接的迭代器
433基于块的嵌套循环连接算法
434嵌套循环连接的分析
435迄今为止的算法的总结
436习题
44基于排序的两趟算法
441两阶段多路归并排序
442利用排序去除重复
443利用排序进行分组和聚集
444基于排序的并算法
445基于排序的交和差算法
446基于排序的一个简单的连接算法
447简单的排序连接的分析
448一种更有效的基于排序的连接
449基于排序的算法的总结
4410习题
45基于散列的两趟算法
451通过散列划分关系
452基于散列的消除重复算法
453基于散列的分组和聚集算法
454基于散列的并、交、差算法
455散列连接算法
456节省一些磁盘I/O
457基于散列的算法的总结
458习题
46基于索引的算法
461聚簇和非聚簇索引
462基于索引的选择
463使用索引的连接
464使用有序索引的连接
465习题
47缓冲区管理
471缓冲区管理结构
472缓冲区管理策略
473物理操作符选择和缓冲区管理的关系
474习题
48使用超过两趟的算法
481基于排序的多趟算法
482基于排序的多趟算法的性能
483基于散列的多趟算法
484基于散列的多趟算法的性能
485习题
49小结
410参考文献
第5章查询编译器
51语法分析和预处理
511语法分析与语法分析树
512SQL的一个简单子集的语法
513预处理器
514预处理涉及视图的查询
515习题
52用于改进查询计划的代数定律
521交换律与结合律
522涉及选择的定律
523下推选择
524涉及投影的定律
525有关连接与积的定律
526有关消除重复的定律
527涉及分组与聚集的定律
528习题
53从语法分析树到逻辑查询计划
531转换成关系代数
532从条件中去除子查询
533逻辑查询计划的改进
534可结合/可分配的运算符的分组
535习题
54运算代价的估计
541中间关系大小的估计
542投影运算大小的估计
543选择运算大小的估计
544连接运算大小的估计
545多连接属性的自然连接
546多个关系的连接
547其他运算大小的估计
548习题
55基于代价的计划选择介绍
551大小参数估计值的获取
552统计量的计算
553减少逻辑查询计划代价的启发式估计
554枚举物理计划的方法
555习题
56连接顺序的选择
561连接的左右参数的意义
562连接树
563左深连接树
564通过动态规划来选择连接顺序和分组
565带有更具体的代价函数的动态规划
566选择连接顺序的贪婪算法
567习题
57物理查询计划选择的完成
571选取一个选择方法
572选取连接方法
573流水操作与物化
574一元流水运算
575二元运算的流水操作
576物理查询计划的符号
577物理运算的排序
578习题
58小结
59参考文献
第6章系统故障对策
61可恢复操作的问题和模型
611故障模式
612关于事务的进一步讨论
613事务的正确执行
614事务的原语操作
615习题
62undo日志
621日志记录
622undo日志规则
623使用undo日志的恢复
624检查点
625非静止检查点
626习题
63redo日志
631redo日志规则
632使用redo日志的恢复
633redo日志的检查点
634使用带检查点redo日志的恢复
635习题
64undo/redo日志
641undo/redo规则
642使用undo/redo日志的恢复
643undo/redo日志的检查点
644习题
65针对介质故障的防护
651备份
652非静止转储
653使用备份和日志的恢复
654习题
66小结
67参考文献
第7章并发控制
71串行调度和可串行化调度
711调度
712串行调度
713可串行化调度
714事务语义的影响
715事务和调度的一种记法
716习题
72冲突可串行化
721冲突
722优先图及冲突可串行化判断
723优先图测试发挥作用的原因
724习题
73使用锁的可串行化实现
731锁
732封锁调度器
733两阶段封锁
734两阶段封锁发挥作用的原因
735习题
74有多种锁模式的封锁系统
741共享锁与排他锁
742相容性矩阵
743锁的升级
744更新锁
745增量锁
746习题
75封锁调度器的一种体系结构
751插入锁动作的调度器
752锁表
753习题
76数据库元素的层次
761多粒度的锁
762警示锁
763幻象与插入的正确处理
764习题
77树协议
771基于树的封锁的动机
772访问树结构数据的规则
773树协议发挥作用的原因
774习题
78使用时间戳的并发控制
781时间戳
782事实上不可实现的行为
783脏数据的问题
784基于时间戳调度的规则
785多版本时间戳
786时间戳与封锁
787习题
79使用有效性确认的并发控制
791基于有效性确认调度器的结构
792有效性确认规则
793三种并发控制机制的比较
794习题
710小结
711参考文献
第8章再论事务管理
81可串行性和可恢复性
811脏数据问题
812级联回滚
813可恢复的调度
814避免级联回滚的调度
815基于锁对回滚的管理
816成组提交
817逻辑日志
818从逻辑日志中恢复
819习题
82死锁
821超时死锁检测
822等待图
823通过元素排序预防死锁
824通过时间戳检测死锁
825死锁管理方法的比较
826习题
83长事务
831长事务的问题
832saga(系列记载)
833补偿事务
834补偿事务发挥作用的原因
835习题
84小结
85参考文献
第9章并行与分布式数据库
91关系的并行算法
911并行模型
912一次一个元组的操作的并行
913整个关系的操作的并行算法
914并行算法的性能
915习题
92mapreduce并行架构
921存储模式
922映射函数
923归约函数
924习题
93分布式数据库
931数据的分布
932分布式事务
933数据复制
934习题
94分布式查询处理
941分布式连接操作问题
942半连接化简
943多个关系的连接
944非循环超图
945非循环超图的完全化简
946为什么完全化简算法有效
947习题
95分布式提交
951支持分布式原子性
952两阶段提交
953分布式事务的恢复
954习题
96分布式封锁
961集中封锁系统
962分布式封锁算法的代价模型
963封锁多副本的元素
964主副本封锁
965局部锁构成的全局锁
966习题
97对等分布式查找
971对等网络
972分布式散列问题
973分布式散列的集中式解决方案
974带弦的圆
975带弦的圆上的链接
976使用手指表查找
977加入新结点
978当一个端离开网络
979当一个端崩溃了
9710习题
98小结
99参考文献
第二部分现代数据库系统专题
第10章信息集成
101信息集成介绍
1011为什么要进行信息集成
1012异质性问题
102信息集成的方式
1021联邦数据库系统
1022数据仓库
1023mediator
1024习题
103基于mediator的系统中的包装器
1031查询模式的模板
1032包装器生成器
1033过滤器
1034包装器上的其他操作
1035习题
104基于能力的优化
1041有限的数据源能力问题
1042描述数据源能力的记号
1043基于能力的查询计划选择
1044加入基于成本的优化
1045习题
105优化mediator查询
1051简化的修饰符记号
1052获得子目标的回答
1053Chain算法
1054在mediator上结合并视图
1055习题
106以局部作为视图的mediator
1061LAV mediator的动机
1062LAV mediator的术语
1063扩展解决方案
1064合取查询的包含
1065为什么包含映射测试有效
1066发现mediator查询的解决方法
1067为什么LMSS定理能成立
1068习题
107实体解析
1071决定是否记录代表一个共同实体
1072合并相似记录
1073相似性和合并函数的有用性质
1074ICAR记录的RSwoosh算法
1075为什么RSwoosh算法会有效
1076实体解析的其他方法
1077习题
108小结
109参考文献
第11章数据挖掘
111频繁项集挖掘
1111市场-购物篮模型
1112基本定义
1113关联规则
1114频繁项集的计算模型
1115习题
112发现频繁项集的算法
1121频繁项集的分布
1122寻找频繁项集的朴素算法
1123APriori算法
1124APriori算法的实现
1125更好地使用主存
1126何时使用PCY算法
1127多级算法
1128习题
113发现近似的商品
1131相似度的Jaccard度量
1132Jaccard相似度的应用
1133最小散列
1134最小散列与Jaccard相似度
1135为什么能用最小散列估计相似度
1136最小散列的实现
1137习题
114局部敏感散列
1141LSH实例:实体分辨
1142标签的局部敏感散列
1143最小散列法和局部敏感散列的结合
1144习题
115大规模数据的聚簇
1151聚簇的应用
1152距离的定义
1153凝聚式聚簇
1154kMeans算法
1155大规模数据的kMeans方法
1156内存中满载点后的处理过程
1157习题
116小结
117参考文献
第12章数据库系统与互联网
121搜索引擎体系结构
1211搜索引擎的组成
1212Web爬虫
1213搜索引擎中的查询处理
1214对网页进行排名
122用于识别重要网页的PageRank
1221PageRank的直观思想
1222PageRank的递归公式——初步尝试
1223爬虫陷阱和死角
1224考虑爬虫陷阱和死角的PageRank
1225习题
123特定主题的PageRank
1231“远距离移动”集
1232计算主题相关的PageRank
1233链接作弊
1234主题相关的PageRank和链接作弊
1235习题
124数据流
1241数据流管理系统
1242数据流应用
1243数据流数据模型
1244数据流转换为关系
1245关系转换为数据流
1246习题
125数据流挖掘
1251动机
1252统计二进制位数
1253统计不同元素的个数
1254习题
126小结
127参考文献