MongoDB是什麼?MongoDB介紹及應用、架構、優點
Posted On 2021 年 12 月 28 日
MongoDB是什麼?
MongoDB 是一個開源的「NoSQL ( 非關聯性 ) 文件資料庫」,相較其他種類的 NoSQL 資料庫,文件資料庫(Document Database)的特色在於適合存取非結構資料,例如:HTML 網頁。
MongoDB功能?
MongoDB 內可有多個資料庫(Database),包含多個集結(Collection),集結包含多個文件(Document)。主要功能為提供 WEB 應用可擴充套件的高效能資料儲存解決方案,具有下列特點:
-
支援查詢與完全索引
MongoDB 保留了關係數據即時查詢的能力,保留了索引內部物件的能力。
-
支援雲端計算層次的擴充套件性
MongoDB 自身提供自動處理碎片的能力,副本集能將數據分布在多台機器,可以提供自動故障轉移、擴展的能力。
-
支援複製與故障恢復
MongoDB 提供了 Journaling 日誌的概念,日誌寫入紀錄,進程突然中斷的情况,可以保障數據不會錯誤,可以進行修復。
MongoDB語言支援?
MongoDB 官方的驅動:
C、C++、C#、Erlang、Haskell、Java、JavaScript、Lisp、fibjs、node.JS、Perl、PHP、Python、Ruby、Scala、Go。
非官方式的驅動:
ColdFusion、Delphi、 Erlang、Factor、Fantom、JVM languages、Lua、HTTP REST、Racket、Smalltalk。
MongoDB系統架構?
Standalone 單機
Standalone 架構是最簡單的 MongoDB 架構,只有一個 MongoDB 的實體,只有一個資料庫存取資料。可獨立使用或維護複製集群或分片集群的單一節點。
Replica Set 複製集群
三個對等的節點構成一個「複製集」集群,是 MongoDB 垂直擴展的最小單位。
在複製集架構(HA架構)下,Primary負責寫請求,Secondary負責讀請求,當Primary失效則策略性分離讀寫請求,讀取較近或快的副本,除了可以避免單點故障問題,也可分散讀取請求,提升讀取的效能。
Sharded Cluster 分片集群
數據水平擴展的方法,分片集群可以將整個 collection 的數據分派到各節點,可分散寫入請求,提高寫入的效能。基本上 sharding 可以支撐數 TB 的數據,解決了 Replica Set 複製集群「集群數據容量」受限於單個節點的磁碟的擴充上的困難。
MongoDB相較MySQL的優點有哪些?
(一)不須先創立數據表格,且數據格式自由
MySQL 須創建表格讓 MySQL 抓取數據,而 MongoDB 不需事先創建表格,也能將數據直接寫入並彈性添加欄位,且欄位的格式較自由,例如:欄位使用數字或是字符串皆可。
(二)可以處理json結構
MongoDB 將資料儲存為文件(類似 JSON 物件),以 field-value 為結構成對儲存,value 可以包含值、文件、陣列、文件陣列,讀取欄位內的數值。
舉例來說:
欄位 a 的值為
{ “a”: 11, “b”: 12, “c”: “abc”, “d”: [1,2,3] } |
可以直接去讀取或設置 a 欄位的 b 值 a.b,讀取 a 欄位 d 數組的第二個值:a.d.1,可以去刪除 a 欄位的 a 數據 $unset:{“a.a”: 1} ,就會變成:
{ “b”: 12, “c”: “abc”, “d”: [1,2,3] } |
(三)查詢插入效率高
採用 MySQL 存儲,每次查詢需要使用外鍵查詢多個表,在新增數據時也一樣需要更新許多表格;而使用 MongoDB 儲存,只需要更新一條數據,就能同時更新在應對的嵌套文檔中內容。
MongoDB的應用?
MongoDB具有處理大量資料、加速開發速度、降低成本支出等特色,目前已經有900萬下載次數,使用者包括 Global 500,如 eBay、Cisco、MetLife、Adobe等等。
MongoDB可以高效能處理大數據,適用場景多元涵蓋CRM、內容管理等等。
MongoDB應用場景:
網站即時數據(登/出入)
快速存取
大型、低價值檔案的儲存
有擴充需求的資料儲存
物件或 JSON 數據存儲
MongoDB不適用場景:
-
高交易需求的系統,例如:銀行、會計系統
-
商業智慧BI的應用
圖/文:簡安琪