內容簡介
本書從NoSQL的相關理論開始,深入淺出地探討了NoSQL核心的架構模式、解決方案和一些高級主題,內容循序漸進,從理論回歸於實踐。
全書分為4個部分。首部分介紹NoSQL的相關理論,如CAP理論、BASE理論、狼禁廈一致性散列算法等;第二部分介紹NoSQL核心的架構模式—鍵值存儲、圖存儲、列族存儲、文檔存儲;第三部分展現一些常用的NoSQL解決方案,如HA、全文搜尋等;後一部分討論NoSQL的一些高級主題,如函式式編程。
全書理論與實踐並重,每章後面還有通俗的案例。對於NoSQL的初學者來說,不失為一本了解NoSQL技術全貌的讀物。
圖書目錄
第一部分 了解NoSQL
第1章 NoSQL:明智的選擇 2
1.1 什麼是NoSQL 3
1.2 NoSQL的商業驅動 4
1.2.1 容量 5
1.2.2 速度 5
1.2.3 敏捷性 6
1.3 NoSQL案例研究 6
1.3.1 案例研究:LiveJournal的Memcache技術 7
1.3.2 案例研究:Google的MapReduce——利用商用硬體生成搜尋索引 7
1.3.3 案例研究:Google的Bigtable——一個有著數十億行和百萬列的表 8
1.3.4 案例研究:亞馬遜的Dynamo—每天24小時接收訂單 9
1.3.5 案例研究:MarkLogic 9
1.3.6 實踐 10
1.4 小結 10
第2章 NoSQL概念 12
2.1 保持組件簡單以促進重用 12
2.2 將套用分層以簡化設戒判籃計 14
2.3 策略地使用RAM、SSD和磁碟提升性能 17
2.4 使用一致性散列算法維護當前的快取 18
2.5 比較ACID和BASE——兩種可靠的
資料庫事務方法 19
2.5.1 RDBMS的事務控制——ACID 21
2.5.2 非RDBMS的事務控制—BASE 22
2.6 通過資料庫分片獲得水平擴展能力 23
2.7 基於Brewer的CAP定理進行權衡 25
2.8 實踐 26
2.9 小結 27
2.10 延伸閱讀 27
第二全催部再檔連蒸分 資料庫模式
第3章 基礎數據架構模式 30
3.1 什麼是數據架構模式 31
3.2 理解套用於RDBMS的行存儲設計模式 31
3.2.1 行存儲如何工作少盼滲榜 32
3.2.2 行存儲的演變 33
3.2.3 分析行存儲模式的優點和缺點 34
3.3 示例:對銷售訂單進行連線操作 35
3.4 回顧RDBMS實現的特性 36
3.4.1 RDBMS事務 37
3.4.2 固定的數據定義語言和強類型的列 38
3.4.3 通過RDBMS視圖保證安全並進行訪問控制 39
3.4.4 RDBMS的複製和同步 39
3.5 通過OLAP、數據倉庫和商業智慧型系統對歷史數據進行分析 41
3.5.1 數據如何從操作型系統流入分析型系統 42
3.5.2 熟悉OLAP的概念 44
3.5.3 通過匯總生成專項報表 45
3.6 將高可用性和以讀為主的系統一體化 達踏協46
3.7 在修改控制系統和數據同步中使用散列樹 47
3.8 實踐 49
3.9 小結 49
3.10 延伸閱讀 50
第4章 NoSQL數據架構模式 51
4.1 鍵值存儲 52
4.1.1 什麼是鍵值存儲 52
4.1.2 使用鍵值存儲的好處 54
4.1.3 使用鍵值存儲 56
4.1.4 使用案例:用鍵值存儲保存網頁 59
4.1.5 使用案例:亞馬遜項地妹簡單存儲服務(S3) 59
4.2 圖存儲 60
4.2.1 圖存儲概述 60
4.2.2 用RDF標準來連線外部數據 62
4.2.3 圖存儲的使用案例 63
4.3 列族(Bigtable)存儲 68
4.3.1 列族存儲基礎 69
4.3.2 理解列族存儲的鍵 69
4.3.3 列族存儲的優點 70
4.3.4 案例研究:在Bigtable中存儲分析信息 72
4.3.5 案例研究:Google地圖用Bigtable存儲地理信息 72
4.3.6 案例研究:使用列族存儲用戶偏好信息 73
4.4 文檔存儲 73
4.4.1 文檔存儲基礎 74
4.4.2 文檔集合 74
4.4.3 套用集合 75
4.4.4 文檔存儲的API 75
4.4.5 文檔存儲的實現 76
4.4.6 案例研究:MongoDB和廣告伺服器 76
4.4.7 案例研究:大型對象資料庫CouchDB 77
4.5 NoSQL架構模式的變體 78
4.5.1 定製RAM和SSD存儲 78
4.5.2 分散式存儲 78
4.5.3 分組的對象 79
4.6 小結 80
4.7 延伸閱讀 81
5.1 什麼是原生XML資料庫 83
5.2 用原生XML資料庫構建套用 85
5.2.1 載入數據可以像拖曳那樣簡單 86
5.2.2 使用集合來組織XML文檔 87
5.2.3 使用XPath運用簡單的查詢轉換複雜的數據 89
5.2.4 用XQuery轉換數據 91
5.2.5 用XQuery更新文檔 93
5.2.6 XQuery全文搜尋標準 94
5.3 在原生XML資料庫中套用XML標準 94
5.4 用XML Schema和Schematron設計和驗證數據 96
5.4.1 XML Schema 96
5.4.2 使用Schematron檢查文檔規則 97
5.5 用自定義模組擴展XQuery 98
5.6 案例研究:在美國國務院歷史學家辦公室使用NoSQL 98
5.7 案例研究:使用MarkLogic管理金融衍生品 102
5.7.1 為什麼RDBMS難以存儲金融衍生品 102
5.7.2 一個投資銀行從20個RDBMS轉換到1個原生XML資料庫 102
5.7.3 遷移至原生XML文檔存儲的商業好處 104
5.7.4 項目成果 104
5.8 小結 105
5.9 延伸閱讀 105
第三部分 NoSQL解決方案
第6章 用NoSQL管理大數據 108
6.1 什麼才是大數據解決方案 109
6.2 線性擴展數據中心 112
6.3 理解線性可擴展性和表現力 113
6.4 了解大數據問題的類型 114
6.5 使用無共享架構分析大數據 116
6.6 選擇分散式模型:主從模型與對等模型 117
6.7 在分散式系統上使用MapReduce處理數據 118
6.7.2 MapReduce怎樣做到高效處理大數據問題 121
6.8 NoSQL系統處理大數據問題的4種方式 122
6.8.1 分發查詢到數據,而非數據到查詢 122
6.8.2 使用散列環在集群中均勻分發數據 122
6.8.3 使用複製擴展讀取性能 123
6.8.4 使資料庫將查詢均衡地分發到數據節點 124
6.9 案例研究:使用ApacheFlume處理事件日誌 125
6.9.1 事件日誌數據分析的挑戰 125
6.9.2 Apache Flume蒐集分散式事件日誌的方法 126
6.9.3 延伸思考 127
6.10 案例研究:計算機輔助發現醫療保險欺詐 128
6.10.1 什麼是醫療保險欺詐檢測 128
6.10.2 使用圖和定製的記憶體共享硬體檢測醫療保險欺詐 129
6.11 小結 130
6.12 延伸閱讀 131
第7章 用NoSQL搜尋獲取信息 132
7.1 什麼是NoSQL搜尋 132
7.2 搜尋分類 133
7.2.1 布爾搜尋、全文關鍵字搜尋和結構化搜尋的比較 133
7.2.2 測試常見搜尋類型 134
7.3 提高NoSQL搜尋效率的策略和方法 135
7.4 使用文檔結構提升搜尋質量 137
7.5 搜尋質量量化 139
7.6 本地索引與遠程搜尋服務 139
7.7 案例研究:使用MapReduce建立倒排索引 141
7.8 案例研究:搜尋技術文檔 142
7.8.1 什麼是技術文檔搜尋 142
7.8.2 在NoSQL文檔存儲中保留文檔結構 143
7.9 案例研究:搜尋領域語言—可檢索性和重用性 144
7.10 實踐 145
7.11 小結 146
7.12 延伸閱讀 146
第8章 用NoSQL構建高可用的解決方案 148
8.1 高可用NoSQL資料庫的定義 148
8.2 量化NoSQL資料庫的可用性 149
8.2.2 預測系統可用性 151
8.2.3 實踐 152
8.3 NoSQL系統的高可用性策略 153
8.3.1 使用
負載均衡器將流量轉向到最空閒的節點 153
8.3.2 結合高可用分散式檔案系統和NoSQL資料庫 154
8.3.3 案例研究:將HDFS作為一個高可用的檔案系統存儲主數據 155
8.3.4 使用託管的NoSQL服務 156
8.3.5 案例研究:使用亞馬遜的DynamoDB作為高可用數據存儲 157
8.4 案例研究:使用ApacheCassandra作為高可用的列族存儲 158
8.4.1 在Cassandra中配置數據和節點間的映射 159
8.5 案例研究:使用Couchbase作為高可用文檔資料庫 161
8.6 小結 163
8.7 延伸閱讀 163
第9章 用NoSQL提升敏捷性 165
9.1 軟體敏捷性的定義 165
9.2 量化敏捷性 169
9.4 案例研究:使用XRX管理複雜表單 172
9.4.1 什麼是複雜業務表單 173
9.4.2 用XRX替換客戶端JavaScript和對象關係映射 173
9.4.3 理解XRX對敏捷性的影響 176
9.5 小結 177
9.6 延伸閱讀 177
第四部分 高級主題
第10章 NoSQL與函式式編程 180
10.1 什麼是函式式編程 181
10.1.1 指令式編程就是管理程式狀態 181
10.1.2 函式式編程是沒有副作用的並行轉化 183
10.1.3 比較指令式編程和函式式編程的擴展性 186
10.1.4 使用引用透明避免重複計算 187
10.2 案例研究:用NetKernel最佳化網頁內容組裝 188
10.2.1 組裝嵌套內容,追蹤組件依賴 188
10.2.2 用NetKernel最佳化組件再生成 189
10.3 函式式程式語言示例 191
10.4 完成指令式編程到函式式的編程轉變 192
10.4.1 使用函式作為函式的參數 192
10.4.2 使用遞歸處理非結構化文檔數據 192
10.4.3 使用不可變變數而非可變變數 192
10.4.4 去除循環和條件語句 193
10.4.5 新的思維方式:從狀態記錄到轉化隔離 193
10.4.6 質量、校驗和一致性單元測試 194
10.4.7 函式式編程的並發 194
10.5 案例研究:用Erlang構建NoSQL系統 194
10.6 實踐 197
10.7 小結 198
10.8 延伸閱讀 198
第11章 安全:保護NoSQL系統中的數據 200
11.1 NoSQL資料庫的一種安全模型 201
11.1.1 使用服務減少資料庫內部的安全性需求 202
11.1.2 使用數據倉庫和OLAP減少資料庫內部的安全性需求 203
11.1.3 套用級安全措施和資料庫級安全措施的收益總結 203
11.2 收集安全需求 204
11.2.1 認證 205
11.2.2 授權 207
11.2.3 審查和日誌記錄 210
11.2.4 加密和數字簽名 211
11.2.5 保護公開網站免受
拒絕服務攻擊和注入攻擊 212
11.3 案例研究:鍵值存儲的訪問控制—亞馬遜的S3 213
11.3.1 身份和訪問管理(IAM) 214
11.3.2 訪問控制列表(ACL) 214
11.3.3 桶策略 214
11.4 案例研究:在Apache Accumulo中使用鍵可見性技術 215
11.5 案例研究:在安全發布流程中使用MarkLogic的RBAC模型 216
11.5.1 使用MarkLogic的RBAC安全模型保護文檔 217
11.5.2 在安全出版中使用MarkLogic 218
11.5.3 MarkLogic的安全模型的優勢 218
11.6 小結 219
11.7 延伸閱讀 219
第12章 選擇合適的NoSQL解決方案 221
12.1 什麼是架構利弊分析 222
12.2 資料庫架構選型團隊的組成變化 223
12.2.1 選擇合適的團隊 224
12.2.2 考慮經驗偏好 224
12.2.3 雇用外部諮詢師 225
12.3 架構權衡分析步驟 225
12.4 解構分析:質量樹 228
12.4.1 質量屬性樣例 229
12.4.2 評估混合架構和雲架構 231
12.5 與利益系相關者溝通結果 231
12.5.1 用質量樹作為導航圖 232
12.5.2 實踐 233
12.6 找到合適的驗證架構的試點項目 235
12.7 小結 236
12.8 延伸閱讀 237
3.4.3 通過RDBMS視圖保證安全並進行訪問控制 39
3.4.4 RDBMS的複製和同步 39
3.5 通過OLAP、數據倉庫和商業智慧型系統對歷史數據進行分析 41
3.5.1 數據如何從操作型系統流入分析型系統 42
3.5.2 熟悉OLAP的概念 44
3.5.3 通過匯總生成專項報表 45
3.6 將高可用性和以讀為主的系統一體化 46
3.7 在修改控制系統和數據同步中使用散列樹 47
3.8 實踐 49
3.9 小結 49
3.10 延伸閱讀 50
第4章 NoSQL數據架構模式 51
4.1 鍵值存儲 52
4.1.1 什麼是鍵值存儲 52
4.1.2 使用鍵值存儲的好處 54
4.1.3 使用鍵值存儲 56
4.1.4 使用案例:用鍵值存儲保存網頁 59
4.1.5 使用案例:亞馬遜簡單存儲服務(S3) 59
4.2 圖存儲 60
4.2.1 圖存儲概述 60
4.2.2 用RDF標準來連線外部數據 62
4.2.3 圖存儲的使用案例 63
4.3 列族(Bigtable)存儲 68
4.3.1 列族存儲基礎 69
4.3.2 理解列族存儲的鍵 69
4.3.3 列族存儲的優點 70
4.3.4 案例研究:在Bigtable中存儲分析信息 72
4.3.5 案例研究:Google地圖用Bigtable存儲地理信息 72
4.3.6 案例研究:使用列族存儲用戶偏好信息 73
4.4 文檔存儲 73
4.4.1 文檔存儲基礎 74
4.4.2 文檔集合 74
4.4.3 套用集合 75
4.4.4 文檔存儲的API 75
4.4.5 文檔存儲的實現 76
4.4.6 案例研究:MongoDB和廣告伺服器 76
4.4.7 案例研究:大型對象資料庫CouchDB 77
4.5 NoSQL架構模式的變體 78
4.5.1 定製RAM和SSD存儲 78
4.5.2 分散式存儲 78
4.5.3 分組的對象 79
4.6 小結 80
4.7 延伸閱讀 81
5.1 什麼是原生XML資料庫 83
5.2 用原生XML資料庫構建套用 85
5.2.1 載入數據可以像拖曳那樣簡單 86
5.2.2 使用集合來組織XML文檔 87
5.2.3 使用XPath運用簡單的查詢轉換複雜的數據 89
5.2.4 用XQuery轉換數據 91
5.2.5 用XQuery更新文檔 93
5.2.6 XQuery全文搜尋標準 94
5.3 在原生XML資料庫中套用XML標準 94
5.4 用XML Schema和Schematron設計和驗證數據 96
5.4.1 XML Schema 96
5.4.2 使用Schematron檢查文檔規則 97
5.5 用自定義模組擴展XQuery 98
5.6 案例研究:在美國國務院歷史學家辦公室使用NoSQL 98
5.7 案例研究:使用MarkLogic管理金融衍生品 102
5.7.1 為什麼RDBMS難以存儲金融衍生品 102
5.7.2 一個投資銀行從20個RDBMS轉換到1個原生XML資料庫 102
5.7.3 遷移至原生XML文檔存儲的商業好處 104
5.7.4 項目成果 104
5.8 小結 105
5.9 延伸閱讀 105
第三部分 NoSQL解決方案
第6章 用NoSQL管理大數據 108
6.1 什麼才是大數據解決方案 109
6.2 線性擴展數據中心 112
6.3 理解線性可擴展性和表現力 113
6.4 了解大數據問題的類型 114
6.5 使用無共享架構分析大數據 116
6.6 選擇分散式模型:主從模型與對等模型 117
6.7 在分散式系統上使用MapReduce處理數據 118
6.7.2 MapReduce怎樣做到高效處理大數據問題 121
6.8 NoSQL系統處理大數據問題的4種方式 122
6.8.1 分發查詢到數據,而非數據到查詢 122
6.8.2 使用散列環在集群中均勻分發數據 122
6.8.3 使用複製擴展讀取性能 123
6.8.4 使資料庫將查詢均衡地分發到數據節點 124
6.9 案例研究:使用ApacheFlume處理事件日誌 125
6.9.1 事件日誌數據分析的挑戰 125
6.9.2 Apache Flume蒐集分散式事件日誌的方法 126
6.9.3 延伸思考 127
6.10 案例研究:計算機輔助發現醫療保險欺詐 128
6.10.1 什麼是醫療保險欺詐檢測 128
6.10.2 使用圖和定製的記憶體共享硬體檢測醫療保險欺詐 129
6.11 小結 130
6.12 延伸閱讀 131
第7章 用NoSQL搜尋獲取信息 132
7.1 什麼是NoSQL搜尋 132
7.2 搜尋分類 133
7.2.1 布爾搜尋、全文關鍵字搜尋和結構化搜尋的比較 133
7.2.2 測試常見搜尋類型 134
7.3 提高NoSQL搜尋效率的策略和方法 135
7.4 使用文檔結構提升搜尋質量 137
7.5 搜尋質量量化 139
7.6 本地索引與遠程搜尋服務 139
7.7 案例研究:使用MapReduce建立倒排索引 141
7.8 案例研究:搜尋技術文檔 142
7.8.1 什麼是技術文檔搜尋 142
7.8.2 在NoSQL文檔存儲中保留文檔結構 143
7.9 案例研究:搜尋領域語言—可檢索性和重用性 144
7.10 實踐 145
7.11 小結 146
7.12 延伸閱讀 146
第8章 用NoSQL構建高可用的解決方案 148
8.1 高可用NoSQL資料庫的定義 148
8.2 量化NoSQL資料庫的可用性 149
8.2.2 預測系統可用性 151
8.2.3 實踐 152
8.3 NoSQL系統的高可用性策略 153
8.3.1 使用
負載均衡器將流量轉向到最空閒的節點 153
8.3.2 結合高可用分散式檔案系統和NoSQL資料庫 154
8.3.3 案例研究:將HDFS作為一個高可用的檔案系統存儲主數據 155
8.3.4 使用託管的NoSQL服務 156
8.3.5 案例研究:使用亞馬遜的DynamoDB作為高可用數據存儲 157
8.4 案例研究:使用ApacheCassandra作為高可用的列族存儲 158
8.4.1 在Cassandra中配置數據和節點間的映射 159
8.5 案例研究:使用Couchbase作為高可用文檔資料庫 161
8.6 小結 163
8.7 延伸閱讀 163
第9章 用NoSQL提升敏捷性 165
9.1 軟體敏捷性的定義 165
9.2 量化敏捷性 169
9.4 案例研究:使用XRX管理複雜表單 172
9.4.1 什麼是複雜業務表單 173
9.4.2 用XRX替換客戶端JavaScript和對象關係映射 173
9.4.3 理解XRX對敏捷性的影響 176
9.5 小結 177
9.6 延伸閱讀 177
第四部分 高級主題
第10章 NoSQL與函式式編程 180
10.1 什麼是函式式編程 181
10.1.1 指令式編程就是管理程式狀態 181
10.1.2 函式式編程是沒有副作用的並行轉化 183
10.1.3 比較指令式編程和函式式編程的擴展性 186
10.1.4 使用引用透明避免重複計算 187
10.2 案例研究:用NetKernel最佳化網頁內容組裝 188
10.2.1 組裝嵌套內容,追蹤組件依賴 188
10.2.2 用NetKernel最佳化組件再生成 189
10.3 函式式程式語言示例 191
10.4 完成指令式編程到函式式的編程轉變 192
10.4.1 使用函式作為函式的參數 192
10.4.2 使用遞歸處理非結構化文檔數據 192
10.4.3 使用不可變變數而非可變變數 192
10.4.4 去除循環和條件語句 193
10.4.5 新的思維方式:從狀態記錄到轉化隔離 193
10.4.6 質量、校驗和一致性單元測試 194
10.4.7 函式式編程的並發 194
10.5 案例研究:用Erlang構建NoSQL系統 194
10.6 實踐 197
10.7 小結 198
10.8 延伸閱讀 198
第11章 安全:保護NoSQL系統中的數據 200
11.1 NoSQL資料庫的一種安全模型 201
11.1.1 使用服務減少資料庫內部的安全性需求 202
11.1.2 使用數據倉庫和OLAP減少資料庫內部的安全性需求 203
11.1.3 套用級安全措施和資料庫級安全措施的收益總結 203
11.2 收集安全需求 204
11.2.1 認證 205
11.2.2 授權 207
11.2.3 審查和日誌記錄 210
11.2.4 加密和數字簽名 211
11.2.5 保護公開網站免受
拒絕服務攻擊和注入攻擊 212
11.3 案例研究:鍵值存儲的訪問控制—亞馬遜的S3 213
11.3.1 身份和訪問管理(IAM) 214
11.3.2 訪問控制列表(ACL) 214
11.3.3 桶策略 214
11.4 案例研究:在Apache Accumulo中使用鍵可見性技術 215
11.5 案例研究:在安全發布流程中使用MarkLogic的RBAC模型 216
11.5.1 使用MarkLogic的RBAC安全模型保護文檔 217
11.5.2 在安全出版中使用MarkLogic 218
11.5.3 MarkLogic的安全模型的優勢 218
11.6 小結 219
11.7 延伸閱讀 219
第12章 選擇合適的NoSQL解決方案 221
12.1 什麼是架構利弊分析 222
12.2 資料庫架構選型團隊的組成變化 223
12.2.1 選擇合適的團隊 224
12.2.2 考慮經驗偏好 224
12.2.3 雇用外部諮詢師 225
12.3 架構權衡分析步驟 225
12.4 解構分析:質量樹 228
12.4.1 質量屬性樣例 229
12.4.2 評估混合架構和雲架構 231
12.5 與利益系相關者溝通結果 231
12.5.1 用質量樹作為導航圖 232
12.5.2 實踐 233