MongoDB 性能調優實戰 Mongodb Performance Tuning: Optimizing MongoDB Databases and Their Applications

Guy Harrison,Michael Harriso

買這商品的人也買了...

商品描述

本書分為以下幾個主要部分:
第 1-3 章介紹方法和技術。
在這些章節中,我們描述了一種性能調優方法。
還提供了一些關於 MongoDB 架構和 MongoDB 提供的用於調查、監控和診斷 MongoDB 性能的工具的背景知識。
第 4 章和第 5 章介紹應用程序和數據庫設計。
第 6-10 章介紹應用程序代碼的優化。
第 11-14 章討論MongoDB 服務器及其運行硬件的優化。

目錄大綱

譯者序
前言
致謝
審校者簡介
第一部分方法和工具
第1章 性能調優方法2
1.1 警示故事 2
1.2 對症性能調優 3
1.3 系統性能調優 3
1.3.1 數據庫請求剖析 3
1.3.2 MongoDB數據庫的層次 4
1.4 小化應用程序工作負載 5
1.5 減少物理IO 6
1.6 優化磁盤IO 6
1.7 集群調優 7
1.8 小結 7
第2章 MongoDB架構與概念8
2.1 MongoDB文檔模型 8
2.1.1 JSON 9
2.1.2 二進制JSON 9
2.1.3 集合 9
2.1.4 MongoDB schema 9
2.2 MongoDB協議12
2.2.1 有線協議12
2.2.2 MongoDB驅動程序12
2.3 MongoDB命令13
2.3.1 查找命令13
2.3.2 聚合命令14
2.3.3 數據操作命令15
2.4 一致性機制15
2.4.1 讀取策略與寫入策略15
2.4.2 事務16
2.5 查詢優化16
2.6 MongoDB架構17
2.6.1 mongod 17
2.6.2 存儲引擎17
2.6.3 副本集18
2.6.4 分片19
2.6.5 分片機制19
2.6.6 集群平衡20
2.7 小結20
第3章 行業工具21
3.1 explain() 21
3.1.1 開始使用explain() 22
3.1.2 替代計劃24
3.1.3 執行統計信息25
3.1.4 使用explain()來調優查詢26
3.1.5 可視化解釋函數的使用方法28
3.2 查詢剖析器29
3.2.1 system.prof?ile集合30
3.2.2 分析剖析數據31
3.3 使用MongoDB日誌進行調優33
3.4 服務器統計信息35
3.5 檢查當前操作38
3.6 操作系統監控41
3.7 MongoDB Compass 42
3.8 小結43
第二部分應用程序與數據庫設計
第4章 schema建模46
4.1 指導原則46
4.2 鏈接與嵌入47
4.2.1 案例研究47
4.2.2 獲取客戶的所有數據50
4.2.3 獲取所有未結訂單51
4.2.4 熱門產品52
4.2.5 插入新訂單53
4.2.6 更新產品54
4.2.7 刪除客戶54
4.2.8 案例研究總結55
4.3 高級模式56
4.3.1 子集化56
4.3.2 垂直分區58
4.3.3 屬性模式58
4.4 小結60
第5章 索引61
5.1 B樹索引61
5.1.1 索引選擇性62
5.1.2 唯一索引63
5.1.3 索引掃描63
5.1.4 不區分大小寫的搜索64
5.2 複合索引65
5.2.1 複合索引性能66
5.2.2 複合索引鍵順序66
5.2.3 複合索引指南67
5.2.4 覆蓋索引67
5.3 索引合併68
5.4 局部索引和稀疏索引68
5.4.1 局部索引69
5.4.2 稀疏索引69
5.5 使用索引進行排序和連接70
5.5.1 排序70
5.5.2 連接70
5.6 索引開銷70
5.7 文本索引73
5.8 地理空間索引78
5.8.1 地理空間索引性能81
5.8.2 地理空間索引限制81
5.9 小結82
第三部分MongoDB代碼調優
第6章 查詢調優84
6.1 緩存結果84
6.2 優化網絡往返86
6.2.1 投影86
6.2.2 批處理87
6.2.3 在代碼中避免過多的
網絡往返88
6.2.4 批量插入90
6.2.5 應用程序架構90
6.3 選擇索引與選擇掃描90
6.4 優化排序操作93
6.5 選擇或創建正確的索引95
6.6 過濾策略97
6.6.1 不等條件97
6.6.2 範圍查詢99
6.6.3 $OR或$IN操作100
6.6.4 數組查詢101
6.6.5 正則表達式102
6.6.6 $exists查詢103
6.7 優化集合掃描105
6.8 小結105
第7章 調優和利用聚合管道106
7.1 調優聚合管道106
7.1.1 優化聚合排序109
7.1.2 自動管道優化111
7.2 優化多集合連接113
7.2.1 連接順序115
7.2.2 優化圖查找116
7.3 聚合內存利用118
7.4 在聚合管道中排序119
7.4.1 索引聚合排序119
7.4.2 磁盤排序121
7.5 優化視圖122
7.6 小結126
第8章 插入、更新和刪除127
8.1 基礎知識127
8.1.1 過濾器優化127
8.1.2 解釋數據操作語句128
8.1.3 索引開銷128
8.1.4 找到未使用的索引129
8.1.5 寫入策略130
8.2 插入130
8.2.1 批處理130
8.2.2 克隆數據132
8.2.3 從文件加載134
8.3 更新134
8.3.1 動態值批量更新134
8.3.2 multi:true標誌135
8.3.3 upsert 136
8.3.4 使用$merge的批量upsert 137
8.4 刪除138
8.5 小結138
第9章 事務139
9.1 事務理論139
9.2 MongoDB事務140
9.2.1 事務限制141
9.2.2 TransientTransactionError 141
9.2.3 MongoDB驅動程序中的事務143
9.2.4  TransientTransactionError對
性能的影響145
9.3 事務優化146
9.3.1 避免事務146
9.3.2 操作順序148
9.3.3 對熱文檔分區149
9.4 小結150
第10章 服務器監控152
10.1 主機級監控152
10.1.1 網絡153
10.1.2 CPU 155
10.1.3 內存156
10.1.4 磁盤IO 156
10.2 MongoDB服務器監控156
10.2.1 Compass 156
10.2.2 Free Monitoring服務157
10.2.3 Ops Manager 158
10.2.4 MongoDB Atlas 158
10.2.5 第三方監控工具160
10.3 小結160
第四部分服務器調優
第11章 內存調優162
11.1 MongoDB內存架構162
11.1.1 主機內存163
11.1.2 測量內存164
11.2 WiredTiger內存165
11.2.1 緩存大小165
11.2.2 確定佳緩存大小166
11.2.3 數據庫緩存命中率166
11.2.4 驅逐168
11.2.5 檢查點170
11.2.6 WiredTiger並發171
11.3 減少應用程序內存需求172
11.3.1 文檔設計172
11.3.2 索引173
11.3.3 事務173
11.4 小結173
第12章 磁盤IO 174
12.1 IO基礎知識174
12.1.1 延遲和吞吐量174
12.1.2 隊列175
12.1.3 順序IO和隨機IO 176
12.2 磁盤硬件176
12.3 磁盤177
12.4 固態磁盤177
12.4.1 SSD存儲層次結構178
12.4.2 寫入性能178
12.4.3 寫壽命179
12.4.4 垃圾回收和損耗均衡179
12.4.5 SATA和PCI 179
12.4.6 對SSD的建議180
12.5 存儲陣列180
12.5.1 RAID級別180
12.5.2 RAID 5寫入損失182
12.5.3  RAID 5設備中的非易失性
緩存182
12.5.4 自己動手實現陣列182
12.5.5 硬件存儲陣列183
12.6 雲存儲184
12.7 MongoDB IO 185
12.7.1 臨時文件IO 186
12.7.2 日誌文件IO 187
12.7.3 數據文件IO 190
12.8 檢測和解決IO問題193
12.9 增加IO子系統帶寬195
12.9.1 帶專用磁盤的專用服務器195
12.9.2 存儲陣列195
12.9.3 雲存儲196
12.9.4 MongoDB Atlas 196
12.10 小結197
第13章 副本集和Atlas 198
13.1 副本集基礎198
13.2 使用讀取策略199
13.2.1 設置讀取策略200
13.2.2 maxStalenessSeconds 201
13.2.3 標籤集201
13.3 寫入策略203
13.3.1 日誌記錄203
13.3.2 寫入策略w選項203
13.3.3 寫入策略與輔助節點讀取205
13.4 MongoDB Atlas 205
13.4.1 Atlas Search 205
13.4.2 Atlas Data Lake 209
13.5 小結212
第14章 分片213
14.1 分片基礎知識213
14.1.1 縮放和分片213
14.1.2 分片概念214
14.1.3 分片還是不分片214
14.1.4 分片鍵選擇215
14.1.5 範圍分片與散列分片216
14.1.6 區域分片218
14.2 分片平衡219
14.2.1 分片再平衡220
14.2.2 更改分片鍵223
14.3 分片查詢224
14.3.1 分片解釋計劃224
14.3.2 分片鍵查找226
14.3.3 意外分片合併227
14.3.4 分片鍵範圍227
14.3.5 排序228
14.3.6 非分片鍵查找229
14.3.7 聚合和排序230
14.3.8 分片$lookup操作231
14.4 小結231