專案初期面臨:需求頻繁變更、追求敏捷開發、Client/API 支援完善、部署簡單、擴展性強、資源佔用低。經評估縮減至 MongoDB 與 Redis,最終因資料格式為 JSON 選定 MongoDB。
| 優勢 | 說明 | 對比 MySQL |
|---|---|---|
| JSON/BSON 原生 | 儲存、查詢、索引皆支援 JSON 結構 | 需 JSON 欄位 + 虛擬欄位/Generated Column,功能受限 |
| Schema-less | 集合無固定結構,文件欄位可動態增減、型別不同 | ALTER TABLE 鎖表、鎖定 Schema、遷移痛苦 |
| 嵌入文件 | 一對多關係可內嵌子文件,避免 JOIN,讀取單次 IO | 正規化拆分多表,JOIN 成本高 |
| 查詢語法直觀 | JSON 風格查詢:{field: {$gt: 10}},支援正則、範圍 | SQL 複雜、需 ORM 映射 |
| CRUD 簡單 | 傳物件直接 insert/update,支援 upsert | 需組裝 SQL、處理參數綁定 |
| In-place Update | Modifier ($inc, $push, $set) 伺服端原子操作 | 需讀取-修改-寫入往返 |
| 全欄位索引 | 任意欄位、陣列元素、嵌套欄位皆可建索引 | 需預先定義索引欄位 |
| 高效能、低 CPU | C++/Boost 編寫,多數場景快於 MySQL,CPU 佔用極低 | 複雜查詢 CPU 佔用高 |
| 部署極簡 | 二進制解壓即運行,幾乎零配置 | 需配置 my.cnf、權限、字符集等 |
| Server-side Script & MapReduce | JS 函數伺服端執行、MapReduce 聚合分析 | 預存程序語法繁瑣、MapReduce 無原生支援 |
Redis 資料結構豐富、效能極高,但專案核心資料模型為 JSON 文件,MongoDB 原生支援更貼合;且早期版本記憶體限制較大(新版已改善)。
選型無絕對優劣,關鍵在於「資料模型、查詢模式、團隊技術棧、運維能力」四維匹配。MongoDB 讓我們在 JSON 導向專案中獲得極大敏捷度。