與傳統(tǒng)的關(guān)系數(shù)據(jù)庫(kù)不同,MongoDB是一種面向文檔的數(shù)據(jù)庫(kù)。本書這一版共分為6個(gè)部分,涵蓋開(kāi)發(fā)、管理以及部署等各個(gè)方面。這一版對(duì)TTL和聚合管道等新特性進(jìn)行了講解,還增加了配置MongoDB的章節(jié),涵蓋面向文檔的存儲(chǔ)方式及利用MongoDB的無(wú)模式數(shù)據(jù)模型處理文檔、集合和多個(gè)數(shù)據(jù)庫(kù),以及監(jiān)控、安全性和身份驗(yàn)證、備份和修復(fù)、水平擴(kuò)展MongoDB數(shù)據(jù)庫(kù)等多方面的內(nèi)容。
香農(nóng)·布拉德肖(Shannon Bradshaw)是MongoDB公司培訓(xùn)部門副總裁,負(fù)責(zé)管理MongoDB專業(yè)認(rèn)證項(xiàng)目提供的培訓(xùn)產(chǎn)品。 約恩·布拉齊爾(Eoin Brazil)是MongoDB公司高級(jí)課程工程師,致力于開(kāi)發(fā)與MongoDB相關(guān)的在線培訓(xùn)產(chǎn)品。 克里斯蒂娜·霍多羅夫(Kristina Chodorow)是軟件工程師,曾深度參與MongoDB的內(nèi)核開(kāi)發(fā)工作。她領(lǐng)導(dǎo)了MongoDB副本集功能的開(kāi)發(fā)并編寫了PHP和Perl的驅(qū)動(dòng)程序。 【譯者介紹】 牟天壘,架構(gòu)師,MongoDB官方認(rèn)證雙證持有者,MongoDB官方中文社區(qū)核心成員,MongoDB生態(tài)工具Tapdata創(chuàng)始工程師,致力于實(shí)時(shí)數(shù)據(jù)服務(wù)理念的實(shí)現(xiàn)。 王明輝,本科就讀于同濟(jì)大學(xué),從事全棧開(kāi)發(fā)多年,參與過(guò)數(shù)個(gè)創(chuàng)業(yè)項(xiàng)目,也對(duì)開(kāi)源社區(qū)有所貢獻(xiàn),現(xiàn)就職于微軟(亞洲)互聯(lián)網(wǎng)工程院。
前言 xvii
第 一部分 MongoDB入門
第 1 章 MongoDB簡(jiǎn)介 3
1.1 易于使用 3
1.2 易于擴(kuò)展 3
1.3 功能豐富 4
1.4 性能卓越 5
1.5 設(shè)計(jì)理念 5
第 2 章 入門指南 6
2.1 文檔 6
2.2 集合 7
2.2.1 動(dòng)態(tài)模式 7
2.2.2 命名 8
2.3 數(shù)據(jù)庫(kù) 8
2.4 啟動(dòng)MongoDB 9
2.5 MongoDB shell介紹 10
2.5.1 運(yùn)行shell 10
2.5.2 MongoDB客戶端 11
2.5.3 shell中的基本操作 12
2.6 數(shù)據(jù)類型 14
2.6.1 基本數(shù)據(jù)類型 14
2.6.2 日期 15
2.6.3 數(shù)組 16
2.6.4 內(nèi)嵌文檔 16
2.6.5 ObjectId和_id 17
2.7 使用MongoDB shell 18
2.7.1 shell使用技巧 19
2.7.2 使用shell執(zhí)行腳本 19
2.7.3 創(chuàng)建.mongorc.js文件 21
2.7.4 定制shell提示信息 22
2.7.5 編輯復(fù)雜變量 23
2.7.6 不便使用的集合名稱 23
第 3 章 創(chuàng)建、更新和刪除文檔 25
3.1 插入文檔 25
3.1.1 insertMany 25
3.1.2 插入校驗(yàn) 28
3.1.3 插入 28
3.2 刪除文檔 28
3.3 更新文檔 30
3.3.1 文檔替換 30
3.3.2 使用更新運(yùn)算符 31
3.3.3 upsert 40
3.3.4 更新多個(gè)文檔 42
3.3.5 返回被更新的文檔 42
第 4 章 查詢 45
4.1 find簡(jiǎn)介 45
4.1.1 指定要返回的鍵 46
4.1.2 限制 46
4.2 查詢條件 47
4.2.1 查詢條件 47
4.2.2 OR查詢 47
4.2.3 $not 48
4.3 特定類型的查詢 48
4.3.1 null 49
4.3.2 正則表達(dá)式 49
4.3.3 查詢數(shù)組 50
4.3.4 查詢內(nèi)嵌文檔 54
4.4 $where查詢 55
4.5 游標(biāo) 56
4.5.1 limit、skip和sort 57
4.5.2 避免略過(guò)大量結(jié)果 58
4.5.3 游標(biāo)生命周期 59
第二部分 設(shè)計(jì)應(yīng)用程序
第 5 章 索引 63
5.1 索引簡(jiǎn)介 63
5.1.1 創(chuàng)建索引 65
5.1.2 復(fù)合索引簡(jiǎn)介 68
5.1.3 MongoDB如何選擇索引 71
5.1.4 使用復(fù)合索引 72
5.1.5 $運(yùn)算符如何使用索引 88
5.1.6 索引對(duì)象和數(shù)組 97
5.1.7 索引基數(shù) 99
5.2 explain輸出 99
5.3 何時(shí)不使用索引 106
5.4 索引類型 107
5.4.1 索引 107
5.4.2 部分索引 109
5.5 索引管理 110
5.5.1 標(biāo)識(shí)索引 111
5.5.2 修改索引 111
第 6 章 特殊的索引和集合類型 112
6.1 地理空間索引 112
6.1.1 地理空間查詢的類型 113
6.1.2 使用地理空間索引 114
6.1.3 復(fù)合地理空間索引 120
6.1.4 2d索引 121
6.2 全文搜索索引 123
6.2.1 創(chuàng)建文本索引 123
6.2.2 文本查詢 124
6.2.3 優(yōu)化全文本搜索 126
6.2.4 在其他語(yǔ)言中搜索 126
6.3 固定集合 127
6.3.1 創(chuàng)建固定集合 129
6.3.2 可追加游標(biāo) 129
6.4 TTL索引 130
6.5 使用GridFS存儲(chǔ)文件 130
6.5.1 GridFS入門:mongofiles 131
6.5.2 在MongoDB驅(qū)動(dòng)程序中使用GridFS 131
6.5.3 GridFS的底層機(jī)制 132
第 7 章 聚合框架 134
7.1 管道、階段和可調(diào)參數(shù) 134
7.2 階段入門:常見(jiàn)操作 136
7.3 表達(dá)式 140
7.4 $project 140
7.5 $unwind 145
7.6 數(shù)組表達(dá)式 151
7.7 累加器 155
7.8 分組簡(jiǎn)介 57
7.8.1 分組階段中的_id字段 161
7.8.2 分組與投射 163
7.9 將聚合管道結(jié)果寫入集合中 166
第 8 章 事務(wù) 167
8.1 事務(wù)簡(jiǎn)介 167
8.2 如何使用事務(wù) 168
8.3 對(duì)應(yīng)用程序的事務(wù)限制進(jìn)行調(diào)優(yōu) 171
第 9 章 應(yīng)用程序設(shè)計(jì) 173
9.1 模式設(shè)計(jì)注意事項(xiàng) 173
9.2 范式化與反范式化 176
9.2.1 數(shù)據(jù)表示的示例 176
9.2.2 基數(shù) 180
9.2.3 好友、粉絲以及其他麻煩事項(xiàng) 180
9.3 優(yōu)化數(shù)據(jù)操作 182
9.4 數(shù)據(jù)庫(kù)和集合的設(shè)計(jì) 183
9.5 一致性管理 183
9.6 模式遷移 184
9.7 模式管理 185
9.8 不適合使用MongoDB的場(chǎng)景 185
第三部分 復(fù)制
第 10 章 創(chuàng)建副本集 189
10.1 復(fù)制簡(jiǎn)介 189
10.2 建立副本集(一) 190
10.3 網(wǎng)絡(luò)注意事項(xiàng) 191
10.4 安全注意事項(xiàng) 191
10.5 建立副本集(二) 191
10.6 觀察副本集 194
10.7 更改副本集配置 199
10.8 如何設(shè)計(jì)副本集 201
10.9 成員配置選項(xiàng) 203
10.9.1 優(yōu)先級(jí) 204
10.9.2 隱藏成員 204
10.9.3 選舉仲裁者 205
10.9.4 創(chuàng)建索引 206
第 11 章 副本集的組成 207
11.1 同步 207
11.1.1 初始化同步 209
11.1.2 復(fù)制 210
11.1.3 處理過(guò)時(shí)數(shù)據(jù) 210
11.2 心跳 210
11.3 選舉 212
11.4 回滾 212
第 12 章 從應(yīng)用程序連接副本集 216
12.1 客戶端到副本集的連接行為 216
12.2 在寫入時(shí)等待復(fù)制 218
12.3 自定義復(fù)制保證規(guī)則 219
12.3.1 保證復(fù)制到每個(gè)數(shù)據(jù)中心的一臺(tái)服務(wù)器上 219
12.3.2 保證寫操作被復(fù)制到大多數(shù)非隱藏節(jié)點(diǎn) 220
12.3.3 創(chuàng)建其他保證規(guī)則 221
12.4 將讀請(qǐng)求發(fā)送到從節(jié)點(diǎn) 221
12.4.1 一致性考慮 222
12.4.2 負(fù)載考慮 222
12.4.3 由從節(jié)點(diǎn)讀取數(shù)據(jù)的場(chǎng)景 223
第 13 章 管理 224
13.1 以單機(jī)模式啟動(dòng)成員 224
13.2 副本集配置 225
13.2.1 創(chuàng)建副本集 225
13.2.2 更改副本集成員 225
13.2.3 創(chuàng)建比較大的副本集 226
13.2.4 強(qiáng)制重新配置 226
13.3 控制成員狀態(tài) 227
13.3.1 把主節(jié)點(diǎn)變?yōu)閺墓?jié)點(diǎn) 227
13.3.2 阻止選舉 227
13.4 監(jiān)控復(fù)制 228
13.4.1 獲取狀態(tài) 228
13.4.2 可視化復(fù)制圖譜 231
13.4.3 復(fù)制循環(huán) 232
13.4.4 禁用復(fù)制鏈 232
13.4.5 計(jì)算延遲 233
13.4.6 調(diào)整oplog大小 234
13.4.7 創(chuàng)建索引 234
13.4.8 在預(yù)算有限的情況下進(jìn)行復(fù)制 235
第四部分 分片
第 14 章 分片簡(jiǎn)介 239
14.1 什么是分片 239
14.2 理解集群組件 240
14.3 在單機(jī)集群上進(jìn)行分片 241
第 15 章 配置分片 250
15.1 何時(shí)分片 250
15.2 啟動(dòng)服務(wù)器 251
15.2.1 配置服務(wù)器 251
15.2.2 mongos進(jìn)程 252
15.2.3 將副本集轉(zhuǎn)換為分片 252
15.2.4 增加集群容量 256
15.2.5 數(shù)據(jù)分片 256
15.3 MongoDB如何追蹤集群數(shù)據(jù) 256
15.3.1 塊范圍 257
15.3.2 拆分塊 259
15.4 均衡器 261
15.5 排序規(guī)則 261
15.6 變更流 261
第 16 章 選擇片鍵 263
16.1 評(píng)估使用情況 263
16.2 描繪分發(fā)情況 264
16.2.1 升序片鍵 264
16.2.2 隨機(jī)分發(fā)的片鍵 266
16.2.3 基于位置的片鍵 267
16.3 片鍵策略 268
16.3.1 哈希片鍵 268
16.3.2 GridFS的哈希片鍵 270
16.3.3 消防水管策略 270
16.3.4 多熱點(diǎn) 271
16.4 片鍵規(guī)則和指導(dǎo)方針 273
16.4.1 片鍵的限制 273
16.4.2 片鍵的基數(shù) 273
16.5 控制數(shù)據(jù)分發(fā) 273
16.5.1 對(duì)多個(gè)數(shù)據(jù)庫(kù)和集合使用一個(gè)集群 273
16.5.2 手動(dòng)分片 275
第 17 章 分片管理 276
17.1 查看當(dāng)前狀態(tài) 276
17.1.1 使用sh.status()查看摘要信息 276
17.1.2 查看配置信息 278
17.2 跟蹤網(wǎng)絡(luò)連接 283
17.2.1 獲取連接統(tǒng)計(jì) 284
17.2.2 限制連接數(shù)量 289
17.3 服務(wù)器管理 290
17.3.1 添加服務(wù)器 291
17.3.2 修改分片中的服務(wù)器 291
17.3.3 刪除分片 291
17.4 數(shù)據(jù)均衡 294
17.4.1 均衡器 294
17.4.2 修改塊的大小 295
17.4.3 移動(dòng)塊 296
17.4.4 超大塊 298
17.4.5 刷新配置 300
第五部分 應(yīng)用程序管理
第 18 章 了解應(yīng)用程序的動(dòng)態(tài) 303
18.1 查看當(dāng)前操作 303
18.1.1 尋找有問(wèn)題的操作 306
18.1.2 終止操作 306
18.1.3 假象 307
18.1.4 防止幻象操作 307
18.2 使用系統(tǒng)分析器 307
18.3 計(jì)算大小 310
18.3.1 文檔 310
18.3.2 集合 311
18.3.3 數(shù)據(jù)庫(kù) 315
18.4 使用mongotop和mongostat 316
第 19 章 MongoDB安全介紹 318
19.1 MongoDB的身份驗(yàn)證和授權(quán) 318
19.1.1 身份驗(yàn)證機(jī)制 318
19.1.2 授權(quán) 319
19.1.3 使用x.509證書對(duì)成員和客戶端進(jìn)行身份驗(yàn)證 320
19.2 MongoDB的認(rèn)證和傳輸層加密教程 323
19.2.1 建立CA 323
19.2.2 生成并簽名成員證書 327
19.2.3 生成并簽名客戶端證書 328
19.2.4 在不啟用身份驗(yàn)證和授權(quán)的情況下啟動(dòng)副本集 328
19.2.5 創(chuàng)建admin用戶 329
19.2.6 啟用身份驗(yàn)證和授權(quán)并重新啟動(dòng)副本集 330
第 20 章 持久性 332
20.1 使用日志機(jī)制的成員級(jí)別持久性 332
20.2 使用寫關(guān)注的集群級(jí)別持久性 333
20.2.1 writeConcern的w和wtimeout選項(xiàng) 334
20.2.2 writeConcern的j(日志)選項(xiàng) 334
20.3 使用讀關(guān)注的集群級(jí)別持久性 335
20.4 使用寫關(guān)注的事務(wù)持久性 335
20.5 MongoDB不能保證什么 336
20.6 檢查數(shù)據(jù)損壞 336
第六部分 服務(wù)器端管理
第 21 章 在生產(chǎn)環(huán)境中設(shè)置MongoDB 341
21.1 從命令行啟動(dòng) 341
21.2 停止MongoDB 345
21.3 安全性 346
21.3.1 數(shù)據(jù)加密 347
21.3.2 SSL連接 347
21.4 日志 348
第 22 章 監(jiān)控MongoDB 349
22.1 監(jiān)控內(nèi)存使用情況 349
22.1.1 計(jì)算機(jī)內(nèi)存簡(jiǎn)介 349
22.1.2 跟蹤內(nèi)存使用情況 350
22.1.3 跟蹤缺頁(yè)錯(cuò)誤 351
22.1.4 I/O 等待 352
22.2 計(jì)算工作集的大小 352
22.3 跟蹤性能情況 354
22.4 跟蹤剩余空間 355
22.5 監(jiān)控復(fù)制情況 356
第 23 章 備份 359
23.1 備份方法 359
23.2 對(duì)服務(wù)器進(jìn)行備份 360
23.2.1 文件系統(tǒng)快照 360
23.2.2 復(fù)制數(shù)據(jù)文件 363
23.2.3 使用mongodump 364
23.3 副本集的特殊注意事項(xiàng) 366
23.4 分片集群的特殊注意事項(xiàng) 366
23.4.1 備份和恢復(fù)整個(gè)集群 367
23.4.2 備份和恢復(fù)單個(gè)分片 367
第 24 章 部署MongoDB 368
24.1 系統(tǒng)設(shè)計(jì) 368
24.1.1 選擇存儲(chǔ)介質(zhì) 368
24.1.2 推薦的RAID配置 369
24.1.3 CPU 370
24.1.4 操作系統(tǒng) 370
24.1.5 交換空間 370
21.1.6 文件系統(tǒng) 371
24.2 虛擬化 371
24.2.1 內(nèi)存過(guò)度分配 371
24.2.2 神秘的內(nèi)存 371
24.2.3 處理網(wǎng)絡(luò)磁盤的I/O 問(wèn)題 372
24.2.4 使用非網(wǎng)絡(luò)磁盤 373
24.3 配置系統(tǒng)設(shè)置 373
24.3.1 關(guān)閉NUMA 373
24.3.2 設(shè)置預(yù)讀 375
24.3.3 禁用透明大內(nèi)存頁(yè)(THP) 375
24.3.4 選擇磁盤調(diào)度算法 376
24.3.5 禁用訪問(wèn)時(shí)間跟蹤 376
24.3.6 修改限制 377
24.4 網(wǎng)絡(luò)配置 378
24.5 系統(tǒng)管理 379
24.5.1 時(shí)鐘同步 379
24.5.2 OOM killer 379
24.5.3 關(guān)閉定期任務(wù) 379
附錄A 安裝MongoDB 380
附錄B 深入MongoDB 384