第一部分 瞭解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章 原生XML數據庫 82
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.1 MapReduce和分布式文件係統 120
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.1 案例研究:亞馬遜S3的服務級彆協議 151
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.3 使用文檔存儲來避免對象關係映射 171
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.5.3 使用質量樹進行項目風險交流 234
12.6 找到閤適的驗證架構的試點項目 235
12.7 小結 236
12.8 延伸閱讀 237
· · · · · · (
收起)