fbpx

MongoDB 是什麼?MongoDB 優勢、適用場景和基本概念介紹

Toyota、Bosch、EA Games 等國際知名企業都是 MongoDB 的使用者, MongoDB 為什麼深受企業的愛戴?有什麼使用上的優點?

在上篇 MongoDB-最受歡迎的 NOSQL 資料庫的介紹中,我們詳細講解了 MongoDB 的產品性能以及優點。

這篇文章則會介紹 MongoDB 的基本觀念、合適使用情境以及相較於 MySQL ,MongoDB 的優勢。 

MongoDB 是什麼 ?

MongoDB 是一種開源的 NoSQL 文件資料庫,由於使用 JSON 文檔資料儲存結構,MongoDB 具有靈活、易於擴展、高效能這三種優勢。

相較於傳統的關聯式資料庫,用戶在使用 MongoDB 儲存資料時,無需事先定義資料架構,並且能夠自由地增加資料的 Key/Value 。

因此企業在處理巨量資料時,能夠花更少的時間,而且透過 MongoDB 允許資料格式不一致的特性,開發者也能夠輕鬆地處理資料架構不穩定的問題。

試想,一間企業每天有大量的資料需處理,這些資料涵蓋的範圍從客戶資訊到公司的銷售資料應有盡有。

每一種資料也有不同的特徵,如果使用傳統的 RDBMS (關聯式資料庫),用戶就必須先定義資料的格式與架構,才能將資料儲存。

然而,因為資料的種類繁多,如果每一筆資料都需要先定義才能存入,這樣效率會太過緩慢。

因此透過 MongoDB 的半結構和非結構化的資料儲存特性,開發團隊能夠省下時間和減少工作量。

MongoDB logo_darkreen

組成 MongoDB 的關鍵元素

在介紹完 MongoDB 的基本概念後,我們將在這段介紹組成 MongoDB 的重要元素,讓大家對 MongoDB 的架構有更全面的了解。

文件(Documents)

在 MongoDB 中,Document 是儲存資料的基本單位。

每個 Document 都是一個 JSON 格式的資料結構,包括一個或多個 key-value 對。

Document 是動態的,這代表同一個集合(Collection)中的不同 Document 可以擁有完全不同的欄位和結構。

當使用者將 JSON 文件儲存到 MongoDB 時,系統會將文件以 BSON(Binary JSON)格式儲存。

BSON 是 JSON 的二進制表示形式,具有更多資料類型和更快的傳輸速度。

在執行查詢時,MongoDB 會檢索相應的 BSON 並將其轉換回 JSON 以供使用者查詢。

以下是 MongoDB 官方對 BSON 的解釋:

「BSON ,即 Binary JSON。它的二進制結構能夠將資料類型和長度進行編碼。相較於 JSON,BSON 檔的傳送速度更快。」

Document 的靈活性和動態結構,以及 BSON 的高效傳輸特性,使 MongoDB 能夠有效地處理各種資料結構,並滿足現代應用程式的需求。

一個簡單的 Document 可能如下所示:

這個 Document 包括了三個欄位,其中地址是巢狀的 Document

集合(Collection)

在 MongoDB 中,Collection 是一個包含多個 Document 的容器。

它類似於關聯式資料庫中的表格,與表格不同的是,Collection 不需要固定的結構。

這意味著同個 Collection 中的 Document 可以擁有不同的欄位和結構。

Collections 常被用於組織和儲存相關的 Document。

例如,一個 Collection 可能包括一間公司所有員工的 Document,每個 Document 紀錄一位員工的詳細資訊。

在操作方面,Collections 提供了許多方法來查詢、插入、更新和刪除 Document。

開發者還可以索引 Collection,以加速查詢效能。

這種設計讓 Collection 非常靈活,能夠適應不同的資料需求和應用場景。

 

上圖是資料庫、集合和文件之間的關係。MongoDB 內可以有多個資料庫(Database),資料庫中包含多個集合Collection),集合中則包含多個文件(Document)

 

_id

在 MongoDB 中,_id 欄位是文件的主鍵(Primary Key),代表文件的唯一值。

每個文件都會有一個獨特的 _id 值,用於確保集合內資料的一致性和準確性。

若使用者在創建新文件時沒有指派 _id 值,MongoDB 會自動為集合中的每個文件生成一個長度為 12 位元組的 _id 值。

自動生成 _id值能確保資料的唯一性,使得資料在集合內的檢索變得更加直接和可靠。

索引(Indexes)

使用者可以在集合中的任何欄位上建立次級索引,次級索引能幫助使用者更快的搜尋 BSON 文件。

與預設的 _id 欄位索引不同,次級索引允許使用者在不同欄位上進行快速檢索。

少了這個功能,使用者就需要對整個集合進行掃描,逐一查找文件欄位。

次級索引在處理巨量資料時尤其重要,因為執行全集合掃描(Collection Scan)的成本非常高。

舉例來說,如果使用者的集合中儲存客戶資訊,並經常需要根據郵件進行查詢,那麼我們就可以在電子郵件地址這個欄位上建立次級索引,這樣就能直接透過電子郵件地址查詢使用者資料。

MongoDB 的 4 大優勢

(一)高效能(High Performance)

異於傳統關聯式資料庫,利用 Join 的運算功能進行資料的查詢。

MongoDB 採用基於文檔( Document Base )的模型,將資料嵌入至單一文檔中。

得益於這種特性, MongoDB 的查詢速度能與傳統關聯式資料庫相互媲美。

另外,MongoDB 能夠串聯眾多資料庫,快速的將 TB 級資料儲存,再將資料交付給擅於分析大數據的 Cloudera 進行處理。

(二)JSON 文檔資料庫(Document Database)

MongoDB 採用文件資料庫,將每筆資料以 Document 和 Field 的方式組織資料,這個特色的強大之處在於,它能夠匯總非結構化資料,將它們製作成快速且好看懂的資料目錄。

MongoDB-Document-Database

(三)廣泛支援的程式語言

以下是 MongoDB  支援的各種主流程式語言:

C、C++、C#,Erlang、Haskell、Java、JavaScript、Lisp、fibjs、node.JS、Perl、PHP、Python、Ruby、Scala、Go、Rust。

(四)合乎成本效益

MongoDB 提供多種靈活的計價方案。

如果您使用 MongoDB 的雲端版本 MongoDB Atlas 的話,您能夠選擇最符合您需求的付費方案。

另外,MongoDB Atlas 也具有自動規模化(Auto Scaling)的功能,能夠隨時調整資料集群的大小,透過這種方式,您能夠將成本降至最低,又能隨時保持應對突發狀況的靈活性。

4 個 MongoDB 的適用場景

MongoDB 是一種 NoSQL 資料庫,以其靈活性和可擴展性而聞名。

以下列出 MongoDB 的 4 個適用場景,希望能幫助您了解 MongoDB 的優勢和適用範圍:

(一) 需要處理大量資料和高併發請求的雲端資料庫

MongoDB 的水平擴展能力可以輕鬆應對資料量和流量的增長,確保應用程式的效能和可用性。

這對於需要大量運算功能,並將資料快速發送到多個伺服器的雲端資料庫來說至關重要,例如:

  • 電商平台: 處理大量的商品資訊、訂單資料和使用者行為數據。
  • 物聯網應用: 儲存和分析來自各種感測器的海量數據。
  • 遊戲平台: 儲存玩家資訊、遊戲進度和排行榜數據。
  • 社群媒體: 處理使用者資訊、貼文、訊息和互動數據。

(二) 沒有專職 DBA 的小型企業或團隊

MongoDB 的易用性和自動化管理功能,例如自動分片、自動備份和恢復,可以降低資料庫的運維成本和複雜度,即使沒有專職 DBA 也能輕鬆管理。

(三) 擁有大量尚未確定且未來還會變動的資料架構

MongoDB 的 schema-less 特性允許使用者在不預先定義 schema 的情況下儲存資料,這使得 MongoDB 非常適合處理 schema 經常變動的資料。

這對於擁有大量不穩定 schema 的應用程式來說非常重要,因為它可以靈活地適應 schema 的變更,而無需進行複雜的遷移或重構。

(四) 資料關係不複雜,且不需要進行 Join 運算的應用程式

MongoDB 的文件資料模型非常適合儲存和查詢具有嵌套結構的資料,例如:

  • 產品目錄
  • 使用者設定檔
  • 內容管理系統

這使得 MongoDB 非常適合資料關係不複雜,且不需要進行 Join 運算的應用程式,因為它可以避免 Join 操作帶來的性能開銷,並提供更簡單、更直觀的資料模型。

MongoDB 與關聯式資料庫的關係為何?

MongoDB 是一個文件導向的 NoSQL 資料庫,與傳統的關聯式資料庫如 MySQL、Oracle 或 SQL Server 有著本質上的差異。

這些差異不僅體現在資料管理的方式上,其中的文件導向和無架構設計使 MongoDB 在可擴展性和高可用性方面具有優越的效能。

雖然,MongoDB 和  MySQL 都是開源且常見的資料庫,兩種資料庫的核心理念卻截然不同,因為它們分別為解決不同的問題而生。

在選擇 MongoDB 前,使用者必須先了解關聯式資料庫(RDBMS)與非關聯式資料庫(NoSQL)間的區別。

因此接下來我們將介紹關聯式資料庫與非關聯式資料庫間的區別,並深入比較 MongoDB 與 MySQL 的差異。

關聯式資料庫(RDBMS)

關聯式資料庫(RDBMS)是一種傳統的資料庫系統,以結構化查詢語言(SQL)為基礎,將資料儲存於預定義的表格中。

這些表格包括行和列,彼此之間存在明確的關聯性。

在 RDBMS 中,使用者必須先將資料架構(Schema)和表之間的關係設定好。

這種預設方式使資料有明確的結構和關聯,但同時也會帶來一些挑戰。

因為一但將資料架構設定好,後續的變更就會變得相當複雜,尤其在資料量龐大的情況下,調整 Schema 不僅麻煩,更可能是個浩大的工程。

儘管如此,關聯式資料庫的結構化方式仍適用於許多情況。

例如,它特別適合遵循ACID 特性的產業,如資料交易密集的銀行系統、企業資源規劃(ERP)系統等。

這種強調一致性和完整性的設計使其成為這些場景的理想選擇。這種資料庫的代表是 MySQL 和 PostgreSQL。

非關聯式資料庫(NoSQL)

NoSQL 的意思是「not only SQL」,也就是不限為「關聯式資料庫」的資料庫統稱。

NoSQL 資料庫通常沒有固定的架構,也允許更高的水平擴展性和更靈活的資料結構。

NoSQL 資料庫的主要特點是它們可以快速存儲和檢索大量的非結構化或半結構化資料。

這使它們非常適合用於需要快速讀寫以及高吞吐量的使用情境,如:即時分析、物聯網(IoT)和大數據應用。

NoSQL 的代表有 MongoDB 和 Cassandra。

MongoDB 相較於 MySQL 的優點為何?

(一)服務零中斷

主機發生故障時, MongoDB 的副本集架構(Replica Set)能夠提供冗餘(Redundancy)和高可用性 (High Availability)。

每個副本集內部包含多台主機,其中一台為 Primary,其他台為 Secondary,多台機器之間的狀態及資料會自動同步。

因此,當故障發生時,系統會在幾秒之內從 Secondary 中選出一台 Primary 接管工作,從而達到零停機 。

然而,對 MySQL 來說,故障移轉的程序必須依靠手動完成。

因此維運團隊需要無時無刻的保持警覺,就算主機在半夜發生故障,維運團隊還是必須起床修復。

這不僅讓團隊無法好好休息,主機重新上線也需要耗費幾分鐘的時間。

(二)更快的開發時程

JSON 檔的本質是靈活的,每個文檔資料中的 Key Value 也不盡相同 。

例如:產品目錄中,儲存男裝資料與儲存電視規格資料的 Key/Value 是不相同的。

我們也稱這種現象為資料的「多型」。

使用 JSON 文檔,我們能夠在無需更改資料庫架構的情況下,隨意增添資料的 Key Value。

JSON 文檔這種對資料欄位沒有強制定義的特性,讓開發者能用最短的時間開發軟體系統。

反觀 MySQL ,如果貿然更改 MySQL 內的資料結構,會造成資料庫的停機或主機資源的大量耗損。

(三)更方便的擴充

隨著資料量的增多,再優秀的資料庫都會面臨擴充的需求,利用 MongoDB 的分片功能,資料庫中的工作量會被分散至多台主機中。

用戶只需根據自身的需求增加主機,而不用花費鉅額成本增添一台效能更好的主機系統,從而達到節省成本的目的。

而且使用者在擴充 MongoDB 時,無需更改資料庫內的設定,以減少擴充的複雜度。

然而,在擴充 MySQL 時,由於關聯式資料庫內寫入大量的 SQL Join,使用者必須調整資料庫內的所有程式碼、停機資料庫,同時必須小心地處理資料表格存放的節點。

(四)MongoDB 與 MySQL 的差異對照表

以下表格是 MongoDB 與 MySQL 之間的差別

  MongoDB MySQL
資料類型 非結構化或半結構資料 結構化資料
資料表示方法 JSON 文檔 Row、Table
JOIN 支援 沒有
架構 不需定義 須將資料定義為表格和欄位
查詢語法 Javascript SQL

語法差異

雖然 MongoDB 使用的術語和 MySQL 不同,但本質上是差不多的,差異可參考下方術語對照表 : 

SQL 術語 MongoDB 術語 說明
database database 資料庫
table collection 資料表格/集合
row document 行/文檔
column field 資料欄位/域
index index 索引

總結

MongoDB 是目前市面上最受歡迎的 NoSQL 資料庫,同時也是 NoSQL 資料庫領域中的領頭羊。

MongoDB 提供企業更方便的資料儲存解決方案、提供工程師更友善的開發環境,也讓企業在不用花費鉅額成本的情況下,能夠選擇一個價格更低廉,效能良好的資料庫替代方案。

歐立威科技是 MongoDB 的代理商,如果想要獲得更多資訊,歡迎聯繫我們!


加入歐立威 LINE 好友,了解更多產品資訊

加入好友