MongoDB 進階與實戰:微服務整合、性能優化、架構管理

唐卓章

下單後立即進貨 (約4週~6週)

相關主題

商品描述

本書圍繞如何用好MongoDB這個復雜命題,利用大部分篇幅講述了MongoDB在應用開發方面的各種進階技巧,同時也介紹了MongoDB 4.0版本的事務特性及微服務相關的技術範例。很多基本的數據庫問題都可以從MongoDB的官方文檔中找到答案,但官方文檔中在MongoDB周邊技術棧的整合、系統管理及調優方面仍然缺乏一些富有針對性的內容,所以本書在結合一些實踐案例的前提下,以開發管理者的角度對MongoDB技術進行了系統地梳理,希望能夠讓讀者的學習達到事半功倍的效果。相信本書會對應用MongoDB的開發人員具有廣泛的指導意義。

目錄大綱

第1部分 MongoDB入門 第1章 什麽是MongoDB 1 1.1 認識MongoDB 1 1.1.1 面向文檔設計 1 1.1.2 特性 3 1.1.3 優勢 4 1.1.4 需要剋服的困難 6 1.2 類比SQL模型 7 1.2.1 數據結構 7 1.2.2 類SQL語句 8 第2章 體驗MongoDB 11 2.1 安裝MongoDB 11 2.1.1 Linux環境下的安裝 11 2.1.2 Windows環境下的安裝 15 2.2 使用mongo shell 19 2.3 插入文檔 22 2.4 查詢文檔 24 2.4.1 查詢全部數據 24 2.4.2 指定條件查詢 25 2.4.3 排序、分頁 25 2.4.4 使用投射 25 2.4.5 查詢限定符 26 2.5 更新文檔 27 2.5.1 update 命令 27 2.5.2 findAndModify命令 29 2.5.3 更新操作符 30 2.6 刪除文檔 31 2.6.1 刪除單個文檔 31 2.6.2 刪除指定條件文檔 31 2.6.3 刪除全部文檔 32 2.6.4 返回被刪除文檔 32 2.7 使用聚合 33 2.8 計算文檔大小 34 2.8.1 查看集合大小 34 2.8.2 計算文檔大小 35 2.9 小技巧——定義mongo shell環境 36 第3章 數據模型 37 3.1 BSON協議與類型 37 3.1.1 JSON 標準 37 3.1.2 BSON和JSON 38 3.1.3 BSON的數據類型 39 3.2 使用日期 40 3.3 ObjectId生成器 41 3.4 數組、內嵌 44 3.4.1 內嵌文檔 45 3.4.2 數組 45 3.4.3 嵌套型的數組 47 3.5 固定集合 48 3.5.1 固定集合簡介 48 3.5.2 使用示例 49 3.5.3 特徵與限制 51 3.5.4 適用場景 52 3.6 小技巧——使用固定集合實現FIFO 隊列 52 第4章 索引介紹 56 4.1 索引簡述 56 4.2 單鍵、復合索引 57 4.2.1 單字段索引 57 4.2.2 復合索引 58 4.3 數組索引 58 4.4 地理空間索引 59 4.5 唯一性約束 60 4.6 TTL索引 63 4.7 其他索引特性 64 4.7.1 條件索引 64 4.7.2 稀疏索引(sparse=true) 65 4.7.3 文本索引 66 4.7.4 模糊索引 66 4.8 小技巧——使用explain命令驗證 優化 67 第5章 副本集 72 5.1 副本集架構 72 5.2 集群選舉 73 5.2.1 Raft選舉算法 73 5.2.2 MongoDB 實現的擴展 77 5.2.3 MongoDB選舉介紹 77 5.2.4 副本集模式 79 5.3 實時復制 81 5.3.1 oplog復制 81 5.3.2 冪等性 84 5.3.3 復制延遲 84 5.3.4 初始化同步 85 5.3.5 數據回滾 86 5.4 自動故障轉移 86 5.5 搭建副本集 89 5.5.1 安裝副本集 89 5.5.2 創建用戶 92 5.5.3 寫入數據 92 5.5.4 主備節點切換 93 5.6 小技巧——檢查復制的延遲情況 93 第6章 分片 97 6.1 分片集群架構 97 6.1.1 分片簡介 97 6.1.2 分片集群架構 97 6.2 分片策略 98 6.2.1 什麽是chunk 99 6.2.2 分片算法 100 6.2.3 分片鍵的選擇 101 6.3 讀寫分發模式 101 6.3.1 數據分發流程 101 6.3.2 避免廣播操作 103 6.3.3 保證索引唯一性 104 6.4 數據均衡 104 6.4.1 均衡的方式 104 6.4.2 chunk 分裂 105 6.4.3 自動均衡 106 6.4.4 數據均衡帶來的問題 108 6.5 使用mtools搭建集群 108 6.5.1 mtools 介紹 109 6.5.2 準備工作 109 6.5.3 安裝 mtools 109 6.5.4 創建分片集群 110 6.5.5 停止、啟動 112 6.6 使用分片集群 112 6.7 小技巧——使用標簽 114 6.7.1 分片標簽 114 6.7.2 使用場景 115 第2部分 MongoDB微服務開發 第7章 微服務入門 117 7.1 微服務定義 117 7.1.1 什麽是微服務 117 7.1.2 理解微服務 117 7.1.3 微服務的通用特性 120 7.1.4 微服務不是“銀彈” 121 7.2 微服務基礎設施 121 7.2.1 服務註冊 121 7.2.2 服務發現 122 7.2.3 API網關 123 7.2.4 服務容錯 123 7.2.5 服務監控 124 7.2.6 配置中心 124 7.2.7 接口調用 124 7.2.8 容器化 125 7.3 CAP與BASE理論 125 7.3.1 CAP 理論 125 7.3.2 BASE 理論 126 7.4 為什麽MongoDB適合微服務 127 第8章 使用Java操作MongoDB 131 8.1 搭建Java開發環境 131 8.1.1 安裝JDK 131 8.1.2 安裝IDEA 132 8.2 安裝Robo 3T 134 8.2.1 Robo 3T介紹 134 8.2.2 下載安裝 134 8.2.3 連接數據庫 135 8.2.4 操作數據 136 8.3 使用MongoDB Java Driver 137 8.3.1 引入框架 137 8.3.2 連接數據庫 137 8.3.3 使用構建器 138 8.4 實例:文章列表的存儲與檢索 141 8.4.1 集合操作 141 8.4.2 文檔操作 143 8.5 異步驅動 146 8.5.1 理解響應式 146 8.5.2 使用響應式流 147 8.6 使用CommandListener檢測慢 操作 152 8.7 MongoDB Java Driver的工作原理 155 8.7.1 游標 155 8.7.2 連接池 158 8.7.3 故障轉移 160 8.7.4 連接池相關參數 161 8.8 小技巧——如何監視驅動的 連接數 161 第9章 SpringBoot框架整合 165 9.1 SpringBoot簡介 165 9.1.1 SpringBoot是什麽 165 9.1.2 “腳手架”風格 167 9.2 第一個SpringBoot項目 168 9.2.1 初始化項目 168 9.2.2 添加啟動類 172 9.2.3 編寫 Echo 接口 172 9.2.4 配置文件 173 9.2.5 啟動程序 174 9.2.6 熱加載 175 9.3 Spring Data框架介紹 176 9.3.1 Spring Data 176 9.3.2 Spring Data MongoDB 178 9.4 使用Spring Data MongoDB操作 數據庫 179 9.4.1 引入依賴 179 9.4.2 配置文件 180 9.4.3 數據模型 180 9.4.4 數據操作 181 9.4.5 啟動測試 183 9.5 高級操作 184 9.5.1 實現投射 184 9.5.2 使用 QBE 186 9.5.3 自定義 Repository 方法 187 9.6 自定義配置 190 9.6.1 Spring Boot 通用配置 190 9.6.2 JavaConfig 配置 191 9.6.3 自動配置的原理 192 9.7 實現單元測試 194 9.7.1 使用 flapdoodle.embed.mongo 194 9.7.2 原理解析 198 9.7.3 定製化集成 200 9.8 多數據源 203 9.9 使用審計功能 208 9.9.1 使用註解 208 9.9.2 實現審計 209 9.10 小技巧——自定義數據序列化 方式 210 第10章 項目實戰 215 10.1 初始化項目 215 10.2 實現資源抓取 219 10.3 發布RssFeed 229 10.4 統計功能 232 10.5 開發門戶界面 235 10.5.1 前端組件 235 10.5.2 RSS門戶應用 237 10.5.3 實現後台接口 249 10.6 打包應用程序 252 10.6.1 使用spring-boot-maven- plugin插件 252 10.6.2 使用 assembly 插件 253 第3部分 MongoDB高效進階 第11章 性能基準 257 11.1 性能基準 257 11.1.1 瞭解基準測試 257 11.1.2 吞吐量、並發數、響應 時間 258 11.2 WiredTiger讀寫模型 259 11.2.1 讀緩存 259 11.2.2 寫緩沖 260 11.2.3 緩存頁管理 262 11.2.4 數據壓縮 264 11.2.5 小結 265 11.3 性能監控工具 265 11.3.1 mongostat 265 11.3.2 mongotop 267 11.3.3 Profiler模塊 269 11.3.4 db.currentOp 272 11.4 使用YCSB測試MongoDB性能 277 11.4.1 YCSB 簡介 277 11.4.2 執行壓力測試 279 11.4.3 生成時序指標序列 284 11.5 使用 nmon監視服務器性能 285 第12章 合理使用索引 288 12.1 索引檢索原理 288 12.2 索引檢索範例 291 12.3 覆蓋索引 295 12.4 查詢計劃 298 12.4.1 查詢計劃構成 298 12.4.2 explain 命令 299 12.5 實戰:查詢案例分析 304 12.6 查詢緩存原理 322 12.6.1 工作流程 322 12.6.2 案例 323 12.6.3 內部原理 326 12.7 強制命中 328 12.7.1 使用 hint方法 328 12.7.2 使用IndexFilter方法 329 12.8 索引正交 331 12.9 使用MongoDB Compass 332 12.10 優化原則 333 第13章 並發優化 337 13.1 MongoDB的鎖模式 337 13.2 MVCC 340 13.3 原子性操作 342 13.4 樂觀鎖 345 13.4.1 電影院訂座的案例 345 13.4.2 版本號模式 348 13.5 緩解行鎖競爭 349 13.6 避免重復數據 353 13.7 那些影響並發的操作 356 第14章 應用設計調優 358 14.1 應用範式設計 358 14.1.1 什麽是範式 358 14.1.2 反範式設計 360 14.2 嵌套設計 362 14.2.1 在文檔內使用嵌套 362 14.2.2 表達關聯 363 14.3 桶模式 365 14.3.1 桶模式 365 14.3.2 桶模式案例 366 14.4 海量數據分頁 374 14.4.1 傳統分頁模式 375 14.4.2 使用偏移量 376 14.4.3 折中處理 380 14.5 批操作 381 14.5.1 批量讀 381 14.5.2 批量寫 383 14.6 讀寫分離與一致性 385 14.6.1 讀寫分離 385 14.6.2 讀寫關註 387 14.6.3 讀自身的寫入(Read your own writes) 390 14.6.4 因果一致性 391 14.6.5 小結 392 14.7 聚合範例 392 14.7.1 聚合框架介紹 392 14.7.2 找出重復數據 393 14.7.3 寫入中間表 393 14.7.4 表連接(join) 397 14.7.5 使用要點 401 第15章 高級特性 402 15.1 Change Stream介紹 402 15.2 Change Stream案例:數據遷移 408 15.2.1 關鍵點 409 15.2.2 實戰:使用 Change Stream 實現增量遷移 410 15.2.3 小結 420 15.3 多文檔事務 421 15.3.1 事務簡介 421 15.3.2 MongoDB 中的事務 422 15.4 基於Spring開發事務 426 15.4.1 在驅動中實現事務 426 15.4.2 使用 Spring Data 實現事務 428 15.5 事務實現原理 432 15.5.1 MVCC 與快照的一致性 432 15.5.2 事務持久性 434 15.5.3 讀寫隔離設定 435 15.6 寫沖突模式 437 15.7 使用事務的限制 440 第4部分 MongoDB架構管理 第16章 安全管理 441 16.1 MongoDB如何鑒權 441 16.1.1 初體驗 441 16.1.2 理解身份認證與授權 443 16.1.3 身份認證方式 443 16.1.4 RBAC 訪問控制 446 16.2 角色管理 447 16.2.1 角色管理命令 447 16.2.2 系統內置角色 448 16.2.3 創建自定義角色 449 16.3 最小權限原則 450 16.4 安全最佳實踐 452 第17章 高可靠 457 17.1 節點部署優化 457 17.1.1 硬件規劃 457 17.1.2 系統調優 458 17.1.3 數據庫配置 460 17.2 集群高可靠 461 17.2.1 反親和部署 462 17.2.2 避免集中存儲 462 17.2.3 警惕資源超分 463 17.3 應用層高可靠 463 17.3.1 故障隔離 463 17.3.2 故障轉移/恢復 465 17.4 備份可靠性 466 17.4.1 邏輯備份 466 17.4.2 物理備份 468 17.4.3 增量備份 469 17.5 容災可靠性 470 17.5.1 同城災備 471 17.5.2 異地災備 472 17.5.3 異地多活 473 第18章 治理經驗 476 18.1 強化約束 476 18.1.1 使用 JSON Schema 476 18.1.2 管理文檔結構 478 18.2 使用Mongobee實現升級 478 18.2.1 模式演進 478 18.2.2 Mongobee 介紹 479 18.2.3 範例 480 18.3 規範與自動化 484 18.3.1 開發規範 485 18.3.2 實現自動化 486 18.4 運維管理 487 18.4.1 容量規劃 487 18.4.2 監控時關註哪些指標 490