第1篇 NoSQL的興起與理論基礎
第1章 NoSQL與大數據簡介 2
1.1 引子——NoSQL在國內使用的案例 2
1.1.1 新浪微博 2
1.1.2 淘寶數據平颱 3
1.1.3 視覺中國網站 4
1.1.4 優酷運營數據分析 5
1.1.5 飛信空間 6
1.1.6 豆瓣社區 7
1.2 大數據 8
1.2.1 大數據的度量單位 8
1.2.2 大數據的特點 9
1.3 大數據相關技術 10
1.3.1 大數據采集技術 10
1.3.2 大數據預處理技術 11
1.3.3 大數據存儲及管理技術 11
1.3.4 大數據分析及挖掘技術 11
1.3.5 大數據展現與應用技術 12
1.4 NoSQL簡介 12
1.4.1 什麼是NoSQL 12
1.4.2 關係型數據庫簡史 13
1.4.3 數據庫分類 13
1.4.4 關係型數據庫的優勢 14
1.4.5 不擅長的處理 15
1.4.6 NoSQL數據庫 18
1.5 NoSQL數據庫的類型 20
1.5.1 鍵值(Key/Value)存儲 20
1.5.2 麵嚮文檔的數據庫 21
1.5.3 麵嚮列的數據庫 22
1.6 如何使用和學習NoSQL數據庫 23
1.6.1 始終隻是一種選擇 23
1.6.2 在何種程度上信賴它 23
1.7 雲數據管理 24
第2章 NoSQL的數據一緻性 25
2.1 傳統關係數據庫中的ACID 25
2.1.1 原子性 25
2.1.2 一緻性 25
2.1.3 隔離性 26
2.1.4 持久性 26
2.1.5 舉例 26
2.2 CAP理論 27
2.2.1 NoSQL係統是分布式係統 27
2.2.2 CAP理論闡述 27
2.3 AP的例子——DNS係統 29
2.3.1 DNS係統 29
2.3.2 DNS域名解析過程 29
2.3.3 DNS係統是最終一緻性的 31
2.4 數據一緻性模型與BASE 31
2.4.1 數據一緻性模型 31
2.4.2 BASE(Basically Available,Soft-state,Eventual consistency) 32
2.5 數據一緻性實現方法 33
2.5.1 Quorum係統NRW策略 33
2.5.2 時間戳策略 34
2.5.3 嚮量時鍾 37
第3章 NoSQL的水平擴展與其他基礎知識 41
3.1 所有數據存放在一個服務器上 41
3.2 分片(Sharding) 41
3.3 主從復製 43
3.4 對等(Peer To Peer)復製 44
3.5 復製和分片的同時使用 45
3.6 數據水平擴展的方法總結 46
3.7 分片對數據的劃分方式 46
3.7.1 Range-Based Partitioning 47
3.7.2 Round-Robin 49
3.8 一緻性hash算法(Consistent Hashing) 50
3.8.1 基本場景 51
3.8.2 hash算法和單調性 51
3.8.3 Consistent Hashing算法的原理 51
3.8.4 虛擬節點 54
3.9 磁盤的讀寫特點及五分鍾法則 55
3.9.1 磁道、扇區、柱麵和磁頭數 56
3.9.2 固態硬盤(SSD):隨機讀寫速度快 57
3.9.3 內存:讀寫速度極快 57
3.9.4 五分鍾法則 57
3.10 不要刪除數據 58
第2篇 列式NoSQL係統
第4章 BigTable與Google雲計算原理 60
4.1 雲計算 60
4.1.1 雲計算的概念 60
4.1.2 雲計算發展現狀 63
4.1.3 雲計算實現機製 64
4.1.4 網格計算與雲計算 66
4.2 Google文件係統GFS 68
4.2.1 係統架構 69
4.2.2 容錯機製 71
4.2.3 係統管理技術 72
4.3 並行數據處理MapReduce 73
4.3.1 産生背景 73
4.3.2 編程模型 73
4.3.3 實現機製 74
4.4 分布式鎖服務Chubby 78
4.4.1 Paxos算法 78
4.4.2 Chubby係統設計 79
4.4.3 Chubby文件係統 80
4.4.4 通信協議 82
4.4.5 正確性與性能 83
4.5 分布式結構化數據錶BigTable 84
4.5.1 設計動機與目標 85
4.5.2 數據模型 85
4.5.3 係統架構 87
4.5.4 主服務器 88
4.5.5 子錶服務器 89
4.5.6 性能優化 92
第5章 Google雲計算的開源版本——Hadoop 94
5.1 Hadoop簡介 94
5.1.1 Hadoop發展史 94
5.1.2 Apache Hadoop項目及體係結構 96
5.2 Hadoop産生的原因 97
5.2.1 海量的數據 97
5.2.2 數據的存儲和分析 98
5.3 Hadoop和其他係統的比較 99
5.3.1 和關係型數據庫管理係統(RDBMS)的比較 99
5.3.2 和網格計算的比較 100
5.4 HDFS的架構設計 101
5.4.1 前提和設計目標 102
5.4.2 Namenode和Datanode 102
5.4.3 文件係統的Namespace 103
5.4.4 數據復製 103
5.4.5 文件係統元數據的持久化 104
5.4.6 通訊協議 105
5.4.7 健壯性 105
5.4.8 數據組織 106
5.4.9 可訪問性 107
5.4.10 空間的迴收 107
5.5 安裝Hadoop 108
5.5.1 安裝JDK 1.7 108
5.5.2 安裝Hadoop 109
5.6 HDFS操作 113
5.6.1 使用FS Shell命令操作HDFS 113
5.6.2 編程讀寫HDFS 118
5.7 Hadoop中的MapReduce模型 119
5.7.1 MapReduce計算模型 119
5.7.2 Hadoop中的Hello World程序 120
5.7.3 運行MapReduce程序 124
5.7.4 Hadoop中的Hello World程序——新的API 125
5.7.5 MapReduce的數據流和控製流 127
5.8 Zookeeper 129
5.8.1 Zookeeper配置安裝 129
5.8.2 Zookeeper的數據模型 130
5.8.3 Zookeeper的基本使用 131
5.8.4 ZooKeeper 典型的應用場景 133
5.8.5 統一命名服務(Name Service) 133
5.8.6 共享鎖(Locks) 136
5.8.7 隊列管理 137
5.8.8 Zookeeper總結 139
5.9 HBase 139
5.9.1 簡介 139
5.9.2 邏輯視圖 139
5.9.3 物理存儲 141
5.9.4 係統架構 144
5.9.5 關鍵算法/流程 146
5.10 HBase的安裝和配置 149
5.11 HBase使用例子 151
第3篇 Key/Value NoSQL係統
第6章 Dynamo:Amazon的高可用鍵值對存儲 156
6.1 簡介 156
6.2 背景 157
6.2.1 係統假設和要求 158
6.2.2 服務水平協議(SLA) 158
6.2.3 設計考慮 160
6.3 係統架構 161
6.3.1 係統接口 162
6.3.2 劃分算法 162
6.3.3 復製 163
6.3.4 版本的數據 163
6.3.5 執行get()和put()操作 165
6.3.6 故障處理:暗示移交(Hinted Handoff) 166
6.3.7 處理永久性故障:副本同步 167
6.3.8 會員和故障檢測 167
6.3.9 添加/刪除存儲節點 169
6.4 實現 169
6.5 Amazon使用的經驗與教訓 170
6.5.1 平衡性能和耐久性 171
6.5.2 確保均勻的負載分布 172
6.5.3 不同版本:何時以及有多少 175
6.5.4 客戶端驅動或服務器驅動協調 176
6.5.5 權衡後颱和前颱任務 177
6.5.6 討論 177
6.6 結論 178
第7章 LevelDb——齣自Google的 Key-Value數據庫 179
7.1 LevelDb簡介 179
7.2 LevelDb的靜態部分 180
7.2.1 整體架構 180
7.2.2 log文件 182
7.2.3 SSTable文件 183
7.2.4 MemTable詳解 186
7.3 LevelDb的動態部分 187
7.3.1 寫入與刪除記錄 187
7.3.2 讀取記錄 188
7.3.3 Compaction操作 190
7.3.4 LevelDb中的Cache 192
7.3.5 Version、VersionEdit和VersionSet 194
第8章 Redis實戰 195
8.1 Redis安裝與準備 195
8.1.1 下載與安裝 195
8.1.2 配置文件修改 196
8.1.3 啓動Redis 197
8.1.4 停止Redis 198
8.2 Redis所支持的數據結構 198
8.2.1 String 199
8.2.2 List 203
8.2.3 Set 207
8.2.4 Hash/哈希/散列 210
8.2.5 有序集閤/Zset 213
8.3 Key操作命令 218
8.3.1 概述 218
8.3.2 命令示例 220
8.4 事物 223
8.4.1 事物概述 223
8.4.2 相關命令 223
8.4.3 命令示例 224
8.4.4 WATCH命令和基於CAS的樂觀鎖 225
8.5 Redis的主從復製 226
8.5.1 Redis的Replication 226
8.5.2 Replication的工作原理 227
8.5.3 如何配置Replication 227
8.5.4 應用示例 228
8.6 Redis的持久化 228
8.6.1 持久化機製 228
8.6.2 RDB機製的優勢和劣勢 229
8.6.3 AOF機製的優勢和劣勢 229
8.6.4 其他 230
8.7 Redis的虛擬內存 231
8.7.1 簡介 231
8.7.2 應用場景 231
8.7.3 配置 231
8.8 pipeline/管綫 233
8.8.1 請求應答協議和RTT 233
8.8.2 管綫(pipelining) 233
8.8.3 Benchmark 234
8.9 實例 234
第4篇 文檔型NoSQL係統
第9章 麵嚮文檔的數據庫CouchDB 240
9.1 CouchDB介紹 240
9.1.1 基本概念 240
9.1.2 擴展概念 241
9.2 CouchDB安裝與配置 241
9.3 REST API 242
9.3.1 數據庫REST API 243
9.3.2 文檔REST API 243
9.3.3 視圖 REST API 243
9.3.4 附件 REST API 244
9.4 為應用建模 244
9.4.1 描述實體 244
9.4.2 描述一對一和一對多關係 245
9.4.3 描述多對多關係 246
9.5 實戰開發 247
9.5.1 開發Web應用 247
9.5.2 使用CouchDB jQuery插件 248
9.5.3 示例應用建模 249
9.5.4 管理文檔 250
9.5.5 視圖 253
9.6 高級話題 259
9.6.1 權限控製與安全 259
9.6.2 文檔更新校驗 259
9.6.3 分組 259
9.6.4 鍵的排序 260
第10章 MongoDB實戰 261
10.1 為什麼要使用MongoDB 261
10.1.1 不能確定的錶結構信息 261
10.1.2 序列化可以解決一切問題嗎 261
10.1.3 無需定義錶結構的數據庫 262
10.2 MongoDB的優勢和不足 262
10.2.1 無錶結構 262
10.2.2 容易擴展 263
10.2.3 豐富的功能 263
10.2.4 性能卓越 264
10.2.5 簡便的管理 264
10.2.6 MongoDB的不足 264
10.3 基本概念 264
10.4 Linux下MongoDB的安裝和配置、啓動和停止 265
10.4.1 下載 265
10.4.2 安裝 266
10.4.3 啓動數據庫 267
10.4.4 停止數據庫 269
10.5 創建、更新及刪除文檔 270
10.5.1 連接數據庫 270
10.5.2 插入記錄 270
10.5.3 _id key 272
10.5.4 修改記錄 272
10.5.5 刪除記錄 272
10.6 查詢記錄 273
10.6.1 普通查詢 273
10.6.2 條件查詢 274
10.6.3 findOne()語法 274
10.6.4 通過limit限製結果集數量 274
10.7 高級查詢 275
10.7.1 條件操作符 275
10.7.2 $all匹配所有 275
10.7.3 $exists判斷字段是否存在 276
10.7.4 Null值處理 276
10.7.5 $mod取模運算 276
10.7.6 $ne不等於 277
10.7.7 $in包含 277
10.7.8 $nin不包含 278
10.7.9 $size數組元素個數 278
10.7.10 正則錶達式匹配 278
10.7.11 JavaScript查詢和$where查詢 279
10.7.12 count查詢記錄條數 279
10.7.13 skip限製返迴記錄的起點 279
10.7.14 sort排序 280
10.7.15 遊標 280
10.8 MapReduce 281
10.8.1 Map 282
10.8.2 Reduce 282
10.8.3 Result 282
10.8.4 Finalize 283
10.8.5 Options 283
10.9 索引 284
10.9.1 基礎索引 284
10.9.2 文檔索引 285
10.9.3 組閤索引 285
10.9.4 唯一索引 285
10.9.5 強製使用索引 286
10.9.6 刪除索引 287
10.10 性能優化 287
10.10.1 explain執行計劃 287
10.10.2 優化器Profile 288
10.10.3 性能優化舉例 289
10.11 性能監控 290
10.11.1 mongosniff 291
10.11.2 Mongostat 292
10.11.3 db.serverStatus 292
10.11.4 db.stats 294
10.11.5 第三方工具 294
10.12 Replica Sets復製集 294
10.12.1 部署Replica Sets 295
10.12.2 主從操作日誌oplog 297
10.12.3 主從配置信息 298
10.12.4 管理維護Replica Sets 299
10.12.5 增減節點 301
10.13 Sharding分片 305
10.13.1 建立Sharding Cluster 306
10.13.2 管理維護Sharding 308
10.14 Replica Sets和Sharding的結閤 313
10.14.1 創建數據目錄 314
10.14.2 配置Replica Sets 314
10.14.3 配置3颱Route Process 316
10.14.4 配置Shard Cluster 316
10.14.5 驗證Sharding正常工作 317
第5篇 MySQL基礎與性能優化
第11章 MySQL基礎 320
11.1 CentOS 6.5下MySQL的安裝 320
11.2 MySQL基本命令 322
11.3 MySQL數據類型 325
11.3.1 整型 325
11.3.2 浮點型 326
11.3.3 定點數 326
11.3.4 字符串(char,varchar,xxxtext) 326
11.3.5 二進製數據 327
11.3.6 日期時間類型 327
11.3.7 數據類型的屬性 327
11.4 創建數據庫和錶 328
11.5 檢索錶中的數據 331
11.6 多個錶的操作 334
第12章 MySQL高級特性與性能優化 338
12.1 MySQL Server係統架構 338
12.1.1 邏輯模塊組成 338
12.1.2 各模塊工作配閤 341
12.2 存儲引擎 343
12.2.1 MySQL存儲引擎概述 343
12.2.2 MyISAM存儲引擎簡介 344
12.2.3 Innodb 存儲引擎簡介 346
12.3 MySQL中的鎖定機製 347
12.3.1 MySQL中鎖定機製概述 347
12.3.2 閤理利用鎖機製優化MySQL 349
12.4 索引與優化 350
12.4.1 選擇索引的數據類型 351
12.4.2 索引入門 351
12.4.3 索引的類型 352
12.4.4 高性能的索引策略 353
12.4.5 索引與加鎖 358
12.5 MySQL的MyISAM和Innodb的Cache優化 359
12.5.1 MyISAM存儲引擎的Cache優化 359
12.5.2 Innodb緩存相關優化 362
12.6 MySQL的復製 364
12.6.1 復製對於可擴展性的意義 364
12.6.2 復製的原理 365
12.6.3 體驗MySQL復製 366
12.6.4 復製的常用拓撲結構 370
12.7 可擴展性設計之數據切分 375
12.7.1 何謂數據切分 375
12.7.2 數據的垂直切分 375
12.7.3 數據的水平切分 377
12.7.4 垂直與水平聯閤切分的使用 379
12.7.5 數據切分及整閤方案 381
12.7.6 數據切分與整閤中可能存在的問題 386
12.8 小結 388
· · · · · · (
收起)