内容简介
本书是数据库系统方面的经典教材之一,其内容由浅入深,既包含了数据库系统基本概念,又反映了数据库技术的新进展。它被国际上许多著名大学所采用,包括斯坦福大学、耶鲁大学、得克萨斯大学、康奈尔大学、伊利诺伊大学等。我国也有多所大学采用本书作为本科生和研究生数据库课程的教材和主要教学参考书,收到了良好的效果。
第7版保持了前6版的总体风格,同时对内容进行了扩充,对结构进行了调整,以更好地符合数据库教学的需求,反映数据库设计、管理与使用方式的发展和变化。
具体更新内容如下:
广泛涵盖了大数据系统的内容,与第6版相比有大量的内容扩充和改进。
增加了区块链数据库的内容,重点介绍了区块链系统与数据库系统之间的交互。
对涉及数据库内部的所有各章进行了修改,以融入固态硬盘、主存数据库、多核系统和列存储等当代技术。
对于使用JSON、RDF和SPARQL进行半结构化数据管理做了更多描述。
更新了对于时态数据、数据分析和诸如写优化的索引等高级索引技术的描述。
为了更好地支持动手实践,重新组织和更新了一些章节,包括使用当代的应用开发工具和大数据系统,如Apache Hadoop和Spark。
作品目录
出版者的话
译者序
前言
关于作者
第1章 引言1
1.1 数据库系统应用1
1.2 数据库系统的目标3
1.3 数据视图6
1.3.1 数据模型6
1.3.2 关系数据模型6
1.3.3 数据抽象7
1.3.4 实例和模式8
1.4 数据库语言9
1.4.1 数据定义语言9
1.4.2 SQL数据定义语言10
1.4.3 数据操纵语言10
1.4.4 SQL数据操纵语言11
1.4.5 从应用程序访问数据库11
1.5 数据库设计12
1.6 数据库引擎12
1.6.1 存储管理器13
1.6.2 查询处理器14
1.6.3 事务管理14
1.7 数据库和应用体系结构15
1.8 数据库用户和管理员16
1.8.1 数据库用户和用户界面16
1.8.2 数据库管理员17
1.9 数据库系统的历史17
1.10 总结20
术语回顾21
实践习题22
习题22
工具22
延伸阅读23
参考文献23
第一部分 关系语言
第2章 关系模型介绍26
2.1 关系数据库的结构26
2.2 数据库模式28
2.3 码29
2.4 模式图32
2.5 关系查询语言32
2.6 关系代数33
2.6.1 选择运算33
2.6.2 投影运算34
2.6.3 关系运算的复合34
2.6.4 笛卡儿积运算35
2.6.5 连接运算36
2.6.6 集合运算37
2.6.7 赋值运算38
2.6.8 更名运算39
2.6.9 等价查询40
2.7 总结40
术语回顾41
实践习题41
习题42
延伸阅读43
参考文献44
第3章 SQL介绍45
3.1 SQL查询语言概览45
3.2 SQL数据定义46
3.2.1 基本类型46
3.2.2 基本模式定义47
3.3 SQL查询的基本结构49
3.3.1 单关系查询49
3.3.2 多关系查询51
3.4 附加的基本运算55
3.4.1 更名运算55
3.4.2 字符串运算56
3.4.3 select子句中的属性说明57
3.4.4 排列元组的显示次序 57
3.4.5 where子句谓词58
3.5 集合运算58
3.5.1 并运算59
3.5.2 交运算60
3.5.3 差运算60
3.6 空值61
3.7 聚集函数62
3.7.1 基本聚集62
3.7.2 分组聚集63
3.7.3 having子句65
3.7.4 对空值和布尔值的聚集66
3.8 嵌套子查询67
3.8.1 集合成员资格67
3.8.2 集合比较68
3.8.3 空关系测试69
3.8.4 重复元组存在性测试70
3.8.5 from子句中的子查询71
3.8.6 with子句72
3.8.7 标量子查询73
3.8.8 不带from子句的标量73
3.9 数据库的修改74
3.9.1 删除75
3.9.2 插入76
3.9.3 更新77
3.10 总结78
术语回顾79
实践习题79
习题81
工具83
延伸阅读84
参考文献84
第4章 中级SQL85
4.1 连接表达式85
4.1.1 自然连接85
4.1.2 连接条件88
4.1.3 外连接89
4.1.4 连接类型和条件92
4.2 视图92
4.2.1 视图定义93
4.2.2 在SQL查询中使用视图94
4.2.3 物化视图95
4.2.4 视图更新95
4.3 事务97
4.4 完整性约束98
4.4.1 单个关系上的约束99
4.4.2 非空约束99
4.4.3 唯一性约束100
4.4.4 check子句100
4.4.5 引用完整性100
4.4.6 给约束赋名102
4.4.7 事务中对完整性约束的违反103
4.4.8 复杂check条件与断言103
4.5 SQL的数据类型与模式105
4.5.1 SQL中的日期和时间类型105
4.5.2 类型转换和格式化函数105
4.5.3 缺省值106
4.5.4 大对象类型107
4.5.5 用户自定义类型108
4.5.6 生成唯一码值110
4.5.7 create table的扩展111
4.5.8 模式、目录与环境111
4.6 SQL中的索引定义112
4.7 授权113
4.7.1 权限的授予与收回114
4.7.2 角色115
4.7.3 视图的授权116
4.7.4 模式的授权117
4.7.5 权限的转移117
4.7.6 权限的收回118
4.7.7 行级授权119
4.8 总结119
术语回顾120
实践习题121
习题122
延伸阅读123
参考文献123
第5章 高级SQL125
5.1 使用程序设计语言访问SQL125
5.1.1 JDBC126
5.1.2 从Python访问数据库132
5.1.3 ODBC132
5.1.4 嵌入式SQL134
5.2 函数和过程136
5.2.1 声明及调用SQL函数和过程136
5.2.2 用于过程和函数的语言结构137
5.2.3 外部语言例程140
5.3 触发器141
5.3.1 对触发器的需求141
5.3.2 SQL中的触发器141
5.3.3 何时不用触发器144
5.4 递归查询146
5.4.1 使用迭代的传递闭包146
5.4.2 SQL中的递归148
5.5 高级聚集特性149
5.5.1 排名150
5.5.2 分窗153
5.5.3 旋转154
5.5.4 上卷和立方体155
5.6 总结158
术语回顾158
实践习题158
习题160
工具161
延伸阅读162
第二部分 数据库设计
第6章 使用E-R模型的数据库设计164
6.1 设计过程概览164
6.1.1 设计阶段164
6.1.2 设计选择165
6.2 实体-联系模型166
6.2.1 实体集166
6.2.2 联系集167
6.3 复杂属性169
6.4 映射基数171
6.5 主码174
6.5.1 实体集174
6.5.2 联系集175
6.5.3 弱实体集176
6.6 从实体集中删除冗余属性177
6.7 将E-R图转换为关系模式180
6.7.1 强实体集的表示180
6.7.2 具有复杂属性的强实体集的表示180
6.7.3 弱实体集的表示182
6.7.4 联系集的表示182
6.7.5 模式的冗余183
6.7.6 模式的合并184
6.8 扩展的E-R特性184
6.8.1 特化185
6.8.2 概化186
6.8.3 属性继承186
6.8.4 特化上的约束187
6.8.5 聚集187
6.8.6 转换为关系模式188
6.9 实体-联系设计问题190
6.9.1 E-R图中的常见错误190
6.9.2 使用实体集还是属性191
6.9.3 使用实体集还是联系集192
6.9.4 二元还是n元联系集193
6.10 数据建模的可选表示法194
6.10.1 可选的E-R表示法195
6.10.2 统一建模语言196
6.11 数据库设计的其他方面198
6.11.1 功能要求198
6.11.2 数据流、工作流198
6.11.3 模式演化198
6.12 总结199
术语回顾200
实践习题200
习题202
工具203
延伸阅读204
参考文献204
第7章 关系数据库设计205
7.1 好的关系设计的特点205
7.1.1 分解206
7.1.2 无损分解207
7.1.3 规范化理论208
7.2 使用函数依赖进行分解208
7.2.1 符号惯例209
7.2.2 码和函数依赖209
7.2.3 无损分解和函数依赖211
7.3 范式212
7.3.1 Boyce-Codd范式212
7.3.2 第三范式214
7.3.3 BCNF和3NF的比较215
7.3.4 更高级的范式216
7.4 函数依赖理论216
7.4.1 函数依赖集的闭包216
7.4.2 属性集的闭包218
7.4.3 正则覆盖219
7.4.4 保持依赖222
7.5 使用函数依赖的分解算法223
7.5.1 BCNF分解223
7.5.2 3NF分解225
7.5.3 3NF算法的正确性226
7.6 使用多值依赖的分解227
7.6.1 多值依赖227
7.6.2 第四范式229
7.6.3 4NF分解229
7.7 更多的范式230
7.8 原子域和第一范式231
7.9 数据库设计过程232
7.9.1 E-R模型和规范化232
7.9.2 属性和联系的命名233
7.9.3 为了性能去规范化234
7.9.4 其他设计问题234
7.10 时态数据建模235
7.11 总结237
术语回顾238
实践习题239
习题241
延伸阅读243
参考文献244
第三部分 应用程序设计和开发
第8章 复杂数据类型246
8.1 半结构化数据246
8.1.1 半结构化数据模型概述246
8.1.2 JSON248
8.1.3 XML249
8.1.4 RDF和知识图谱251
8.2 面向对象253
8.2.1 对象-关系数据库系统254
8.2.2 对象-关系映射257
8.3 文本数据257
8.3.1 关键字查询258
8.3.2 相关性排名258
8.3.3 检索有效性的度量260
8.3.4 结构化数据和知识图谱上的关键字查询260
8.4 空间数据261
8.4.1 几何信息表示262
8.4.2 设计数据库263
8.4.3 地理数据264
8.4.4 空间查询265
8.5 总结266
术语回顾267
实践习题268
习题269
延伸阅读270
参考文献270
第9章 应用程序开发271
9.1 应用程序和用户界面271
9.2 Web基础272
9.2.1 统一资源定位符272
9.2.2 超文本标记语言273
9.2.3 Web服务器和会话275
9.3 servlet277
9.3.1 servlet示例277
9.3.2 servlet会话279
9.3.3 servlet的生命周期280
9.3.4 应用服务器280
9.4 可选择的服务器端框架280
9.4.1 服务器端脚本280
9.4.2 Web应用框架282
9.4.3 Django框架283
9.5 客户端代码和Web服务284
9.5.1 JavaScript284
9.5.2 Web服务288
9.5.3 断连操作288
9.5.4 移动应用平台289
9.6 应用程序体系结构290
9.6.1 业务逻辑层291
9.6.2 数据访问层和对象-关系映射291
9.7 应用程序性能294
9.7.1 通过高速缓存减少开销295
9.7.2 并行处理296
9.8 应用程序安全性296
9.8.1 SQL注入296
9.8.2 跨站点脚本和请求伪造297
9.8.3 密码泄露298
9.8.4 应用级认证299
9.8.5 应用级授权300
9.8.6 审计追踪302
9.8.7 隐私302
9.9 加密及其应用303
9.9.1 加密技术303
9.9.2 数据库中的加密支持305
9.9.3 加密和认证306
9.10 总结307
术语回顾308
实践习题309
习题309
项目建议310
工具312
延伸阅读313
参考文献313
第四部分 大数据分析
第10章 大数据316
10.1 动机316
10.1.1 大数据的来源和使用317
10.1.2 大数据查询318
10.2 大数据存储系统319
10.2.1 分布式文件系统320
10.2.2 分片322
10.2.3 键值存储系统322
10.2.4 并行和分布式数据库325
10.2.5 复制和一致性326
10.3 MapReduce范式327
10.3.1 为什么要使用MapReduce327
10.3.2 MapReduce示例1:词汇统计328
10.3.3 MapReduce示例2:日志处理329
10.3.4 MapReduce任务的并行处理331
10.3.5 Hadoop中的MapReduce332
10.3.6 MapReduce上的SQL334
10.4 超越MapReduce:代数运算335
10.4.1 代数运算的动机335
10.4.2 Spark中的代数运算336
10.5 流数据339
10.5.1 流数据的应用339
10.5.2 流数据查询341
10.5.3 流上的代数运算343
10.6 图数据库345
10.7 总结347
术语回顾347
实践习题348
习题349
工具349
延伸阅读350
参考文献350
第11章 数据分析351
11.1 分析概述351
11.2 数据仓库352
11.2.1 数据仓库成分353
11.2.2 多维数据与数据仓库模式354
11.2.3 数据仓库的数据库支持355
11.2.4 数据湖356
11.3 联机分析处理356
11.3.1 多维数据上的聚集357
11.3.2 交叉表的关系表示360
11.3.3 SQL中的OLAP361
11.3.4 报表和可视化工具364
11.4 数据挖掘365
11.4.1 数据挖掘任务的类型366
11.4.2 分类366
11.4.3 回归369
11.4.4 关联规则370
11.4.5 聚类371
11.4.6 文本挖掘372
11.5 总结372
术语回顾373
实践习题374
习题375
工具375
延伸阅读376
参考文献376
第五部分 存储管理和索引
第12章 物理存储系统378
12.1 物理存储介质概述378
12.2 存储器接口380
12.3 磁盘381
12.3.1 磁盘的物理特性381
12.3.2 磁盘的性能度量383
12.4 闪存384
12.5 RAID386
12.5.1 通过冗余提高可靠性386
12.5.2 通过并行提高性能387
12.5.3 RAID级别387
12.5.4 硬件问题389
12.5.5 RAID级别的选择390
12.5.6 其他的RAID应用391
12.6 磁盘块访问391
12.7 总结393
术语回顾394
实践习题394
习题395
延伸阅读395
参考文献396
第13章 数据存储结构397
13.1 数据库存储架构397
13.2 文件组织398
13.2.1 定长记录398
13.2.2 变长记录400
13.2.3 大对象存储402
13.3 文件中记录的组织402
13.3.1 堆文件组织403
13.3.2 顺序文件组织404
13.3.3 多表聚簇文件组织405
13.3.4 划分407
13.4 数据字典存储407
13.5 数据库缓冲区409
13.5.1 缓冲区管理器409
13.5.2 缓冲区替换策略411
13.5.3 写操作的重排序与恢复413
13.6 面向列的存储414
13.7 主存数据库的存储组织417
13.8 总结418
术语回顾418
实践习题419
习题419
延伸阅读420
参考文献420
第14章 索引421
14.1 基本概念421
14.2 顺序索引422
14.2.1 稠密索引和稀疏索引422
14.2.2 多级索引425
14.2.3 索引更新426
14.2.4 辅助索引427
14.2.5 多码索引428
14.3 B+树索引文件428
14.3.1 B+树的结构429
14.3.2 B+树的查询431
14.3.3 B+树的更新434
14.3.4 B+树更新的复杂度439
14.3.5 非唯一性搜索码440
14.4 B+树扩展441
14.4.1 B+树文件组织441
14.4.2 辅助索引和记录重分配442
14.4.3 对字符串的索引443
14.4.4 B+树索引的批量加载443
14.4.5 B树索引文件444
14.4.6 闪存上的索引445
14.4.7 主存上的索引446
14.5 散列索引447
14.6 多码访问449
14.6.1 使用多个单码索引449
14.6.2 多码索引449
14.6.3 覆盖索引450
14.7 索引的创建450
14.8 写优化索引结构452
14.8.1 LSM树452
14.8.2 缓冲树454
14.9 位图索引455
14.10 时空数据索引456
14.10.1 空间数据索引456
14.10.2 时态数据索引458
14.11 总结459
术语回顾460
实践习题461
习题463
延伸阅读463
参考文献464
第六部分 查询处理和优化
第15章 查询处理466
15.1 概述466
15.2 查询代价的度量468
15.3 选择运算470
15.3.1 文件扫描的使用和索引的选择470
15.3.2 涉及比较的选择472
15.3.3 复杂选择的实现473
15.4 排序474
15.4.1 外排序-归并算法474
15.4.2 外排序-归并的代价分析476
15.5 连接运算476
15.5.1 嵌套-循环连接477
15.5.2 块嵌套-循环连接477
15.5.3 索引嵌套-循环连接478
15.5.4 归并-连接479
15.5.5 散列-连接482
15.5.6 复杂连接485
15.5.7 空间数据上的连接486
15.6 其他运算486
15.6.1 去重486
15.6.2 投影487
15.6.3 集合运算487
15.6.4 外连接488
15.6.5 聚集489
15.7 表达式执行489
15.7.1 物化490
15.7.2 流水线490
15.7.3 对于连续流数据的流水线494
15.8 内存中的查询处理495
15.8.1 高速缓存感知算法495
15.8.2 查询编译496
15.8.3 面向列的存储496
15.9 总结496
术语回顾497
实践习题498
习题499
延伸阅读500
参考文献500
第16章 查询优化501
16.1 概述501
16.2 关系表达式的转换503
16.2.1 等价规则504
16.2.2 转换示例507
16.2.3 连接次序509
16.2.4 等价表达式的枚举509
16.3 表达式结果的统计信息估计510
16.3.1 目录信息511
16.3.2 选择规模估计512
16.3.3 连接规模估计514
16.3.4 其他运算的规模估计516
16.3.5 不同取值个数的估计516
16.4 执行计划的选择517
16.4.1 基于代价的连接次序选择517
16.4.2 采用等价规则的基于代价的优化520
16.4.3 优化中的启发式方法521
16.4.4 嵌套子查询的优化523
16.5 物化视图525
16.5.1 视图维护526
16.5.2 增量的视图维护526
16.5.3 查询优化和物化视图528
16.5.4 物化视图和索引选择529
16.6 查询优化中的高级主题529
16.6.1 top-K优化529
16.6.2 连接最小化530
16.6.3 更新的优化530
16.6.4 多查询优化和共享式扫描530
16.6.5 参数化查询优化531
16.6.6 自适应查询处理531
16.7 总结532
术语回顾532
实践习题533
习题535
延伸阅读536
参考文献536
第七部分 事务管理
第17章 事务538
17.1 事务的概念538
17.2 一个简单的事务模型539
17.3 存储器结构541
17.4 事务的原子性和持久性542
17.5 事务的隔离性543
17.6 可串行化547
17.7 事务的隔离性和原子性550
17.7.1 可恢复调度550
17.7.2 无级联调度550
17.8 事务的隔离性级别551
17.9 隔离性级别的实现553
17.9.1 锁553
17.9.2 时间戳554
17.9.3 多版本和快照隔离554
17.10 事务的SQL语句表示555
17.11 总结556
术语回顾557
实践习题558
习题558
延伸阅读559
参考文献559
第18章 并发控制560
18.1 基于锁的协议560
18.1.1 锁560
18.1.2 锁的授予563
18.1.3 两阶段封锁协议563
18.1.4 封锁的实现565
18.1.5 基于图的协议566
18.2 死锁处理568
18.2.1 死锁预防568
18.2.2 死锁检测与恢复569
18.3 多粒度571
18.4 插入操作、删除操作与谓词读573
18.4.1 删除573
18.4.2 插入574
18.4.3 谓词读和幻象现象574
18.5 基于时间戳的协议576
18.5.1 时间戳576
18.5.2 时间戳排序协议577
18.5.3 Thomas写规则578
18.6 基于有效性检查的协议580
18.7 多版本机制581
18.7.1 多版本时间戳排序582
18.7.2 多版本两阶段封锁583
18.8 快照隔离584
18.8.1 快照隔离中的多版本584
18.8.2 更新事务的有效性检查步骤585
18.8.3 串行化问题和解决方案586
18.9 实践中的弱一致性级别589
18.9.1 二级一致性589
18.9.2 游标稳定性589
18.9.3 跨用户交互的并发控制590
18.10 并发控制的高级主题591
18.10.1 在线索引创建591
18.10.2 索引结构中的并发592
18.10.3 主存数据库中的并发控制594
18.10.4 长事务596
18.10.5 利用操作的并发控制596
18.10.6 实时事务系统598
18.11 总结599
术语回顾600
实践习题601
习题603
延伸阅读604
参考文献604
第19章 恢复系统606
19.1 故障分类606
19.2 存储器607
19.2.1 稳定存储器的实现607
19.2.2 数据访问608
19.3 恢复与原子性609
19.3.1 日志记录610
19.3.2 数据库修改611
19.3.3 并发控制与恢复611
19.3.4 事务提交612
19.3.5 使用日志来重做和撤销事务612
19.3.6 检查点615
19.4 恢复算法616
19.4.1 事务回滚616
19.4.2 系统崩溃后的恢复616
19.4.3 提交处理的优化618
19.5 缓冲区管理618
19.5.1 日志记录缓冲618
19.5.2 数据库缓冲619
19.5.3 操作系统在缓冲区管理中的作用620
19.5.4 模糊检查点621
19.6 非易失性存储器上数据丢失的故障621
19.7 使用远程备份系统的高可用性622
19.8 锁的提前释放与逻辑撤销操作625
19.8.1 逻辑操作625
19.8.2 逻辑撤销日志记录626
19.8.3 有逻辑撤销的事务回滚626
19.8.4 逻辑撤销中的并发问题628
19.9 ARIES629
19.9.1 数据结构629
19.9.2 恢复算法631
19.9.3 其他特性633
19.10 主存数据库的恢复634
19.11 总结634
术语回顾636
实践习题637
习题638
延伸阅读639
参考文献639
第八部分 并行和分布式数据库
第20章 数据库系统体系结构642
20.1 概述642
20.2 集中式数据库系统642
20.3 服务器系统体系结构643
20.3.1 事务服务器体系结构644
20.3.2 数据服务器与数据存储系统646
20.3.3 客户端高速缓存647
20.4 并行系统648
20.4.1 并行数据库的动机648
20.4.2 并行系统的性能度量649
20.4.3 互连网络651
20.4.4 并行数据库体系结构654
20.4.5 共享内存655
20.4.6 共享磁盘658
20.4.7 无共享659
20.4.8 层次659
20.5 分布式系统659
20.6 并行和分布式系统中的事务处理661
20.7 基于云的服务662
20.7.1 云服务模型662
20.7.2 云服务的优缺点665
20.8 总结665
术语回顾666
实践习题667
习题667
延伸阅读668
参考文献668
第21章 并行和分布式存储669
21.1 概述669
21.2 数据分区669
21.2.1 分区策略670
21.2.2 分区技术的对比671
21.3 分区中的偏斜处理672
21.3.1 平衡的范围分区向量673
21.3.2 虚拟节点分区673
21.3.3 动态再分区674
21.4 复制676
21.4.1 副本的位置677
21.4.2 更新与副本的一致性677
21.5 并行索引678
21.6 分布式文件系统681
21.7 并行的键值存储683
21.7.1 数据表示684
21.7.2 存储与检索数据685
21.7.3 对事务的支持687
21.7.4 不使用声明式查询的管理688
21.7.5 性能优化689
21.8 总结689
术语回顾690
实践习题690
习题691
工具691
延伸阅读692
参考文献692
第22章 并行和分布式查询处理694
22.1 概述694
22.2 并行排序695
22.2.1 范围分区排序695
22.2.2 并行的外排序-归并696
22.3 并行连接697
22.3.1 分区连接697
22.3.2 分片-复制连接698
22.3.3 处理并行连接中的偏斜700
22.4 其他运算700
22.4.1 其他关系运算700
22.4.2 map和reduce操作701
22.5 查询计划的并行执行703
22.5.1 操作间并行703
22.5.2 交换算子模型705
22.5.3 情况汇总706
22.5.4 查询计划中的容错708
22.6 共享内存体系结构上的查询处理710
22.7 并行执行的查询优化711
22.7.1 并行查询计划空间712
22.7.2 并行查询计算的代价712
22.7.3 选择并行查询计划713
22.7.4 数据托管714
22.7.5 物化视图的并行维护715
22.8 流数据的并行处理716
22.8.1 元组的路由716
22.8.2 流运算的并行处理718
22.8.3 流数据的容错719
22.9 分布式查询处理720
22.9.1 来自多个数据源的数据集成720
22.9.2 模式和数据集成721
22.9.3 跨多个数据源的查询处理723
22.9.4 分布式目录系统726
22.10 总结727
术语回顾728
实践习题729
习题730
工具731
延伸阅读731
参考文献732
第23章 并行和分布式事务处理734
23.1 分布式事务734
23.1.1 系统结构735
23.1.2 系统故障模式736
23.2 提交协议736
23.2.1 两阶段提交736
23.2.2 提交期间的阻塞避免740
23.2.3 事务处理的可选模型741
23.3 分布式数据库中的并发控制743
23.3.1 封锁协议744
23.3.2 死锁处理744
23.3.3 租赁746
23.3.4 基于时间戳的分布式协议747
23.3.5 时间戳的产生747
23.3.6 分布式时间戳排序748
23.3.7 分布式有效性检查749
23.4 复制750
23.4.1 副本一致性750
23.4.2 使用副本的并发控制751
23.4.3 故障处理753
23.4.4 重构和重组755
23.5 扩展的并发控制协议756
23.5.1 多版本2PL和全局一致性时间戳756
23.5.2 分布式快照隔离757
23.5.3 联邦数据库系统中的并发控制758
23.6 具有弱一致性级别的复制759
23.6.1 用一致性换取可用性759
23.6.2 异步复制760
23.6.3 异步视图维护762
23.6.4 检测不一致性更新764
23.6.5 解决冲突的更新765
23.6.6 使用默克尔树来检测集合之间的差异766
23.7 协调器的选择768
23.7.1 备份协调器768
23.7.2 选举协调器769
23.8 分布式系统中的共识771
23.8.1 问题概述771
23.8.2 Paxos共识协议772
23.8.3 Raft共识协议774
23.8.4 使用复制状态机的容错服务777
23.8.5 使用共识的两阶段提交779
23.9 总结779
术语回顾781
实践习题781
习题783
延伸阅读783
参考文献784
第九部分 附录
附录A 详细的大学模式788
第十部分 中文在线章节一
第24章 高级索引技术
第25章 高级应用开发
第26章 区块链数据库
索引
第十一部分 英文在线章节二
第27章 形式关系查询语言
第28章 高级关系数据库设计
第29章 基于对象的数据库
第30章 XML
第31章 信息检索
第32章 PostgreSQL
· · · · · ·
作者简介
亚伯拉罕·西尔伯沙茨(Abraham Silberschatz)
于纽约州立大学石溪分校获得博士学位,现为耶鲁大学计算机科学系Sidney J. Weinberg教授,曾任贝尔实验室信息科学研究中心副主任。他是ACM会士、IEEE 会士以及康涅狄格科学与工程学会的成员,获得了48项专利和24项授权。他还是教科书《操作系统概念》的作者。
亨利·F. 科思(Henry F. Korth)
于普林斯顿大学获得博士学位,现为理海大学计算机科学与工程系教授和计算机科学与商业项目联合主任,曾任贝尔实验室数据库原理研究中心主任、松下科技副总裁、得克萨斯大学奥斯汀分校副教授以及IBM研究中心研究人员。他是ACM会士、IEEE会士以及VLDB会议10年贡献奖的获得者。他的研究涉及数据库系统的方方面面,最近,他的研究致力于解决区块链在企业数据库中的应用问题。
S. 苏达...
(展开全部)
精彩摘录
作为对商业数据计算机化管理的响应,在20世纪60年代出现了最早的数据库系统。现代的数据库应用包括有非常复杂的全球型企业。跟现代的数据库应用相比,那些早期的应用是相对简单的。所有的数据库应用,不管老的还是新的,都共享重要的公共元素。比如**数据库应用的核心不是执行某种计算的程序,而是数据本身**。今天,一些最有价值的公司之所以有价值,不是因为它们的有形资产,而是因为它们拥有的信息。想象一下,如果一个银行没有了账户和客户数据,一个社交网站丢失了用户之间的联系,则这些公司的价值就全部丧失了。使用数据库来管理数据集有以下特点:-数据非常有价值;-数据量相对较大;-数据会同时被许多用户和应用访问;第一批数据库应用有的仅是简单的、格式精确的、结构化的数据。今天,数据库应用可能包含具有复杂关系和结构可变的数据。先看一个具有结构化数据的应用示例:一个大学里有关课程、学生、课程注册等信息的记录。该大学为每门课程保留相同类型的信息:课程标识符、课程名、所属系、课程编号等,为每个学生信息也保留相同类型的信息:学生标识符、学生名、地址、电话号码等,课程注册是由(课程标识符,学生标识符)这样的对组成的集合。这类信息具有着标准的、重复性的结构,是可追溯至20世纪60年代的数据库应用类型的典型代表。跟这个简单的大学数据库应用相比,一个社交网站的用户会发布有关他们自己的各种类型的信息,从姓名、出生日期等简单信息,到由文本、图片、视频、指向其他用户的链接组成的复杂信息。虽然这些数据之间具有共同结构的数量是有限的,但是这两类应用都具有数据库的基本特征。现代数据库不仅利用数据结构中的共性来提升效率,而且支持弱结构的数据以及格式高度可变的数据。因此,**数据库系统是一个大型的、复杂的软件系统,它的任务是管理大型、复杂的数据集**。复杂性管理不仅在数据管理领域非常有挑...
——引自章节:1.1Database-SystemApplicatio
AlthoughwerefertotheSQLlanguageasa“querylanguage,”itcandomuchmorethanjustqueryadatabase.Itcandefinethestructureofthedata,modifydatainthedatabase,andspecifysecurityconstraints.IBMdevelopedtheoriginalversionofSQL,originallycalledSequel,aspartoftheSystemRprojectintheearly1970s.TheSequellanguagehasevolvedsincethen,anditsnamehaschangedtoSQL(StructuredQueryLanguage).In1986,theAmericanNationalStandardsInstitute(ANSI)andtheInternationalOrganizationforStandardization(ISO)publishedanSQLstandard,calledSQL-86.ANSIpublishedanextendedstandardforSQL,SQL-89,in1989.ThenextversionofthestandardwasSQL-92standard,followedbySQL:1999,SQL:2003,SQL:2006,andmostrecentlySQL:2008.
——引自第57页