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 的適用場景

(一)您的雲端資料庫需要使用大量的運算功能,資料也需要被快速地發送至多個伺服器。

(二)您的公司規模不大,或沒有雇用資料庫管理人員(DBA)的打算,利用 MongoDB 的低維運的特性,就算沒有 DBA 的協助,您的資料庫依然能在無人維運的情況下正常運作。

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

(四)資料間的關係不複雜,且未來讀取資料時不會使用到 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 的代理商,如果想要獲得更多資訊,歡迎與我們聯繫



相關文章