本書主要包括MongoDB安裝部署、增刪改查、索引、聚集框架等基礎(chǔ)知識;WiredTiger存儲引擎、事務(wù)、復(fù)制集、分片集群等高階知識;MongoDB的導(dǎo)入導(dǎo)出、備份恢復(fù)、性能監(jiān)控、權(quán)限控制等運維管理知識;MongoDB的驅(qū)動、應(yīng)用開發(fā)、來自中文社區(qū)的精選案例與問答等一線實踐知識等。本書在滿足現(xiàn)實中的數(shù)據(jù)庫管理及應(yīng)用需求的基礎(chǔ)上,重點突出WiredTiger存儲引擎和實踐案例的講解。
		
	
郭遠威曾為華為前大數(shù)據(jù)遷移工程師,目前是亞信科技資深大數(shù)據(jù)顧問,在數(shù)據(jù)存儲,特別是MongoDB方面有豐富的知識和實踐積累,有寫作經(jīng)驗。
目錄
第1篇  MongoDB基礎(chǔ)知識
第1章  初識MongoDB	2
1.1  MongoDB的發(fā)展與現(xiàn)狀	2
1.2  MongoDB與Hadoop比較	5
1.3  關(guān)鍵特性	8
1.4  安裝部署	10
1.4.1  在Windows中安裝MongoDB	11
1.4.2  在Linux中安裝MongoDB	11
1.4.3  在Docker中安裝MongoDB	13
1.5  幾個重要的可執(zhí)行文件	16
1.6  適合的業(yè)務(wù)	19
1.6.1  高并發(fā)Web應(yīng)用	19
1.6.2  實時計算類的應(yīng)用	20
1.6.3  數(shù)據(jù)中臺	20
1.6.4  游戲類應(yīng)用	21
1.6.5  日志分析類系統(tǒng)	22
1.6.6  AI應(yīng)用場景	22
1.7  小結(jié)	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  數(shù)組查詢	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  小結(jié)	58
第3章  索引	59
3.1  索引原理	59
3.2  創(chuàng)建索引	61
3.3  單個字段的索引	61
3.4  多字段的復(fù)合索引	63
3.5  數(shù)組的多鍵索引	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  小結(jié)	76
第4章  聚集操作	77
4.1  單個集合中的基礎(chǔ)聚集函數(shù)	77
4.1.1  count()函數(shù)	77
4.1.2  estimatedDocumentCount()函數(shù)	79
4.1.3  countDocuments()函數(shù)	80
4.1.4  distinct()函數(shù)	80
4.2  管道聚集框架	82
4.2.1  $group分組	84
4.2.2  $addFields添加新字段	85
4.2.3  $lookup關(guān)聯(lián)查詢	86
4.2.4  $project投射	88
4.2.5  $out將結(jié)果輸出到新集合	88
4.2.6  MongoDB聚集操作語句與SQL語句的比較	89
4.3  MapReduce編程	89
4.4  小結(jié)	92
第2篇  深入理解MongoDB
第5章  WiredTiger存儲引擎	94
5.1  存儲引擎的數(shù)據(jù)結(jié)構(gòu)	95
5.1.1  典型的B-Tree數(shù)據(jù)結(jié)構(gòu)	95
5.1.2  磁盤中的基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)	96
5.1.3  內(nèi)存中的基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)	97
5.1.4  page的其他數(shù)據(jù)結(jié)構(gòu)	99
5.2  page eviction頁面淘汰	100
5.3  page reconcile將數(shù)據(jù)寫入磁盤	101
5.4  Cache的分配規(guī)則	102
5.5  page的生命周期、狀態(tài)、大小	103
5.5.1  page的生命周期	104
5.5.2  page的各種狀態(tài)	105
5.5.3  page的大小參數(shù)	105
5.6  checkpoint的原理	107
5.6.1  checkpoint包含的關(guān)鍵信息	108
5.6.2  checkpoint執(zhí)行流程與觸發(fā)時機	109
5.7  wt工具和磁盤中的元數(shù)據(jù)文件	111
5.7.1  wt工具	111
5.7.2  元數(shù)據(jù)相關(guān)文件	112
5.8  事務(wù)	115
5.8.1  事務(wù)的基本原理	115
5.8.2  與事務(wù)相關(guān)的數(shù)據(jù)結(jié)構(gòu)	118
5.8.3  事務(wù)的snapshot隔離	119
5.8.4  MVCC并發(fā)控制機制	120
5.8.5  事務(wù)日志(Journal)	122
5.9  一個完整的寫操作流程	123
5.10  小結(jié)	124
第6章  復(fù)制集	125
6.1  復(fù)制集功能概述	125
6.2  復(fù)制集部署架構(gòu)	126
6.2.1  典型的3節(jié)點復(fù)制集部署架構(gòu)	126
6.2.2  多數(shù)據(jù)中心復(fù)制集部署架構(gòu)	128
6.3  完整部署一個復(fù)制集	129
6.3.1  創(chuàng)建每個節(jié)點上存儲數(shù)據(jù)的目錄	129
6.3.2  創(chuàng)建每個節(jié)點的日志文件	130
6.3.3  創(chuàng)建每個節(jié)點啟動時的配置文件	130
6.3.4  啟動每個節(jié)點上的mongod實例	131
6.3.5  初始化復(fù)制集	131
6.3.6  將其他節(jié)點添加到復(fù)制集	132
6.3.7  觀察復(fù)制集的運行狀態(tài)	132
6.4  復(fù)制集的維護	137
6.4.1  刪除節(jié)點	137
6.4.2  添加Secondary節(jié)點	138
6.4.3  添加Arbiter節(jié)點	140
6.4.4  復(fù)制集的配置信息	140
6.4.5  重新配置復(fù)制集	143
6.4.6  故障轉(zhuǎn)移Failover分析	145
6.5  復(fù)制集選舉Primary節(jié)點的機制	149
6.5.1  復(fù)制集中的投票節(jié)點和非投票節(jié)點	149
6.5.2  選舉觸發(fā)條件和選舉為Primary節(jié)點的因素	150
6.5.3  復(fù)制集能正常完成選舉的條件	152
6.6  基于Oplog的數(shù)據(jù)同步機制	154
6.6.1  Oplog集合包含的內(nèi)容分析	155
6.6.2  Oplog的默認大小及性能影響	156
6.6.3  Oplog集合大小的修改	158
6.6.4  使用initial sync解決Oplog嚴重落后的問題	159
6.7  寫關(guān)注(writeConcern)模式	162
6.7.1  默認的“寫關(guān)注”場景	162
6.7.2  配置寫關(guān)注	162
6.8  讀參考(readPreference)模式	165
6.8.1  讀參考常見的應(yīng)用場景	166
6.8.2  讀參考的幾種模式分析	167
6.8.3  設(shè)置tags標簽使讀請求指向特定節(jié)點	168
6.8.4  如何從多個匹配的節(jié)點中選擇一個目標	169
6.9  讀關(guān)注(readConcern)模式	171
6.9.1  Primary節(jié)點切換可能導(dǎo)致數(shù)據(jù)回滾	171
6.9.2  設(shè)置讀關(guān)注避免讀到的數(shù)據(jù)被回滾	172
6.10  Change Streams實現(xiàn)數(shù)據(jù)實時同步	176
6.10.1  實現(xiàn)原理	176
6.10.2  實時數(shù)據(jù)流的格式	177
6.10.3  打開實時數(shù)據(jù)流	178
6.10.4  控制實時數(shù)據(jù)流的輸出	179
6.11  小結(jié)	181
第7章  分片集群	182
7.1  分片集群的部署架構(gòu)	182
7.2  手動部署一個分片集群	184
7.2.1  分片shard1配置	184
7.2.2  分片shard2配置	186
7.2.3  config服務(wù)器配置	187
7.2.4  mongos路由配置	188
7.2.5  啟動分片集群	189
7.2.6  配置集合使其分片	192
7.2.7  正確關(guān)閉和重啟集群	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  存儲元數(shù)據(jù)的config數(shù)據(jù)庫	217
7.6  小結(jié)	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  小結(jié)	231
第3篇  MongoDB運維管理
第9章  管理與監(jiān)控	234
9.1  數(shù)據(jù)導(dǎo)入/導(dǎo)出	234
9.1.1  導(dǎo)出工具mongoexport	235
9.1.2  導(dǎo)入工具mongoimport	237
9.2  數(shù)據(jù)備份/恢復(fù)	240
9.2.1  備份工具mongodump	241
9.2.2  恢復(fù)工具mongorestore	243
9.3  命令行工具監(jiān)控管理	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  可視化數(shù)據(jù)庫操作	256
9.4.1  Compass工具的安裝與連接	256
9.4.2  可視化性能監(jiān)控	257
9.4.3  可視化數(shù)據(jù)庫操作	258
9.4.4  可視化聚集操作	262
9.4.5  內(nèi)嵌mongoshell開發(fā)環(huán)境	263
9.5  小結(jié)	264
第10章  權(quán)限控制	265
10.1  基于角色與權(quán)限控制原理	265
10.2  啟動角色權(quán)限控制功能	267
10.3  MongoDB默認提供的角色	271
10.3.1  針對特定數(shù)據(jù)庫中的讀/寫角色	271
10.3.2  針對特定數(shù)據(jù)庫中的管理角色	272
10.3.3  針對所有數(shù)據(jù)庫中的角色	272
10.3.4  超級用戶角色	273
10.4  用戶管理	274
10.4.1  查看數(shù)據(jù)庫中的用戶	274
10.4.2  創(chuàng)建新用戶	275
10.4.3  修改用戶的角色	276
10.4.4  刪除用戶	276
10.5  角色管理	277
10.5.1  查看數(shù)據(jù)庫中的角色	278
10.5.2  查看角色對應(yīng)的權(quán)限信息	278
10.5.3  創(chuàng)建一個自定義角色	280
10.5.4  驗證自定義角色的權(quán)限	282
10.5.5  刪除自定義的角色	283
10.6  小結(jié)	283
第4篇  MongoDB應(yīng)用實踐
第11章  MongoDB應(yīng)用開發(fā)	286
11.1  基于Python的開發(fā)	286
11.1.1  單實例中的CRUD操作	287
11.1.2  復(fù)制集中的操作	290
11.1.3  分片集群中的操作	291
11.1.4  GridFS分布式文件操作	292
11.2  基于.net core的開發(fā)	294
11.2.1  CRUD操作	296
11.2.2  GridFS分布式文件操作	298
11.3  基于Java和Spring Boot框架的開發(fā)	301
11.3.1  開發(fā)框架介紹	301
11.3.2  CRUD操作	304
11.4  小結(jié)	306
第12章  基于MongoDB的數(shù)據(jù)中臺案例	308
12.1  現(xiàn)代企業(yè)數(shù)據(jù)架構(gòu)及痛點	308
12.2  什么是數(shù)據(jù)中臺	309
12.3  數(shù)據(jù)中臺的價值	312
12.4  數(shù)據(jù)中臺的技術(shù)模塊	313
12.5  基于MongoDB的數(shù)據(jù)中臺方案	320
12.6  數(shù)據(jù)中臺方案選型	327
12.7  小結(jié)	328
第13章  百萬級高并發(fā)集群性能提高案例	329
13.1  背景	329
13.2  軟件優(yōu)化	330
13.2.1  業(yè)務(wù)層面優(yōu)化	330
13.2.2  MongoDB線程模型優(yōu)化	331
13.2.3  WiredTiger存儲引擎優(yōu)化	333
13.3  解決服務(wù)器系統(tǒng)磁盤I/O問題	342
13.3.1  服務(wù)器I/O硬件問題背景	342
13.3.2  服務(wù)器I/O硬件問題解決后性能對比	343
13.4  主節(jié)點硬件升級后續(xù)優(yōu)化	346
13.4.1  readConcern配置優(yōu)化	346
13.4.2  替換從節(jié)點服務(wù)器為升級后的高I/O服務(wù)器	350
13.4.3  結(jié)論	351
13.4.4  繼續(xù)優(yōu)化調(diào)整存儲引起參數(shù)	352
13.5  小結(jié)	353
第14章  基于MongoDB的金融系統(tǒng)案例	355
14.1  項目背景	355
14.2  面臨的主要挑戰(zhàn)	355
14.3  技術(shù)選型	356
14.4  方案介紹	356
14.5  技術(shù)創(chuàng)新	358
14.6  技術(shù)特點	359
14.7  運營情況	360
14.8  項目成效	360
14.9  小結(jié)	361
第15章  云原生MongoDB部署案例	363
15.1  部署環(huán)境準備	363
15.2  Docker安裝	364
15.3  Kubernetes組件安裝	365
15.4  集群Master節(jié)點初始化	366
15.5  將Work節(jié)點添加到集群	369
15.6  分布式網(wǎng)絡(luò)文件系統(tǒng)安裝	369
15.7  PV、PVC、Deployment配置	372
15.8  小結(jié)	374
第16章  常見問題分析	375
16.1  集合與關(guān)系型數(shù)據(jù)庫表的區(qū)別	375
16.2  是否支持事務(wù)	376
16.3  鎖的類型及粒度有哪些	377
16.4  服務(wù)器的內(nèi)存多大合適	378
16.5  如何解決join查詢需求	379
16.6  創(chuàng)建索引對性能的影響	380
16.7  GridFS適合什么應(yīng)用場景	381
16.8  Journaling、Oplog、Log三種日志的區(qū)別	382
16.9  連接數(shù)設(shè)置為多少合適	383
16.10  集合被分片后是否可以修改片鍵	387
16.11  為什么分片集合中的文檔記錄沒有分布到所有分片上	387
16.12  通過mongos連接集群時連接數(shù)分析	387
16.13  復(fù)制集節(jié)點之間是否可以使用不同的存儲引擎	388