第1部分 數據庫簡介
第1章 數據庫與數據庫用戶 3
1.1 簡介 4
1.2 一個示例 6
1.3 數據庫方法的特征 8
1.3.1 數據庫繫統的自描述性 9
1.3.2 程序與數據之間的隔離以及數據抽像 9
1.3.3 支持數據的多種試圖 11
1.3.4 數據共享與多用戶事務處理 11
1.4 幕前角色 12
1.4.1 數據庫管理員 13
1.4.2 數據庫設計者 13
1.4.3 終用戶 13
1.4.4 繫統分析員和應用程序員(軟件工程師) 14
1.5 幕後工作者 14
1.6 使用DBMS方法的優勢 15
1.6.1 控制冗餘 15
1.6.2 限制未經授權的訪問 16
1.6.3 為程序對像提供持久性存儲 16
1.6.4 為高效查詢處理提供存儲結構和搜索技術 17
1.6.5 提供備份和恢復 17
1.6.6 提供多種用戶接口 17
1.6.7 表示數據間的復雜關繫 18
1.6.8 強制執行完整性約束 18
1.6.9 允許使用規則和觸發器執行推斷和動作 18
1.6.10 使用數據庫方法的其他潛在優勢 19
1.7 數據庫應用簡史 20
1.7.1 使用層次和網狀繫統的早期數據庫應用 20
1.7.2 利用關繫數據庫提供數據抽像和應用靈活性 20
1.7.3 面向對像的應用以及對更復雜數據庫的需求 21
1.7.4 使用XML在Web上交換數據以實現電子商務 21
1.7.5 為新應用擴展數據庫能力 21
1.7.6 大數據存儲繫統和NOSQL數據庫的出現 22
1.8 何時不使用DBMS 22
1.9 小結 23
復習題 23
練習題 24
選讀文獻 24
第2章 數據庫繫統的概念和架構 25
2.1 數據模型、模式和實例 25
2.1.1 數據模型分類 26
2.1.2 模式、實例和數據庫狀態 27
2.2 三層模式架構和數據獨立性 28
2.2.1 三層模式架構 29
2.2.2 數據獨立性 30
2.3 數據庫語言與界面 31
2.3.1 DBMS語言 31
2.3.2 DBMS界面 32
2.4 數據庫繫統環境 33
2.4.1 DBMS構成模型 34
2.4.2 數據庫繫統實用程序 36
2.4.3 工具、應用環境和通信設施 36
2.5 DBMS的集中式和客戶/服務器架構 37
2.5.1 集中式DBMS架構 37
2.5.2 基本的客戶/服務器架構 37
2.5.3 DBMS的兩層客戶/服務器架構 39
2.5.4 面向Web應用的三層及n層架構 40
2.6 數據庫管理繫統的分類 41
2.7 小結 43
復習題 44
練習題 44
選讀文獻 45
第2部分 概念數據建模與數據庫設計
第3章 使用實體-關繫(ER)模型的數據建模 49
3.1 使用高級概念數據模型進行數據庫設計 50
3.2 一個示例數據庫應用 51
3.3 實體類型、實體集、屬性和鍵 53
3.3.1 實體和屬性 53
3.3.2 實體類型、實體集、鍵和值集 55
3.3.3 COMPANY數據庫的初始概念設計 58
3.4 關繫類型、關繫集、角色和結構約束 59
3.4.1 關繫類型、關繫集和關繫實例 60
3.4.2 關繫度、角色名稱和遞歸關繫 61
3.4.3 關繫類型上的約束 63
3.4.4 關繫類型的屬性 65
3.5 弱實體類型 65
3.6 細化COMPANY數據庫的ER設計 66
3.7 ER圖、命名約定和設計問題 67
3.7.1 ER圖表示法小結 67
3.7.2 模式構造的正確命名 69
3.7.3 ER概念設計的設計選擇 69
3.7.4 ER圖的替代表示法 70
3.8 其他表示法示例:UML類圖 70
3.9 度大於2的關繫類型 73
3.9.1 (或度更高)關繫的選擇 73
3.9.2 (或度更高)關繫上的約束 76
3.10 另一個示例:UNIVERSITY數據庫 76
3.11 小結 78
復習題 79
練習題 80
實驗題 85
選讀文獻 86
第4章 增強的實體-關繫(EER)模型 88
4.1 子類、超類和繼承 88
4.2 特化和泛化 90
4.2.1 特化 90
4.2.2 泛化 92
4.3 特化和泛化層次的約束和特征 93
4.3.1 特化與泛化的約束 93
4.3.2 特化和泛化的層次與格 95
4.3.3 利用特化和泛化對概念模式進行細化 97
4.4 使用類別的UNION類型建模 98
4.5 示例UNIVERSITY的EER模式、設計選擇和形式化定義 100
4.5.1 一個不同的UNIVERSITY數據庫示例 100
4.5.2 特化/泛化的設計選擇 102
4.5.3 EER模型概念的形式化定義 103
4.6 其他表示法的示例:在UML類圖中表示特化和泛化 104
4.7 數據抽像、知識表示和本體概念 105
4.7.1 分類和實例化 106
4.7.2 標識 106
4.7.3 特化和泛化 107
4.7.4 聚合與關聯 107
4.7.5 本體和語義Web 109
4.8 小結 110
復習題 110
練習題 111
實驗題 117
選讀文獻 118
第3部分 關繫數據模型和SQL
第5章 關繫數據模型和關繫數據庫約束 123
5.1 關繫模型概念 124
5.1.1 域、組和關繫 124
5.1.2 關繫的特征 126
5.1.3 關繫模型表示法 129
5.2 關繫模型約束和關繫數據庫模式 129
5.2.1 域約束 130
5.2.2 鍵約束和NULL值約束 130
5.2.3 關繫數據庫和關繫數據庫模式 132
5.2.4 實體完整性、參照完整性和外鍵 134
5.2.5 其他約束類型 136
5.3 更新操作、事務和處理約束破壞 136
5.3.1 插入操作 137
5.3.2 刪除操作 138
5.3.3 更新操作 138
5.3.4 事務的概念 139
5.4 小結 140
復習題 140
練習題 141
選讀文獻 144
第6章 SQL基礎 145
6.1 SQL數據定義和數據類型 146
6.1.1 SQL中的模式和目錄的概念 146
6.1.2 SQL中的CREATE TABLE命令 147
6.1.3 SQL中的屬性數據類型和域 149
6.2 在SQL中指定約束 151
6.2.1 指定屬性約束和屬性默認值 151
6.2.2 指定鍵約束和參照完整性約束 152
6.2.3 命名約束 153
6.2.4 使用CHE組上指定約束 153
6.3 SQL中的基本檢索查詢 154
6.3.1 基本SQL查詢的SELECT-FROM-WHERE結構 154
6.3.2 有歧義的屬性名、別名、重組變量 157
6.3.3 未指定的WHERE子句和星號(*)的使用 158
6.3.4 在SQL中將表作為集合 159
6.3.5 子串模式匹配和算術運算符 161
6.3.6 查詢結果排序 162
6.3.7 基本SQL檢索查詢的討論和小結 163
6.4 SQL中的INSERT、DELETE 和UPDATE語句 163
6.4.1 INSERT命令 163
6.4.2 DELETE命令 165
6.4.3 UPDATE命令 165
6.5 SQL的其他特性 166
6.6 小結 167
復習題 167
練習題 168
選讀文獻 170
第7章 SQL的更多知識:復雜查詢、觸發器、視圖和模式修改 171
7.1 更復雜的SQL檢索查詢 171
7.1.1 涉及NULL和三值邏輯的比較 171
7.1.2 嵌套組與集/多集比較 173
7.1.3 關聯的嵌套查詢 175
7.1.4 SQL中的EXISTS和UNIQUE函數 175
7.1.5 SQL中的顯式集合與重命名 177
7.1.6 SQL中的連接表和外連接 178
7.1.7 SQL中的聚合函數 179
7.1.8 分組:GROUP BY和HAVING子句 181
7.1.9 其他SQL構造:WITH和CASE 184
7.1.10 SQL中的遞歸查詢 185
7.1.11 SQL查詢的討論和總結 186
7.2 指定約束作為斷言以及指定動作作為觸發器 187
7.2.1 在SQL中指定一般性約束作為斷言 187
7.2.2 SQL中的觸發器簡介 188
7.3 SQL中的視圖(虛表) 189
7.3.1 SQL中的視圖概念 189
7.3.2 在SQL中指定視圖 190
7.3.3 視圖實現、視圖更新和內聯視圖 191
7.3.4 將視圖作為授權機制 193
7.4 SQL中的模式更改語句 194
7.4.1 DROP命令 194
7.4.2 ALTER命令 194
7.5 小結 195
復習題 197
練習題 197
選讀文獻 198
第8章 關繫代數和關繫演算 200
8.1 關繫運算:選擇和投影 201
8.1.1 選擇運算 201
8.1.2 投影運算 203
8.1.3 運算序列和RENAME運算 204
8.2 集合論中的關繫代數運算 206
8.2.1 並、交和差運算 206
8.2.2 笛卡兒積(叉積)運算 208
8.3 關繫運算:連接運算和除運算 210
8.3.1 連接運算 210
8.3.2 連接的變體:等值連接和自然連接 211
8.3.3 關繫代數運算的完備集 213
8.3.4 除運算 213
8.3.5 查詢樹的表示法 215
8.4 其他關繫運算 216
8.4.1 廣義投影 216
8.4.2 聚合函數和分組 217
8.4.3 遞歸閉包運算 218
8.4.4 外連接運算 219
8.4.5 外並運算 220
8.5 關繫代數中的查詢示例 221
8.6&nbs組關繫演算 223
8.6.1&nbs組變量和值域關繫 224
8.6.2&nbs組關繫演算中的表達式和公式 225
8.6.3 存在量詞和全稱量詞 226
8.6.4&nbs組關繫演算中的示例查詢 226
8.6.5 查詢圖的表示法 228
8.6.6 在全稱量詞與存在量詞之間轉換 228
8.6.7 在查詢中使用全稱量詞 229
8.6.8 安全表達式 230
8.7 域關繫演算 231
8.8 小結 233
復習題 234
練習題 234
實驗題 238
選讀文獻 240
第9章 使用ER-關繫映射和EER-關繫映射進行關繫數據庫設計 241
9.1 使用ER-關繫映射進行關繫數據庫設計 241
9.1.1 ER-關繫映射算法 241
9.1.2 關於映射ER模型構造的討論和總結 247
9.2 將EER模型構造映射到關繫 248
9.2.1 特化或泛化的映射 248
9.2.2 共享子類(多重繼承)的映射 251
9.2.3 類別(並類型)的映射 251
9.3 小結 252
復習題 252
練習題 252
實驗題 254
選讀文獻 254
第4部分 數據庫編程技術
第10章 SQL編程技術簡介 257
10.1 數據庫編程技術和問題概述 258
10.1.1 數據庫編程的方法 258
10.1.2 阻抗失配 259
10.1.3 數據庫編程中的典型交互序列 260
10.2 嵌入式SQL、動態SQL和SQLJ 260
10.2.1 利用嵌入式SQL檢組 261
10.2.2 使用遊標處理查詢結果 264
10.2.3 使用動態SQL在運行時指定查詢 266
10.2.4 SQLJ:在Java中嵌入SQL命令 267
10.2.5 在SQLJ中使用迭代器處理查詢結果 269
10.3 利用函數調用和類庫進行數據庫編程:SQL/CLI和JDBC 271
10.3.1 以C作為宿主語言利用SQL/CLI進行數據庫編程 271
10.3.2 JDBC:用於Java編程的SQL類庫 274
10.4 數據庫存儲過程和SQL/PSM 279
10.4.1 數據庫存儲過程和函數 279
10.4.2 SQL/PSM:擴展SQL以指定持久存儲模塊 280
10.5 3種方法的比較 282
10.6 小結 282
復習題 283
練習題 283
選讀文獻 283
第11章 使用PHP進行Web數據庫編程 284
11.1 一個簡單的PHP示例 284
11.2 PHP的基本特性概述 287
11.2.1 PHP變量、數據類型和編程構造 287
11.2.2 PHP數組 288
11.2.3 PHP函數 289
11.2.4 PHP服務器變量和表單 291
11.3 PHP數據庫編程概述 292
11.3.1 連接到數據庫 292
11.3.2 從表單中收集數據 294
11.3.3 數據庫表中的檢索查詢 295
11.4 用於數據庫Web編程的Java 技術簡介 296
11.5 小結 297
復習題 297
練習題 297
選讀文獻 298
第5部分 對像、對像-關繫和XML:概念、模型、語言和標準
第12章 對像和對像-關繫數據庫 301
12.1 對像數據庫概念概述 302
12.1.1 面向對像概念和特性簡介 302
12.1.2 對像標識以及對像與文字的比較 303
12.1.3 對像和文字的復雜類型結構 304
12.1.4 操作封裝和對像持久性 306
12.1.5 類型層次和繼承 309
12.1.6 其他面向對像概念 312
12.1.7 對像數據庫概念總結 313
12.2 SQL的對像數據庫擴展 314
12.2.1 使用CREATE TYPE的用戶定義類型和復雜對像 314
12.2.2 使用引用類型的對像標識符 317
12.2.3 基於UDT創建表 317
12.2.4 操作封裝 318
12.2.5 指定繼承和函數重載 318
12.2.6 通過引用指定聯繫 319
12.3 ODMG對像模型和對像定義語言ODL 320
12.3.1 ODMG的對像模型概述 320
12.3.2 ODMG對像模型中的繼承 325
12.3.3 對像模型中的內置接口和類 325
12.3.4 原子(用戶定義)對像 327
12.3.5 外延、鍵和工廠對像 329
12.3.6 對像定義語言(ODL) 330
12.4 對像數據庫概念設計 335
12.4.1 ODB與RDB的概念設計之間的區別 336
12.4.2 將EER模式映射到ODB模式 336
12.5 對像查詢語言(OQL) 338
12.5.1 簡單OQL查詢、數據庫入口點和迭代器變量 338
12.5.2 查詢結果和路徑表達式 339
12.5.3 OQL的其他特性 341
12.6 ODMG標準中的C 語言綁定概述 345
12.7 小結 347
復習題 347
練習題 348
選讀文獻 349
第13章 XML:可擴展標記語言 351
13.1 結構化、半結構化和非結構化數據 352
13.2 XML層次(樹狀)數據模型 355
13.3 XML文檔、DTD和XML模式 357
13.3.1 良構和有效的XML文檔和XML DTD 357
13.3.2 XML模式 360
13.4 從數據庫存儲和提取XML文檔 364
13.5 XML語言 365
13.5.1 XPath:在XML中指定路徑表達式 365
13.5.2 XQuery:在XML中指定查詢 367
13.5.3 XML相關的其他語言和協議 368
13.6 從關繫數據庫中提取XML文檔 369
13.6.1 在平面或基於圖的數據上創建層次XML視圖 369
13.6.2 斷開環以將圖轉換成樹 372
13.6.3 從數據庫中提取XML文檔的其他步驟 373
13.7 XML/SQL:用於創建XML數據的SQL函數 373
13.8 小結 375
復習題 375
練習題 376
選讀文獻 376
第6部分 數據庫設計理論和規範化
第14章 函數依賴和關繫數據庫規範化的基礎知識 379
14.1 關繫模式的非形式化設計準則 380
14.1.1 給關繫中的屬性賦予清晰的定義 381
14.1.2&nbs組中的冗餘信息和更新異常 383
14.1.3&nbs組中的NULL值 386
14.1.4 組 386
14.1.5 關於設計準則的總結和討論 388
14.2 函數依賴 389
14.3 基於主鍵的範式 391
14.3.1 關繫的規範化 392
14.3.2 範式的實際應用 393
14.3.3 鍵的定義和參與鍵的屬性 393
14.3.4 範式 394
14.3.5 第二範式 397
14.3.6 第三範式 398
14.4 第二範式和第三範式的一般定義 399
14.4.1 第二範式的一般定義 399
14.4.2 第三範式的一般定義 401
14.4.3 解釋第三範式的一般定義 401
14.5 Boyce-Codd範式 402
14.6 多值依賴和第四範式 405
14.7 連接依賴和第五範式 407
14.8 小結 408
復習題 409
練習題 410
實驗題 414
選讀文獻 414
第15章 關繫數據庫設計算法及其他依賴 415
15.1 函數依賴的高級主題:推理規則、等價和小覆蓋 416
15.1.1 函數依賴的推理規則 416
15.1.2 函數依賴集合的等價性 420
15.1.3 小函數依賴集合 420
15.2 關繫分解的性質 422
15.2.1 關繫分解和範式的不足 423
15.2.2 分解的依賴保持性質 423
15.2.3 分解的非加性(無損)連接性質 424
15.2.4 分解的非加性連接性質 427
15.2.5 連續的非加性連接分解 427
15.3 關繫數據庫模式設計算法 427
15.3.1 依賴保持和非加性(無損)連接的3NF模式分解 427
15.3.2 非加性連接的BCNF模式分解 430
15.4 NULL值組和替代的關繫設計 431
15.4.1 NULL值組的問題 431
15.4.2 規範化算法和替代關繫設計的討論 433
15.5 多值依賴和4NF的進一步討論 434
15.5.1 函數依賴和多值依賴的推理規則 434
15.5.2 再論第四範式 435
15.5.3 非加性連接的4NF關繫分解 436
15.6 其他的依賴和範式 437
15.6.1 連接依賴和第五範式 437
15.6.2 包含依賴 437
15.6.3 基於算術函數和過程的函數依賴 438
15.6.4 域-鍵範式 439
15.7 小結 439
復習題 440
練習題 440
實驗題 441
選讀文獻 442
第7部分 文件結構、散列、索引 和物理數據庫設計
第16章 磁盤存儲、基本文件結構、散列和現代存儲架構 445
16.1 簡介 445
16.1.1 存儲器的層次結構和存儲設備 446
16.1.2 數據庫的存儲組織方式 448
16.2 輔存設備 449
16.2.1 磁盤設備的硬件描述 450
16.2.2 使磁盤上的數據訪問更高效 454
16.2.3 件(SSD)存儲器 455
16.2.4 磁帶存儲設備 456
16.3 塊緩衝 457
16.3.1 緩衝區管理 458
16.3.2 緩衝區替換策略 459
16.4 把文件記錄存放在磁盤上 460
16.4.1 記錄和記錄類型 461
16.4.2 文件、定長記錄和變長記錄 461
16.4.3 記錄塊、跨塊記錄與非跨塊記錄 463
16.4.4 在磁盤上分配文件塊 464
16.4.5 文件頭 464
16.5 文件操作 465
16.6 無序記錄的文件(堆文件) 467
16.7 有序記錄的文件(排序文件) 468
16.8 散列技術 471
16.8.1 內部散列 471
16.8.2 磁盤文件的外部散列 474
16.8.3 允許動態文件擴展的散列技術 476
16.9 其他主文件組織 480
16.9.1 混合記錄的文件 480
16.9.2 將B樹及其他數據結構作為主組織 481
16.10 使用RAID技術並行化磁盤訪問 481
16.10.1 利用RAID提高可靠性 482
16.10.2 利用RAID改進性能 483
16.10.3 RAID組織和級別 483
16.11 現代存儲架構 484
16.11.1 存儲區域網絡 485
16.11.2 網絡連接存儲 485
16.11.3 iSCSI及其他基於網絡的存儲協議 486
16.11.4 自動存儲分層 487
16.11.5 基於對像的存儲 487
16.12 小結 488
復習題 489
練習題 490
選讀文獻 493
第17章 文件的索引結構和物理數據庫設計 495
17.1 單級有序索引的類型 495
17.1.1 主索引 496
17.1.2 聚簇索引 499
17.1.3 輔助索引 500
17.1.4 小結 504
17.2 多級索引 505
17.3 使用B樹和B 樹的動態多級索引 508
17.3.1 搜索樹和B樹 509
17.3.2 B 樹 512
17.4 多個鍵上的索引 520
17.4.1 多個屬性上的有序索引 520
17.4.2 分區散列 521
17.4.3 網格文件 521
17.5 其他索引類型 522
17.5.1 散列索引 522
17.5.2 位圖索引 523
17.5.3 基於函數的索引 525
17.6 一些關於索引的一般性主題 526
17.6.1 邏輯索引與物理索引 526
17.6.2 索引創建 527
17.6.3 索引調優 528
17.6.4 與關繫和索引存儲相關的其他主題 529
17.7 關繫數據庫中的物理數據庫設計 530
17.7.1 影響物理數據庫設計的因素 530
17.7.2 物理數據庫設計決策 532
17.8 小結 533
復習題 534
練習題 534
選讀文獻 537
第8部分 查詢處理和優化
第18章 查詢處理的策略 541
18.1 將SQL查詢轉換成關繫代數和其他運算符 543
18.2 外排序算法 545
18.3 選擇運算的算法 547
18.3.1 選擇運算的實現選項 547
18.3.2 合取選擇的搜索方法 549
18.3.3 析取選擇的搜索方法 550
18.3.4 估算條件的選擇度 551
18.4 實現連接運算 552
18.4.1 實現連接運算的方法 552
18.4.2 緩衝區空間和外層循環文件的選擇如何影響嵌套循環連接的性能 555
18.4.3 連接選擇因子如何影響連接性能 556
18.4.4 分區-散列連接的一般情況 557
18.4.5 混合散列連接 558
18.5 投影和集合運算的算法 559
18.6 實現聚合運算和不同類型的連接 561
18.6.1 實現聚合運算 561
18.6.2 實現不同類型的連接 562
18.7 使用流水線組合運算 563
18.8 查詢處理的並行算法 565
18.8.1 運算符級並行性 566
18.8.2 查詢內的並行性 568
18.8.3 查詢間的並行性 568
18.9 小結 569
復習題 569
練習題 570
選讀文獻 570
第19章 查詢優化 571
19.1 查詢樹和查詢優化的啟發式規則 571
19.1.1 查詢樹和查詢圖的表示法 572
19.1.2 查詢樹的啟發式優化 573
19.2 查詢執行計劃的選擇 579
19.2.1 查詢求值的替代方法 579
19.2.2 嵌套子查詢優化 580
19.2.3 子查詢(視圖)合並轉換 581
19.2.4 物化視圖 583
19.3 在基於代價的優化中使用選擇度 586
19.3.1 查詢執行的代價成分 587
19.3.2 代價函數中使用的目錄信息 588
19.3.3 直方圖 588
19.4 選擇運算的代價函數 589
19.5 連接運算的代價函數 592
19.5.1 半連接和反連接的連接選擇度和連接基數 594
19.5.2 基於代價公式的連接優化的示例 595
19.5.3 多關繫查詢和連接順序選擇 596
19.5.4 物理優化 598
19.5.5 連接順序的動態編程方法 598
19.6 說明基於代價的查詢優化的示例 600
19.7 與查詢優化相關的額外問題 601
19.7.1 顯示繫統的查詢執行計劃 602
19.7.2 其他運算的大小估算 602
19.7.3 計劃緩存 603
19.7.4 前k個結果優化 603
19.8 數據倉庫中的查詢優化的示例 604
19.9 Oracle中的查詢優化概述 606
19.9.1 物理優化器 606
19.9.2 全局查詢優化器 606
19.9.3 自適應優化 607
19.9.4 數組處理 607
19.9.5 提示 608
19.9.6 存儲提綱 608
19.9.7 SQL計劃管理 608
19.10 語義查詢優化 609
19.11 小結 610
復習題 610
練習題 611
選讀文獻 611
第9部分 事務處理、並發控制和恢復
第20章 事務處理概念和理論簡介 615
20.1 事務處理簡介 615
20.1.1 單用戶繫統與多用戶繫統 616
20.1.2 事務、數據庫項、讀寫操作和DBMS緩衝區 616
20.1.3 為什麼需要並發控制 618
20.1.4 為什麼需要恢復 620
20.2 事務和繫統概念 621
20.2.1 事務狀態及額外的操作 621
20.2.2 繫統日志 622
20.2.3 事務的提交點 623
20.2.4 特定於DBMS的緩衝區替換策略 624
20.3 事務的理想性質 625
20.4 基於可恢復性描述調度的特征 626
20.4.1 事務的調度(歷史) 626
20.4.2 基於可恢復性描述調度的特征 627
20.5 基於可串行化描述調度的特征 629
20.5.1 串行、非串行和衝突-可串行化調度 629
20.5.2 調度的可串行化測試 632
20.5.3 如何將可串行化用於並發控制 635
20.5.4 視圖等價和視圖可串行化 636
20.5.5 其他類型的調度等價性 637
20.6 SQL中的事務支持 637
20.7 小結 639
復習題 640
練習題 641
選讀文獻 642
第21章 並發控制技術 643
21.1 並發控制的兩階段鎖定技術 643
21.1.1 鎖類型和繫統鎖表 644
21.1.2 通過兩階段鎖定保證可串行化 647
21.1.3 處理死鎖和饑餓 650
21.2 基於時間戳排序的並發控制 653
21.2.1 時間戳 653
21.2.2 並發控制的時間戳排序算法 653
21.3 多版本並發控制技術 655
21.3.1 基於時間戳排序的多版本技術 655
21.3.2 使用驗證鎖的多版本兩階段鎖定 656
21.4 驗證(樂觀)技術和快照隔離並發控制 657
21.4.1 基於驗證(樂觀)的並發控制 657
21.4.2 基於快照隔離的並發控制 658
21.5 數據項的粒度和多粒度鎖定 659
21.5.1 鎖定的粒度級別考慮 659
21.5.2 多粒度級別鎖定 660
21.6 在索引中使用鎖進行並發控制 662
21.7 其他並發控制問題 663
21.7.1 插入、刪除和幻像記錄 663
21.7.2 交互式事務 664
21.7.3 鎖存器 664
21.8 小結 665
復習題 665
練習題 666
選讀文獻 667
第22章 數據庫恢復技術 668
22.1 恢復概念 668
22.1.1 恢復概述和恢復算法的分類 668
22.1.2 磁盤塊的高速緩存(緩衝) 669
22.1.3 預寫式日志記錄、竊取/非竊取和強制/非強制 670
22.1.4 繫統日志中的檢查點和模糊檢查點 672
22.1.5 事務回滾和級聯回滾 672
22.1.6 不會影響數據庫的事務動作 674
22.2 基於延遲更新的NO-UNDO/REDO恢復 674
22.3 基於即時更新的恢復技術 677
22.4 鏡像分頁 678
22.5 ARIES恢復算法 679
22.6 多數據庫繫統中的恢復 682
22.7 數據庫備份和災難性故障恢復 683
22.8 小結 683
復習題 684
練習題 685
選讀文獻 687
第10部分 分布式數據庫、NOSQL繫統和大數據
第23章 分布式數據庫概念 691
23.1 分布式數據庫概念 692
23.1.1 DDB的構成 692
23.1.2 透明性 692
23.1.3 可用性和可靠性 693
23.1.4 可伸縮性和分區容錯性 694
23.1.5 自治性 694
23.1.6 分布式數據庫的優點 695
23.2 分布式數據庫設計中的數據分段、復制和分配技術 695
23.2.1 數據分段和分片 696
23.2.2 數據復制和分配 698
23.2.3 分段、分配和復制的示例 698
23.3 分布式數據庫中的並發控制和恢復概述 701
23.3.1 基於數據項的標識副本的分布式並發控制 702
23.3.2 基於投票的分布式並發控制 703
23.3.3 分布式恢復 704
23.4 分布式數據庫中的事務管理概述 704
23.4.1 兩階段提交協議 705
23.4.2 三階段提交協議 705
23.4.3 事務管理的操作繫統支持 705
23.5 分布式數據庫中的查詢處理和優化 706
23.5.1 分布式查詢處理 706
23.5.2 分布式查詢處理的數據傳輸代價 706
23.5.3 使用半連接的分布式查詢處理 708
23.5.4 查詢和更新分解 709
23.6 分布式數據庫繫統的類型 711
23.7 分布式數據庫架構 713
23.7.1 並行架構與分布式架構 714
23.7.2 純粹的分布式數據庫的通用架構 715
23.7.3 聯邦式數據庫模式架構 716
23.7.4 三層客戶-服務器架構概述 717
23.8 分布式目錄管理 718
23.9 小結 719
復習題 720
練習題 721
選讀文獻 722
第24章 NOSQL數據庫和大數據存儲繫統 725
24.1 NOSQL繫統簡介 725
24.1.1 NOSQL繫統的出現 725
24.1.2 NOSQL繫統的特征 726
24.1.3 NOSQL繫統的類別 728
24.2 CAP定理 729
24.3 基於文檔的NOSQL繫統和
MongoDB 730
24.3.1 MongoDB數據模型 730
24.3.2 MongoDB CRUD操作 733
24.3.3 MongoDB分布式繫統特征 733
24.4 NOSQL鍵-值存儲 735
24.4.1 DynamoDB概述 735
24.4.2 Voldemort鍵-值分布式數據存儲 736
24.4.3 其他鍵-值存儲的示例 738
24.5 基於列或寬列NOSQL繫統 739
24.5.1 Hbase數據模型和版本化 739
24.5.2 Hbase CRUD操作 741
24.5.3 Hbase存儲和分布式繫統概念 741
24.6 NOSQL圖形數據庫和Neo4j 742
24.6.1 Neo4j數據模型 742
24.6.2 Neo4j的Cypher查詢語言 745
24.6.3 Neo4j接口和分布式繫統特征 746
24.7 小結 747
復習題 747
選讀文獻 748
第25章 基於MapReduce和Hadoop的大數據技術 749
25.1 什麼是大數據 751
25.2 MapReduce和Hadoop簡介 753
25.2.1 歷史背景 753
25.2.2 MapReduce 754
25.2.3 Hadoop版本 757
25.3 Hadoop分布式文件繫統(HDFS) 757
25.3.1 HDFS簡介 757
25.3.2 HDFS的架構 758
25.3.3 HDFS中的文件I/O操作和副本管理 759
25.3.4 HDFS可伸縮性 760
25.3.5 Hadoop生態繫統 761
25.4 MapReduce:額外的細節 762
25.4.1 MapReduce運行時環境 762
25.4.2 示例:在MapReduce中實現連接 764
25.4.3 Apache Hive 767
25.4.4 Hadoop/MapReduce技術的優點 770
25.5 Hadoop v2的別名YARN 770
25.5.1 YARN背後的基本原理