這篇文章是 MongoDB Developer 考證照的重點,翻譯與整理自官方的Study Guide,我是當作考前快速複習使用,至少知道每一個項目的內容是什麼。
建議學習方式是直接到官方免費線上課程 MongoDB University,上課時間彈性自由,透過實做與測驗讓你印象更深刻。
考取證照:MongoDB Developer Certification
開發者證照課程
- M001 MongoDB Basics
- M103 Basic Cluster Administration
- M121 Aggregation Framework
- M220 MongoDB for Developers
- M201 MongoDB Performance
- M320 MongoDB Data Modeling
CRUD
- CRUD 語法,以及如何使用
- MongoDB 支援的資料型別
- 不會考語法記憶,但需要知道正確語法長相、必填或選填參數。
Create
- insert(insert, insertOne, insertMany), update, upsert, save
- Bulk insert(ordered, unordered)
- _id 對於 CRUD 的影響
- ObjectId 建立與應用
Read
- find(query, projection, options, sort)
- interpret regular expression
- array query(VERY important)
- findAndModify(aggregation, project, embedded)
- find() return cursor
- findOne() return single document
- cursor methods
Update
- 了解 update 參數、流程與 save 指令
- findAndModify, findAndUpdate
- update 參數:
- set, unset
- setOnInsert
- inc, mul, min, max
- rename
- Array:
- pop, addToSet
- pull, pullAll
- push
- each, slice, sort, position
Delete
- drop collection
- remove, deleteOne, deleteMany, findOneAndDelete
- How to use TTL
Index
- Default _id index
- Get, Create, Drop index(es)
- 什麼是
Collection Scan
?如何造成的?如何避免?
Index 概念(VERY IMPORTANT)
explain
如何使用、解讀- 如何使用 index 排序
- 什麼是
Covered Queries
- ESR 是什麼
- Index 對於寫入效能影響
Index Types
了解以下 Index:
- Single index
- Compound index
- 順序影響
- Multikey index
- 限制是什麼
- Geospatial index
- 如何建立 2d, 2dsphere index
- geoJSON
- within a circle
- Near a point
- within a polygon
- Text index
- 如何建立與使用
- 如何排序結果
- Hashed index
- hashed index
- compound hashed index
- Wildcard index
Index properties
- Unique index
- TTL index
- Hidden index
- Partial index (vs Sparse index)
- Hybrid index
- Regex 在字串與 index 使用
Data Modeling
- 給予兩個資料模型,選擇有效率的
- 瞭解常用的資料結構設計模式
- 了解 MongoDB 特殊的資料型別好處
- 了解嵌入和連結資料的差異
Introduction
- 了解 Working set 的定義
- 為什麼讀 working set 大小對於讀寫資料效率很重要
- 用各種方式來資料建模
- GridFS
- Read-only views
- Collations
- Special-case 資料型別
Document structure
- 嵌入和連結資料的差異
- 正規化/反正規化的意思
關聯式和 MongoDB 模式
- 關聯式資料庫和 MongoDB 的差異
one-to-one
- 定義、適用場景
- one-to-one 中,嵌入和連結資料的優缺點
one-to-many
- 一對多的選擇有哪些
- 常用的一對多模型
- 各自的優缺點
Many-to-many
- 如何替多對多建立模型
Modeling tree structure
- 常見的樹狀模型
- 各自的優缺點以及讀寫情況的考量
Schema design patterns
- 如何建立關鍵字搜尋的模型
- 如何建立貨幣類型模型
BLOB options
- GridFS 可以儲存 BLOB 且能夠查詢的結構
- GridFS 的一個文件大約大小
- 如何儲存、操作 GridFS
Views
- 什麼是 View?如何建立 View
- View 如何使用 Index
- 能夠使用 View 做甚麼事
Collation and Case Sensitive Indexes
- 如何在 Mongo shell 中查詢 Collation
- Index collation
- Collection collation
- 哪些 Collation 較優先
locale
欄位是甚麼- Which values of strength use diacritics (2+)
- The default strength of a collation (3) and what it uses
- 甚麼樣的 Collation 查詢可以/不可以使用 index
- 如何建立、使用 case sensitive index
NumberDecimal
- 為什麼需要 NumberDecimal
NumberDecimal
vsNumberLong
vsdouble
- 如何 insert / store / get
- 跟十進位數字的精確度比較以及
double
進位等精確度
各種 Pattern
- Polymorphic
- Attribute
- Bucket
- Outlier
- Computed
- Subset
- Extended reference
- Approximation
- Tree
- Pre-allocation
- Doucment versioning
- Schema versioning
- Anti-pattern: Massive arrays
Aggregation
stage 與 operators 內容太多了,請直接熟讀官方文件
- 了解每個 stage 以及意思(所有 stage 語法)
- 了解多個
$group
、$unwind
會發生甚麼事與運作
Operators
- 所有 Operators 都可以在任意 stage 中使用
- 有些 stage 獨有的 operators
Mechanics
- Memory 限制
- 如何最佳化 aggregation
- aggregation 如何搭配 index 使用
- aggregation 所有的 options 及其影響
Replication
- replication 是甚麼?好處是?以及在速度和容量上有甚麼 tradeoff
- oplog 是甚麼、如何運作,以及是 idempotence 和 statement-based
- 當節點失效會發生甚麼事情
- replication 目的是資料的 high availability 與 durability
Node
- Arbiter, Delayed
- votes, priority
- 建立 replica 的語法
- 了解 initial sync
Election
- 甚麼時候進行 election
- priority, votes, optime 和 unreachable server 對於投票的結果影響
- 甚麼樣的節點會取得投票結果
Failover
- 甚麼情況會觸發 Failover
- Failover 時,會觸發 Election
Rollback
- 甚麼情況下會觸發 rollback
- 當觸發 rollback 時,資料會發生甚麼事?如何 rollback?
rs.status()
- 完全了解相關內容
Replica set reconfiguration
- 功能是甚麼?
- Add/Remove replica set members
Oplog
- idempotent
- 甚麼樣操作會存在 oplog
- 寫入時,oplog 如何儲存 document 的 _id
- 了解寫入,會產生多少 oplog 筆數
Read preference
- 哪些 node 的設定,可能會被查詢
- 甚麼情況下會讀取到 stale 資料
Write concern
- default 設定是甚麼
- 如何設定 write concern 為 majority 或是 固定數量的節點
- 當設定這些 write concern,需要有多少節點有資料副本
- How to ensure writes get to the journal before the acknowledgment
Sharding
- 如何建立 sharding
- 水平擴展
- 如何選擇正確的 shard key,以及選擇錯誤的損失
- 了解 load balancer 的腳色
- 了解
config server
的職責 - Sharding 是水平擴展與提升讀寫乘載量
- Replication 是提高資料
durability
、high availability
Shard key
- 4.2 開始,shard key 是 mutable,除非他是
_id
- 甚麼是好的與不好的 Shard key
- Range-based shard key 如何運作
Chunk and Balancer
- 如何用 Shard key 定義 Chunk 範圍
- 如何知道一個 document 屬於哪個 chunk 範圍
- 甚麼狀況會自動切割 chunk
- balancer 如何透過 chunk 來達到 cluster 平衡
Config server and Cluster metatdata
- Config server 是甚麼、職責
- Config server 取得資料的流程
- 如果 config server 失效了,會發生甚麼事
- Config servers 是由甚麼類型的 server 所構成
- 當 Config server 無法被選為 Primary 會發生甚麼事
Server Tools
mongoimport
,mongoexport
vsmongodump
,mongorestore
mongostat
,mongotop
,mongofiles
,bsondump
Storage Engines
- WiredTiger concurrency level
- WiredTiger 可用的壓縮演算法
- WiredTiger 特性:
- Lock/Concurrency (document level)
- Jopurnaling
- Data compression
- Default: snapp(all collections & prefix compression for all indexes)
- Collection: zlib, zstd
- Data files 長相
- In-memory storage engine
祝各位父親節快樂~