目 錄?Contents譯者序前 言致 謝引 言第一部分 入 門第1章 用不同的數(shù)據(jù)庫應對不同的需求 21.1 關系型數(shù)據(jù)庫的設計 31.2 早期的數(shù)據(jù)管理系統(tǒng) 41.2.1 平面文件數(shù)據(jù)管理系統(tǒng) 41.2.2 分層數(shù)據(jù)模型系統(tǒng) 71.2.3 網絡數(shù)據(jù)管理系統(tǒng) 91.2.4 早期數(shù)據(jù)管理系統(tǒng)小結 111.3 引發(fā)變革的關系型數(shù)據(jù)庫 111.4 催生NoSQL數(shù)據(jù)庫(非單純的SQL數(shù)據(jù)庫/非SQL數(shù)據(jù)庫)的動因 181.4.1 可伸縮性 181.4.2 成本開銷 191.4.3 靈活性 191.4.4 可用性 201.5 小結 201.6 案例研究 211.7 復習題 211.8 引用資料 221.9 參考書目 22第2章 NoSQL數(shù)據(jù)庫的種類 232.1 分布式數(shù)據(jù)庫的數(shù)據(jù)管理 242.1.1 持久地存儲數(shù)據(jù) 252.1.2 維護數(shù)據(jù)的一致性 252.1.3 確保數(shù)據(jù)的可用性 262.1.4 在響應時間、一致性與持久性之間尋求平衡 292.1.5 CAP定理:一致性、可用性及分區(qū)保護性 312.2 ACID與BASE 322.2.1 ACID:原子性、一致性、隔離性、持久性 332.2.2 BASE:基本可用、軟狀態(tài)、最終一致 332.2.3 最終一致性的類型 342.3 四種NoSQL數(shù)據(jù)庫類型 352.3.1 鍵值對數(shù)據(jù)庫 362.3.2 文檔數(shù)據(jù)庫 402.3.3 列族數(shù)據(jù)庫 422.3.4 圖數(shù)據(jù)庫 432.4 小結 452.5 復習題 462.6 引用資料 472.7 參考書目 47第二部分 鍵值數(shù)據(jù)庫第3章 鍵值數(shù)據(jù)庫簡介 503.1 從數(shù)組到鍵值數(shù)據(jù)庫的演變 513.1.1 數(shù)組(帶著輔助輪的鍵值數(shù)據(jù)存儲機制) 513.1.2 關聯(lián)數(shù)組(拿掉輔助輪的鍵值數(shù)據(jù)存儲機制) 523.1.3 緩存(加裝了齒輪的自行車) 533.1.4 內存和磁盤中的鍵值數(shù)據(jù)庫(從自行車到機動車) 553.2 鍵值數(shù)據(jù)庫的重要特性 563.2.1 簡潔:開發(fā)者不需要設計復雜的數(shù)據(jù)模型 563.2.2 速度:越快越好 573.2.3 易于縮放:隨時應對訪問量的變化 593.3 鍵:不只是無意義的標識符 633.3.1 如何構造鍵名 633.3.2 通過鍵來定位相關的值 653.4 值:存放任意數(shù)據(jù) 683.4.1 值不一定要有明確的類型 683.4.2 對值進行搜索時的一些限制 693.5 小結 703.6 復習題 713.7 引用資料 713.8 參考書目 72第4章 鍵值數(shù)據(jù)庫的術語 734.1 與鍵值數(shù)據(jù)庫的數(shù)據(jù)建模有關的術語 744.1.1 鍵 754.1.2 值 774.1.3 命名空間 774.1.4 分區(qū) 784.1.5 分區(qū)鍵 804.1.6 無綱要的模型 804.2 與鍵值數(shù)據(jù)庫的架構有關的術語 814.2.1 集群 814.2.2 環(huán) 824.2.3 復制 844.3 與鍵值數(shù)據(jù)庫的實現(xiàn)有關的術語 844.3.1 哈希函數(shù) 844.3.2 碰撞 864.3.3 壓縮 864.4 小結 874.5 復習題 874.6 引用資料 88第5章 鍵值數(shù)據(jù)庫的設計 895.1 鍵的設計與分區(qū) 905.1.1 鍵名應該遵循命名約定 905.1.2 設計良好的鍵名,以簡化程序的代碼 915.1.3 處理位于某個范圍內的值 925.1.4 設計鍵名時必須考慮實現(xiàn)層面的限制 935.1.5 如何根據(jù)鍵名來分區(qū) 945.2 設計結構化的值 955.2.1 結構化的數(shù)據(jù)類型有助于降低延遲 955.2.2 過于龐大的值可能會降低讀取操作和寫入操作的性能 975.3 鍵值數(shù)據(jù)庫的局限 995.3.1 只能通過鍵來查詢數(shù)據(jù) 1005.3.2 鍵值數(shù)據(jù)庫不支持查詢位于某個范圍內的值 1005.3.3 不支持像關系型數(shù)據(jù)庫所使用的那種SQL式標準查詢語言 1015.4 適用于鍵值數(shù)據(jù)庫的設計模式 1015.4.1 TTL鍵 1025.4.2 模擬關系型數(shù)據(jù)庫的表格 1035.4.3 聚合 1045.4.4 原子聚合 1055.4.5 可枚舉的鍵 1065.4.6 索引 1075.5 小結 1085.6 案例研究:用鍵值數(shù)據(jù)庫管理移動應用程序的配置 1085.7 復習題 1105.8 引用資料 111第三部分 文檔數(shù)據(jù)庫第6章 文檔數(shù)據(jù)庫簡介 1146.1 何謂文檔 1156.1.1 文檔沒有那么簡單 1156.1.2 文檔與鍵值對 1186.1.3 以集合的形式來管理多份文檔 1186.2 文檔數(shù)據(jù)庫無需定義顯式綱要 1256.3 文檔數(shù)據(jù)庫的基本操作 1276.3.1 向集合中插入文檔 1286.3.2 從集合中刪除文檔 1296.3.3 更新集合中的文檔 1306.3.4 從集合中獲取文檔 1316.4 小結 1326.5 復習題 1326.6 引用資料 133第7章 文檔數(shù)據(jù)庫的術語 1347.1 與文檔和集合有關的術語 1357.1.1 文檔 1357.1.2 集合 1377.1.3 嵌入式文檔 1377.1.4 無綱要的數(shù)據(jù)庫 1387.1.5 多形的綱要 1417.2 與分區(qū)類型有關的術語 1417.2.1 垂直分區(qū) 1427.2.2 水平分區(qū)或分片 1437.3 與數(shù)據(jù)建模及查詢處理有關的術語 1467.3.1 規(guī)范化 1467.3.2 去規(guī)范化 1487.3.3 查詢處理器 1487.4 小結 1497.5 復習題 1497.6 引用資料 150第8章 文檔數(shù)據(jù)庫的設計 1518.1 在規(guī)范化與去規(guī)范化之間求得平衡 1528.1.1 一對多關系 1538.1.2 多對多關系 1538.1.3 有時需要對多張表格執(zhí)行join操作 1548.1.4 在關系型數(shù)據(jù)庫中執(zhí)行join操作的開銷可能會比較大 1558.1.5 文檔數(shù)據(jù)庫的建模者應該怎樣做 1578.2 應對可變的文檔 1618.3 編制數(shù)量適中的索引 1648.3.1 讀取操作相對較多的應用程序 1648.3.2 寫入操作相對較多的應用程序 1648.4 為常見的關系建模 1668.4.1 文檔數(shù)據(jù)庫的一對多關系 1668.4.2 文檔數(shù)據(jù)庫的多對多關系 1668.4.3 為文檔數(shù)據(jù)庫中的層級關系建模 1688.5 小結 1698.6 案例研究:客戶的貨物清單 1708.6.1 是否使用嵌入式文檔 1718.6.2 選定所要編制的索引 1728.6.3 是否需要把各類清單分別放在不同的集合中 1728.7 復習題 1728.8 引用資料 173第四部分 列族數(shù)據(jù)庫第9章 列族數(shù)據(jù)庫簡介 1769.1 較早出現(xiàn)的列族數(shù)據(jù)庫:Google BigTable 1779.1.1 動態(tài)地控制列族中的列 1789.1.2 根據(jù)行ID、列名及時間戳來確定數(shù)據(jù)值 1799.1.3 控制數(shù)據(jù)的存儲位置 1799.1.4 同一行內的讀取和寫入行為都是原子操作 1809.1.5 數(shù)據(jù)行之間按順序排列 1809.2 列族數(shù)據(jù)庫與鍵值數(shù)據(jù)庫及文檔數(shù)據(jù)庫的異同 1819.2.1 列族數(shù)據(jù)庫與鍵值數(shù)據(jù)庫的異同 1829.2.2 列族數(shù)據(jù)庫與文檔數(shù)據(jù)庫的異同 1829.2.3 列族數(shù)據(jù)庫與關系型數(shù)據(jù)庫的對比 1839.3 列族數(shù)據(jù)庫所使用的架構 1869.3.1 HBase數(shù)據(jù)庫采用由多種節(jié)點所組成的架構 1869.3.2 Cassandra數(shù)據(jù)庫采用由對等節(jié)點所組成的架構 1879.3.3 依照Gossip協(xié)議來傳播各服務器的狀態(tài) 1889.3.4 用熱力學術語來談分布式數(shù)據(jù)庫為什么需要反熵 1899.3.5 通過提示移交機制,替發(fā)生故障的節(jié)點保留與寫入請求有關的信息 1909.4 列族數(shù)據(jù)庫的適用場合 1929.5 小結 1929.6 復習題 1939.7 引用資料 193第10章 列族數(shù)據(jù)庫的術語 19410.1 列族數(shù)據(jù)庫的基本組件 19510.1.1 鍵空間 19510.1.2 行鍵 19510.1.3 列 19610.1.4 列族 19610.2 實現(xiàn)列族數(shù)據(jù)庫所用的結構及相關流程 19710.2.1 列族數(shù)據(jù)庫的內部結構及配置參數(shù) 19810.2.2 分布式數(shù)據(jù)庫常用的術語:集群與分區(qū) 19810.2.3 列族數(shù)據(jù)庫的其他底層組件 19910.3 處理流程及協(xié)議 20310.3.1 復制 20310.3.2 反熵 20310.3.3 Gossip協(xié)議 20410.3.4 提示移交 20510.4 小結 20510.5 復習題 20610.6 引用資料 206第11章 列族數(shù)據(jù)庫的設計 20711.1 與設計數(shù)據(jù)表格有關的建議 20911.1.1 用去規(guī)范化來代替連接 20911.1.2 善用無值的列 21011.1.3 同時在列名和列值之中存儲數(shù)據(jù) 21111.1.4 用一個數(shù)據(jù)行來為一個實體建模 21111.1.5 設計行鍵時不要將大量操作分配給少數(shù)服務器 21211.1.6 維護適當數(shù)量的列值版本 21311.1.7 不要在列值中使用復雜的數(shù)據(jù)結構 21311.2 與編制索引有關的建議 21411.2.1 何時應該使用由列族數(shù)據(jù)庫系統(tǒng)自動管理的輔助索引 21511.2.2 何時應該用表格來創(chuàng)建并管理輔助索引 21711.3 應對大數(shù)據(jù)的工具 22011.3.1 萃取、轉置并加載數(shù)據(jù) 22011.3.2 分析大數(shù)據(jù) 22111.3.3 監(jiān)控大數(shù)據(jù)所用的工具 22411.4 小結 22411.5 案例研究:客戶數(shù)據(jù)分析 22511.6 復習題 22611.7 引用資料 227第五部分 圖 數(shù) 據(jù) 庫第12章 圖數(shù)據(jù)庫簡介 23012.1 什么是圖 23012.2 用圖對網絡關系進行建模 23112.2.1 對地理位置進行建模 23112.2.2 對傳染病進行建模 23212.2.3 對抽象和具體的實體進行建模 23312.2.4 對社交媒體進行建模 23412.3 圖數(shù)據(jù)庫的優(yōu)勢 23512.3.1 圖數(shù)據(jù)庫不需要執(zhí)行連接操作,因而可以更快地進行查詢 23512.3.2 建模過程較為簡單 23712.3.3 可以為實體之間的多種關系進行建模 23712.4 小結 23812.5 復習題 23812.6 引用資料 238第13章 圖數(shù)據(jù)庫的術語 23913.1 圖的元素 24013.1.1 頂點 24013.1.2 邊 24013.1.3 路徑 24213.1.4 自環(huán) 24213.2 圖的操作 24213.2.1 圖的并集 24313.2.2 圖的交集 24313.2.3 圖的遍歷 24313.3 圖和節(jié)點的屬性 24413.3.1 同構性 24413.3.2 階與尺寸 24513.3.3 度數(shù) 24513.3.4 接近中心性 24513.3.5 中介性 24613.4 圖的類型 24613.4.1 無向圖和有向圖 24713.4.2 流動網絡 24713.4.3 二分圖 24813.4.4 多重圖 24813.4.5 加權圖 24813.5 小結 24913.6 復習題 24913.7 引用資料 249第14章 圖數(shù)據(jù)庫的設計 25014.1 開始設計圖模型 25014.1.1 設計一個描述社交網絡的圖數(shù)據(jù)庫 25114.1.2 再次用查詢請求來引領模型設計 25414.2 對圖進行查詢 25514.2.1 Cypher:聲明式的查詢 25614.2.2 Gremlin:通過遍歷圖模型來進行查詢 25714.3 圖數(shù)據(jù)庫的設計技巧及注意事項 26014.3.1 用索引來縮短獲取數(shù)據(jù)的時間 26014.3.2 使用類型適當?shù)倪? 26014.3.3 遍歷圖模型時要注意循環(huán)路徑 26114.3.4 考慮圖數(shù)據(jù)庫的擴展問題 26214.4 小結 26314.5 案例研究:優(yōu)化運輸路線 26314.5.1 掌握用戶的需求 26314.5.2 設計一套圖模型分析方案 26314.6 復習題 26414.7 引用資料 265第六部分 選擇適合應用程序的數(shù)據(jù)庫第15章 如何選擇數(shù)據(jù)庫 26815.1 選擇NoSQL數(shù)據(jù)庫 26915.1.1 何時應該使用鍵值數(shù)據(jù)庫 27015.1.2 文檔數(shù)據(jù)庫的用例及適用場合 27015.1.3 列族數(shù)據(jù)庫的用例及適用場合 27115.1.4 圖數(shù)據(jù)庫的用例及適用場合 27215.2 將NoSQL數(shù)據(jù)庫與關系型數(shù)據(jù)庫結合起來使用 27315.3 小結 27415.4 復習題 27415.5 引用資料 274第七部分 附 錄附錄A 各章復習題的參考答案 278附錄B NoSQL數(shù)據(jù)庫列表 298術語表 303