MongoDB 核心原理與實踐
內容描述
本書主要包括MongoDB安裝部署、增刪改查、索引、聚集框架等基礎知識;WiredTiger存儲引擎、事務、復制集、分片集群等高階知識;MongoDB的導入導出、備份恢復、性能監控、權限控制等運維管理知識;MongoDB的驅動、應用開發、來自中文社區的精選案例與問答等一線實踐知識等。本書在滿足現實中的數據庫管理及應用需求的基礎上,重點突出WiredTiger存儲引擎和實踐案例的講解。
目錄大綱
第1篇MongoDB基礎知識
第1章初識MongoDB 2
1.1 MongoDB的發展與現狀 2
1.2 MongoDB與Hadoop比較 5
1.3 關鍵特性 8
1.4 安裝部署10
1.4.1 在Windows中安裝MongoDB 11
1.4.2 在Linux中安裝MongoDB 11
1.4.3 在Docker中安裝MongoDB 13
1.5 幾個重要的可執行文件16
1.6 適合的業務19
1.6.1 高並發Web應用19
1.6.2 實時計算類的應用20
1.6.3 數據中台20
1.6.4 遊戲類應用21
1.6.5 日誌分析類系統22
1.6.6 AI應用場景22
1.7 小結24
第2章CRUD操作25
2.1 查詢操作25
2.1.1 查詢條件27
2.1.2 比較操作符28
2.1.3 邏輯操作符30
2.1.4 字段名匹配31
2.1.5 文本查詢32
2.1.6 正則表達式34
2.1.7 嵌套文檔查詢34
2.1.8 數組查詢35
2.1.9 地理位置查詢38
2.1.10 查詢投射與排序40
2.2 插入操作41
2.2.1 insertOne 41
2.2.2 insertMany 42
2.2.3 insert 44
2.3 修改操作45
2.3.1 updateOne 45
2.3.2 updateMany 48
2.3.3 replaceOne 52
2.3.4 update 53
2.4 刪除操作55
2.4.1 deleteOne 55
2.4.2 deleteMany 55
2.5 批量寫操作56
2.6 小結58
第3章索引59
3.1 索引原理59
3.2 創建索引61
3.3 單個字段的索引61
3.4 多字段的複合索引63
3.5 數組的多鍵索引65
3.6 查詢計劃分析66
3.7 索引覆蓋查詢70
3.8 全文索引71
3.9 地理位置索引72
3.10 Hash索引73
3.11 刪除索引73
3.12 TTL索引74
3.13 小結76
第4章聚集操作77
4.1 單個集合中的基礎聚集函數77
4.1.1 count()函數77
4.1.2 estimatedDocumentCount()函數79
4.1.3 countDocuments()函數80
4.1.4 distinct()函數80
4.2 管道聚集框架82
4.2.1 $group分組84
4.2.2 $addFields添加新字段85
4.2.3 $lookup關聯查詢86
4.2.4 $project投射88
4.2.5 $out將結果輸出到新集合88
4.2.6 MongoDB聚集操作語句與SQL語句的比較89
4.3 MapReduce編程89
4.4 小結92
第2篇深入理解MongoDB
第5章WiredTiger存儲引擎94
5.1 存儲引擎的數據結構95
5.1.1 典型的B-Tree數據結構95
5.1.2 磁盤中的基礎數據結構96
5.1.3 內存中的基礎數據結構97
5.1.4 page的其他數據結構99
5.2 page eviction頁面淘汰100
5.3 page reconcile將數據寫入磁盤101
5.4 Cache的分配規則102
5.5 page的生命週期、狀態、大小103
5.5.1 page的生命週期104
5.5.2 page的各種狀態105
5.5.3 page的大小參數105
5.6 checkpoint的原理107
5.6.1 checkpoint包含的關鍵信息108
5.6.2 checkpoint執行流程與觸發時機109
5.7 wt工具和磁盤中的元數據文件111
5.7.1 wt工具111
5.7.2 元數據相關文件112
5.8 事務115
5.8.1 事務的基本原理115
5.8.2 與事務相關的數據結構118
5.8.3 事務的snapshot隔離119
5.8.4 MVCC並發控制機制120
5.8.5 事務日誌(Journal) 122
5.9 一個完整的寫操作流程123
5.10 小結124
第6章複製集125
6.1 複製集功能概述125
6.2 複製集部署架構126
6.2.1 典型的3節點複製集部署架構126
6.2.2 多數據中心複製集部署架構128
6.3 完整部署一個複制集129
6.3.1 創建每個節點上存儲數據的目錄129
6.3.2 創建每個節點的日誌文件130
6.3.3 創建每個節點啟動時的配置文件130
6.3.4 啟動每個節點上的mongod實例131
6.3.5 初始化複製集131
6.3.6 將其他節點添加到復制集132
6.3.7 觀察複製集的運行狀態132
6.4 複製集的維護137
6.4.1 刪除節點137
6.4.2 添加Secondary節點138
6.4.3 添加Arbiter節點140
6.4.4 複製集的配置信息140
6.4.5 重新配置複製集143
6.4.6 故障轉移Failover分析145
6.5 複製集選舉Primary節點的機制149
6.5.1 複製集中的投票節點和非投票節點149
6.5.2 選舉觸發條件和選舉為Primary節點的因素150
6.5.3 複製集能正常完成選舉的條件152
6.6 基於Oplog的數據同步機制154
6.6.1 Oplog集合包含的內容分析155
6.6.2 Oplog的默認大小及性能影響156
6.6.3 Oplog集合大小的修改158
6.6.4 使用initial sync解決Oplog嚴重落後的問題159
6.7 寫關注(writeConcern)模式162
6.7.1 默認的“寫關注”場景162
6.7.2 配置寫關注162
6.8 讀參考(readPreference)模式165
6.8.1 讀參考常見的應用場景166
6.8.2 讀參考的幾種模式分析167
6.8.3 設置tags標籤使讀請求指向特定節點168
6.8.4 如何從多個匹配的節點中選擇一個目標169
6.9 讀關注(readConcern)模式171
6.9.1 Primary節點切換可能導致數據回滾171
6.9.2 設置讀關注避免讀到的數據被回滾172
6.10 Change Streams實現數據實時同步176
6.10.1 實現原理176
6.10.2 實時數據流的格式177
6.10.3 打開實時數據流178
6.10.4 控制實時數據流的輸出179
6.11 小結181
第7章分片集群182
7.1 分片集群的部署架構182
7.2 手動部署一個分片集群184
7.2.1 分片shard1配置184
7.2.2 分片shard2配置186
7.2.3 config服務器配置187
7.2.4 mongos路由配置188
7.2.5 啟動分片集群189
7.2.6 配置集合使其分片192
7.2.7 正確關閉和重啟集群194
7.3 片鍵及選擇策略195
7.3.1 片鍵選擇策略197
7.3.2 基於Hash分片200
7.3.3 基於範圍的分片203
7.4 chunk 204
7.4.1 chunk的分割204
7.4.2 chunk大小的修改209
7.5 Balancer 210
7.5.1 一個完整的chunk遷移過程212
7.5.2 Balancer的管理214
7.5.3 存儲元數據的config數據庫217
7.6 小結220
第8章分佈式文件存儲GridFS 221
8.1 什麼是GridFS 222
8.2 使用GridFS的場景226
8.3 GridFS常用操作227
8.3.1 上傳文件228
8.3.2 下載文件229
8.3.3 刪除文件230
8.3.4 查詢文件230
8.4 小結231
第3篇MongoDB運維管理
第9章管理與監控234
9.1 數據導入/導出234
9.1.1 導出工具mongoexport 235
9.1.2 導入工具mongoimport 237
9.2 數據備份/恢復240
9.2.1 備份工具mongodump 241
9.2.2 恢復工具mongorestore 243
9.3 命令行工具監控管理245
9.3.1 mongotop 246
9.3.2 mongostat 247
9.3.3 db.stats() 249
9.3.4 db.serverStatus() 251
9.4 可視化數據庫操作256
9.4.1 Compass工具的安裝與連接256
9.4.2 可視化性能監控257
9.4.3 可視化數據庫操作258
9.4.4 可視化聚集操作262
9.4.5 內嵌mongoshell開發環境263
9.5 小結264
第10章權限控制265
10.1 基於角色與權限控制原理265
10.2 啟動角色權限控制功能267
10.3 MongoDB默認提供的角色271
10.3.1 針對特定數據庫中的讀/寫角色271
10.3.2 針對特定數據庫中的管理角色272
10.3.3 針對所有數據庫中的角色272
10.3.4 **用戶角色273
10.4 用戶管理274
10.4.1 查看數據庫中的用戶274
10.4.2 創建新用戶275
10.4.3 修改用戶的角色276
10.4.4 刪除用戶276
10.5 角色管理277
10.5.1 查看數據庫中的角色278
10.5.2 查看角色對應的權限信息278
10.5.3 創建一個自定義角色280
10.5.4 驗證自定義角色的權限282
10.5.5 刪除自定義的角色283
10.6 小結283
第4篇MongoDB應用實踐
第11章MongoDB應用開發286
11.1 基於Python的開發286
11.1.1 單實例中的CRUD操作287
11.1.2 複製集中的操作290
11.1.3 分片集群中的操作291
11.1.4 GridFS分佈式文件操作292
11.2 基於.net core的開發294
11.2.1 CRUD操作296
11.2.2 GridFS分佈式文件操作298
11.3 基於Java和Spring Boot框架的開發301
11.3.1 開發框架介紹301
11.3.2 CRUD操作304
11.4 小結306
第12章基於MongoDB的數據中台案例308
12.1 現代企業數據架構及痛點308
12.2 什麼是數據中台309
12.3 數據中台的價值312
12.4 數據中台的技術模塊313
12.5 基於MongoDB的數據中台方案320
12.6 數據中台方案選型327
12.7 小結328
第13章百萬級高並發集群性能提高案例329
13.1 背景329
13.2 軟件優化330
13.2.1 業務層面優化330
13.2.2 MongoDB線程模型優化331
13.2.3 WiredTiger存儲引擎優化333
13.3 解決服務器系統磁盤I/O問題342
13.3.1 服務器I/O硬件問題背景342
13.3.2 服務器I/O硬件問題解決後性能對比343
13.4 主節點硬件升級後續優化346
13.4.1 readConcern配置優化346
13.4.2 替換從節點服務器為升級後的高I/O服務器350
13.4.3 結論351
13.4.4 繼續優化調整存儲引起參數352
13.5 小結353
第14章基於MongoDB的金融系統案例355
14.1 項目背景355
14.2 面臨的主要挑戰355
14.3 技術選型356
14.4 方案