fbpx

MongoDB – 最受歡迎的 NOSQL 資料庫

MongoDB – 為現代應用而生

MongoDB 擁有高靈活性、高可用性及可擴展性,蟬聯 DB-Engines 2018、2019 熱門排名第五名,也是 NOSQL 資料庫的領導者。MongoDB 能儲存 JSON 及Schema-free 的資料,是一種基於文檔的分散式資料庫,為開發人員和雲端時代的應用提供前所未見的生產力。

相較於傳統關聯式資料庫,MongoDB 對於巨量資料、高併發以及高可靠性有強大的支援;和其他 NOSQL 資料庫相比,MongoDB 基於文檔的資料模型及其動態建模的特性使得它更加自由靈活;分片 (Sharding) 的資料分散處理架構,使 MongoDB 得以透過水平擴充儲存海量資料,因此適用於各種應用場景如 CRM、內容管理、事件紀錄、商情分析、手機應用、社交等。

開發人員使用 MongoDB 來驅動創新的產品和服務,迄今 MongoDB 全球下載數超過 4 千萬次、企業用戶 6 千多家。Adobe、Cisco、ebay、Expedia、Facebook、Google、MetLife、SAP 等國際企業都是 MongoDB 的使用者。

MongoDB logo_darkreen

FEATURE

提供高性能、數據持久化

FEATURE

提供豐富的查詢語言執行讀寫操作

FEATURE

副本集配置,能提供高可用性、讀寫分離等功能

FEATURE

分片叢集能在不停機的狀態下,水平式擴展和資料自動平衡

FEATURE

支援多種儲存引擎

探索 MongoDB

敏捷可擴展的高速資料庫

高度使用彈性

MongoDB 是一種針對半結構化資料而設計,可不斷依使用需求擴充性能與容量的 NOSQL 巨量資料儲存系統,它能對 PB 規模且結構不定的資料塊進行 Ad hoc 查找與更新,並依然保有近乎即時的低延遲性。
 

MongoDB 擁有允許資料格式不一致的彈性以及大量儲存的能力,因此非常適合作為資料倉儲,或是作為中央資料庫以解決資料孤島問題。除此之外,MongoDB 強大的即時查找、修改、新增、刪除能力,同樣也適用於大多數關聯式資料庫所擅長的場合,如處理網站資料、用戶資料、部落格留言與地理資訊系統等。同時,MongoDB 也適合進行一些即時性高的輕量分析工作,如依據點擊迅速預測用戶使用偏好,豐富 MongoDB 的應用場景。

使開發變得容易

MongoDB 的文檔資料模型使開發人員易於學習和使用,同時仍提供滿足各種規模的複雜需求所需的功能。由於半結構化資料不強制規定資料欄位,MongoDB 也非常適合開發人員進行敏捷開發,開發者可以用最快速度製作出軟體系統,允許資料格式不一致的特性,使開發者可以更容易地適應快速變遷的業務。

MongoDB 是近年來高速竄起的新興資料處理平台,也是 NoSQL 中使用頻率與受關注度最高的資料庫,因此它的開發被大量注資,開發者社群與周邊生態圈狀況都相當良好,MongoDB 官方也提供絕佳的資源區建議的學習路徑

可線性擴充的容量與效能

MongoDB Shard Cluster

具有大數據集或高吞吐量的應用程式資料庫系統,對於單一主機而言可能會是挑戰。例如,高查詢率可能會過度消耗主機的 CPU 效能。分片 (sharding) 是一種在多台主機之間分配資料的方法。MongoDB 使用分片來實現非常大的數據集和高吞吐量操作的部署。

MongoDB 可以透過水平擴充增加更多節點,以補足垂直擴充架構的不足,來達到更大的儲存容量與更高的效能。這些節點可以分擔工作量,因此與單台高速大容量主機相比,可以提供更高的效率。擴充時可以根據需求增加主機,比起購置單台高昂硬體更能降低總體成本。隨著節點數增加,容量和資料吞吐量都會一併增加,隨著資源的投入,容量和性能均可以線性關係增長,可達到 PB 規模的資料量。

附圖為 MongoDB Shard Cluster 的基本架構圖,Sharding Cluster 使得集合的數據可以平均分散到多個 Shard 儲存,使 MongoDB 具備橫向擴展的能力。

高可用性架構

MongoDB Replica Set

MongoDB 內建副本集架構 (Replica Set),副本集是所有生產部署的基礎,並提供冗餘 (redundancy) 和高可用性 (high availability)。

每個副本集內部包含多台主機,其中一台為 Primary,其他台為 Secondary,多台機器之間的狀態及資料會自動同步。當 Primary 因故不可用時,系統會自動在數秒內從 Secondary 中選出一台 Primary 回滾原先 Primary 的寫入操作並恢復工作,從而實現高可用性。整個流程完全不須維運人員介入,就算系統在半夜當機下線也不用擔心。

Document Base

基於文檔的資料庫

MongoDB 採用 Document Base 的資料模型,每筆資料 (對應到傳統資料庫的 Row) 被稱為一個文檔,以類似 JSON 的文檔 (Document) 構建及儲存。基於 JSON 的規格特性,MongoDB 可以在欄位中儲存其他文檔,自然形成目錄般的多層結構,稱為次級結構;MongoDB 內建多值支援,可以在欄位中儲存多值陣列,無需另開表格。陣列欄位可被用戶充份掌握,不但可以在上面建立索引,也可以針對陣列中的個別元素進行搜尋與更新等操作,也可動態追加或刪除其中的任意元素。

文檔資料庫對於開發人員而言既自然又靈活,因此開發人員能確保更高的生產力,並根據應用程式的需求更快地進行開發。作為一種 NOSQL 資料庫,文檔資料模型已成為關聯式資料庫的流行替代方案。

  • 直觀的數據模型:更快速、更簡單
  • 靈活的架構:動態適應變化
  • 通用性:廣泛使用的 JSON 文檔
  • 功能強大:隨時查詢數據
  • 分佈式:彈性且易於擴展

MongoDB Atlas

雲端全託管分散式資料庫服務

MongoDB Atlas 是針對現代應用程式的雲端資料庫服務,可以在 AWS、Azure 和 Google Cloud 上完全託管。MongoDB Atlas 具有一流的自動化機制,確保高可用性、彈性、可伸縮性和最佳性能,以及符合嚴格的資料安全性和隱私標準。透過 MongoDB 強大的驅動程式生態系統、整合和工具,可以加快構建速度,並減少管理資料庫的時間,敏捷開發團隊可以更快地轉移服務,將時間用於構建應用程式而非管理資料庫。

  • 安全無虞
  • 完全託管的備份
  • 全面的監控和可自定義的警報
  • 以最短停機時間遷移現有部署
  • 雲端限定功能,如實時觸發器和全球集群

更多特色

強大的查詢語言

絕大多數的 NOSQL 資料庫缺乏良好的動態查詢能力,往往需要在資料存入初期就決定運用方式。與之相比,MongoDB 在 NOSQL 中擁有幾乎是最有彈性的動態查詢能力,面對半結構化的離散欄位,依然能進行篩檢分析。

MongoDB 的查詢語言本身就是 JSON 格式,因此很容易組合,不需要串聯字符生成 SQL 查詢,豐富而清楚的查詢語言可以按任意字段進行過濾和排序,儘管文檔中有多個層級也能查詢。它也支援聚合 (aggregation) 和現代的查詢需求,例如地理搜索、圖形搜索和文本搜索。

豐富的索引

MongoDB 使用基於 Btree 的索引 (index) 系統,並透過索引執行高效率的查詢。MongoDB 提供了許多不同的索引類型,用戶可以依照資料多樣性,建立不同索引查詢特定類型的數據。MongoDB 允許用戶針對半結構資料中的任何欄位甚至是部份不存在的欄位進行索引;也允許建立多級索引,用戶可以執行「先以出生地排序,再以出生日期排序」的操作。

地理索引

MongoDB 對地理空間資訊資料有一系列的支援,用戶可以對地理標記進行索引,讓應用程式能執行空間查詢。例如快速篩檢出最近的地標,或是半徑 200 公尺內的標記,又或是依照距離遠近排序等。

關於 MongoDB 你可能想問

Oracle 是一種關聯式資料庫,MongoDB 則以 document base 為主。MongoDB 和 Oracle 均能在常見的操作系統中運作,例如 Windows、Linux、Unix 等。Oracle 系統由 database、table 和 row 組成,而 MongoDB 則是以 document 、field 組織資料,擁有更好的架構彈性。

想了解更多,請參考:MongoDB and Oracle Compared

企業選擇資料庫解決方案時,成本是考慮的首要因素,其中包括軟體、硬體、研發和部署的費用,如果選擇 MongoDB ,它低價的授權費用和對硬體較低的需求,可以讓企業省下數百萬美元。

想了解更多,請參考:Why use MongoDB instead of Oracle?

MongoDB 並不支援 SQL,但它有自己的查詢語法且支援各種主流程式語言 (例如:Python、Java、C)

關於操作 MongoDB 查詢語言的範例,請參考 MongoDB CRUD基本觀念 或 MongoDB CRUD Operations

 

MongoDB 使用 Sharding (分片)來支撐大數據的儲存及性能擴展。藉由將資料拆分到多個分片節點上,以解決單機資源難以縱向擴展的問題。

想了解更多,請參考:FAQ: Sharding with MongoDB

想了解更多 MongoDB 資訊嗎?
歡迎與我們聯繫,由專人為您服務