-- 會員 / 註冊 --  
 帳號:
 密碼:
  | 註冊 | 忘記密碼
3/26 新書到! 3/19 新書到! 3/14 新書到! 12/12 新書到!
購書流程Q & A站務留言版客服信箱
3ds MaxMayaRhinoAfter EffectsSketchUpZBrushPainterUnity
PhotoShopAutoCadMasterCamSolidWorksCreoUGRevitNuke
C#CC++Java遊戲程式Linux嵌入式PLCFPGAMatlab
駭客資料庫搜索引擎影像處理FluentVR+ARANSYS深度學習
單晶片AVROpenGLArduinoRaspberry Pi電路設計CadenceProtel
HadoopPythonStm32CortexLabview手機程式AndroidiPhone
可查書名,作者,ISBN,3dwoo書號
詳細書籍分類

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

( 簡體 字)
作者:唐卓章類別:1. -> 資料庫 -> MongoDB
譯者:
出版社:電子工業出版社MongoDB進階與實戰:微服務整合、性能優化、架構管理 3dWoo書號: 54414
詢問書籍請說出此書號!

缺書
NT售價: 590

出版日:4/1/2021
頁數:508
光碟數:0
站長推薦:
印刷:黑白印刷語系: ( 簡體 版 )
加入購物車 加到我的最愛
(請先登入會員)
ISBN:9787121408274
作者序 | 譯者序 | 前言 | 內容簡介 | 目錄 | 
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證)
作者序:

譯者序:

前言:

MongoDB是當今業界使用最廣泛的文檔數據庫之一,其從2009年誕生以來,已經吸引了無數開發者的目光。曾經MongoDB被冠以“四不像”的稱號,被大家稱為“非關系型數據庫中最像關系型數據庫的軟件”。即便如此,MongoDB在其發展歷程中仍表現出強大的生命力。尤其在近幾年,隨著云計算、大數據的飛速發展,企業項目對分布式數據庫的需求越來越多,MongoDB作為一款靈活易用、高可用、高可擴展的分布式數據庫,在許多互聯網產品及企業項目中大施拳腳。
筆者從2016年開始真正接觸MongoDB數據庫,而在此之前曾有過很長一段時間的關系型數據庫使用經驗。從自身的感受來說,采用傳統的關系型數據庫可能是一種“萬金油”的方案,選擇MongoDB則很大程度取決于團隊對NoSQL的接受程度,或是來自敏捷開發、高效擴展方面的權衡。
MongoDB的名字來自英文單詞“Humongous”,中文含義是“龐大”“巨大”,命名者的意圖是可以處理大規模的數據。但筆者所在的團隊更喜歡稱呼它為“芒果”數據庫,除了譯音更加相近,還有這幾年使用MongoDB的兩層感受。
? 第一層感受是“爽”。相比關系型數據庫,MongoDB幾乎沒有太多的約束。一方面,MongoDB的文檔模型是基于JSON的,開發者更容易理解。另一方面,動態化模式的特性讓數據庫的管理工作變得更加簡單,例如一些線上的變更可以更快速地完成。
? 第二層感受是“酸爽”。這一點對于MongoDB數據管理員來說可能更有感觸一些。MongoDB由于入門體驗“太過于友好”,導致初學者很容易產生一種誤解,即MongoDB不需要在管理方面投入太多的精力,最終導致系統上線后不斷被發現一些技術債務。更戲謔的說法是,“交付一時爽,維護火葬場”。當然,這么說可能并不恰當,但筆者想表達的觀點是,與傳統的關系型數據庫一樣,MongoDB在使用上仍然需要認真地考量和看護,只有如此才可能最大限度地發揮出MongoDB的優勢。
本書寫作思路
本書的書名為《MongoDB進階與實戰:微服務整合、性能優化、架構管理》,意味著書中除了介紹MongoDB技術,還會介紹與微服務相關的技術范例。在當今的背景下,風靡業界的微服務架構已成為分布式系統的事實標準。因此,我們在談MongoDB應用開發時,必然免不了和微服務技術棧產生一些聯系。以開發者的角度來看,在成為一名MongoDB高手之前,掌握全棧式的知識技能仍然是必需的,這些技能可概括為以下3個方面。
? MongoDB數據庫技術的掌握:包括基本的文檔模型概念和數據操作,以及集群高可用、數據分片方面的知識。
? MongoDB整合微服務的技能:需要對微服務周邊的技術框架有一定的掌握。本書以當前最流行的 Java 微服務技術棧為背景,介紹了從MongoDB Java Driver、Spring Data Mongo(ODM層)到上層應用整合的各種實戰范例。
? MongoDB高階技巧的掌握:包括MongoDB系統性能調優及MongoDB 架構高可用、安全性、高效運維管理方面的一些知識和經驗。
由此可見,初學者在從MongoDB入門到進階的過程中,需要學習及掌握的知識并不算少。尤其是高階技巧方面,這部分是最難也是最花費時間成本的。而筆者一貫認同的是,好記性不如爛筆頭,在學習MongoDB的歷程中,筆者將MongoDB在項目中的實戰經驗進行了總結,并多次以文章的形式發表。在和一些讀者交流之后,筆者發現大家實際上都遇到了不少應用層面的開發問題。
盡管MongoDB的官方文檔已經做得非常詳細(大多數基本的數據庫問題都可以從官方文檔中找到答案),然而其在周邊技術棧的整合、系統管理及調優方面仍缺乏一些富有針對性的內容。因此筆者認為在結合一些實踐案例的前提下,再以開發管理者的角度對MongoDB技術進行系統地梳理,則可能會產生事半功倍的效果,遂迸發了編寫本書的想法。
本書內容概要
第1部分:MongoDB入門(第1∼6章)
該部分介紹MongoDB的基本概念及入門知識。
通過該部分的學習,讀者可對MongoDB自身的技術全貌形成一定的認識。
第2部分:MongoDB微服務開發(第7∼10章)
該部分介紹微服務的基本概念及微服務架構中應用MongoDB的相關技術實現。
通過該部分的學習,讀者將能深入了解基于Java 微服務技術棧開發 MongoDB 應用的實踐方法。
第3部分:MongoDB高級進階(第11∼15章)
該部分介紹MongoDB更加高級的一些使用技巧。
通過該部分的學習,讀者可掌握MongoDB在性能調優方面的一些最佳實踐及指導方案。
第4部分:MongoDB架構管理(第16∼18章)
該部分介紹MongoDB在架構管理方面的一些經驗。
通過該部分的學習,讀者可獲得MongoDB在架構可靠性、安全方面的指導及如何在項目中進行數據庫問題防治的一些思路。
讀者對象
本書適合希望了解、使用MongoDB數據庫的技術從業者。
對有一定基礎的研發人員,通過閱讀本書可以更深入地了解MongoDB在性能調優、集群技術方面的一些原理。
對初學者,可以根據書中的一些案例快速開發基于 MongoDB 的微服務應用。
對系統架構師,可以通過本書了解 MongoDB 的一些進階特性及原理,并獲得在技術選型、架構管理方面的指導信息。
特別說明
本書的重點是討論MongoDB開發進階方面的內容,但書中會介紹MongoDB整合Java微服務所必備的一些關鍵技能(如Java驅動、Spring框架整合等)。微服務本身是一個非常大的課題,由于篇幅和筆者水平有限,這里對容器化、分布式框架方面的細節不會做過多介紹,而實際上這也超出了本書的范圍。如果讀者感興趣,建議參閱其他書籍。
致謝
決定寫一本書,不僅是分享知識,還是踐行長期主義的一次歷程。不得不說,這個過程的確是痛并快樂著。由于平日里工作非常繁忙,筆者無數次不得不堅持在深夜里趕稿子,由此也犧牲了很多陪伴家人和孩子的寶貴時間。在此特別感謝我的家人,如果沒有你們的大力支持,本書不會如此順利地完成。另外還要感謝筆者的項目團隊,讓筆者有機會在工作過程中學習到大量的MongoDB的知識。
本書提供了大量的案例說明,旨在分享MongoDB在應用開發、系統調優及管理中的一些實戰經驗。由于筆者個人能力有限,書中難免存在錯漏之處,懇請讀者提出問題并幫忙指正,再次感謝!

唐卓章
2021年2月
內容簡介:

本書圍繞如何用好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
序: