MongoDB 是一個基於分散式文件存儲的資料庫,因此其常作為使用了大數據技術的公司的優選;MongoDB 的存儲是類 JSON 結構,因此在一些敏捷 Web 開發中也常使用到。 ...
什麼是 NoSQL
NoSQL 是一種非關係型資料庫管理系統,不需要固定的架構,可以避免 JOIN 連接,並且易於擴展。
NoSQL 常用於具有龐大數據存儲需求的分散式數據存儲,通常是大數據和實時 Web 應用程式等場景。
對於海量數據,使用 RDBMS 處理是會導致系統響應時間變慢,一般的替代方案都是在負載增加時橫向擴展到其他的伺服器上,而 NoSQL 比關係型資料庫更容易擴展。
NoSQL 的功能和優點主要是以下幾點:
- NoSQL 資料庫不遵循關係模型
- NoSQL 資料庫是無模式或具有寬鬆模式的資料庫
- NoSQL 提供簡單的 API 作為存儲和查詢
- NoSQL 可以以分散式方式執行,易於擴展
關於 MongoDB
MongoDB 是一個以 BSON 為數據模型的文檔資料庫,其中 BSON 是一種類 JSON 的二進位存儲格式。
文檔類似於 JSON 對象,其中存儲的也是鍵值對的數據結構,欄位的值也可以包括其他文檔、數組和文檔數組。
主要特點
- 易於使用:建模不是必需的,類 JSON 數據模型僅用一條數據表示覆雜的層次關係
- 易於擴展:自帶分片功能,完美支持橫向擴展(更多機器),無需更改應用程式的邏輯
- 功能豐富:支持通用的二級索引,支持聚合分析數據,支持生命周期有限集合,針對大文件存儲等等功能
- 性能卓越:使用多粒度鎖儘可能提高併發和吞吐量,使用儘可能多的記憶體作為緩存,儘可能為查詢自動選擇正確的索引
- 高可用:自帶副本集的概念,支持自動故障轉移和數據冗餘,對讀負載均衡非常友好
- 支持多種存儲引擎:自帶 WiredTiger 存儲引擎、記憶體存儲引擎,並且提供可插拔的 API 允許第三方開發存儲引擎
適用場景
MongoDB 主要有以下適用場景:
- 作為應用資料庫使用,類似於 Oracle、MySQL,由於其建模是非必需的,更適合創業公司快速迭代使用
- 由於其性能較高,且易於擴展,也常用在大數據領域中,通常是用作海量數據處理及搭建數據平臺
MongoDB 也有以下不適用場景:
- 高度事務化的系統:需要大量原子性複雜事務的應用程式使用傳統的關係型資料庫會更好
- 傳統的商業智能應用:針對特定問題的 BI 資料庫會產生高度優化的查詢方式。對於此類應用,數據倉庫可能是更合適的選擇
技術優勢總結
- 類 JSON 結構和對象模型接近,開發代碼量低
- 類 JSON 的動態模型意味著更容易響應新的業務需求
- MongoDB 原生支持的副本集提供 99.999% 高可用
- MongoDB 使用分片架構支持海量數據和無縫擴容
MongoDB vs 關係型資料庫
不同點 | MongoDB | RDBMS |
---|---|---|
數據模型 | 文檔模型 | 關係模型 |
資料庫類型 | OLTP(聯機事務處理) | OLTP |
CRUD | MQL/SQL | SQL |
高可用 | 複製集 | 集群模式 |
橫向擴展能力 | 原生分片完美支持 | 數據分區或者應用侵入式 |
索引支持 | B 樹 全文索引 地理位置索引 多鍵索引 TTL 索引 |
B+ 樹 |
開發難度 | 容易 | 困難 |
數據容量 | 沒有理論上限 | 千萬、億 |
擴展方式 | 垂直擴展 + 水平擴展 | 垂直擴展 |