2021年7月7日 星期三

為什麼MongoDB總是在DB-Engine排行榜前五名,也是非關聯性資料庫的首選?帶你一解MongoDB的魅力所在

MongoDB是一款極受歡迎的非關聯性資料庫,我們可以從他的名字來了解,相當的有野心要做大!MongoDB名稱一開始來自於英文單字"Humongous",中文意思是"龐大"的意思,命名者一開始就想好要處理龐大的數據,故將他如此命名。但因為讀音的關係,大部分人都叫他芒果資料庫,卻忽略了命名者一開始的野心!

在DB-Engine排名中(下圖為2021年4月排行榜),MongoDB長期排在第5名,同時也是最受歡迎的NoSQL數據庫,除此之外,MongoDB的相關資源(如論壇)一直很活躍,加上MongoDB於2017年在納斯達克上市,使得MongoDB一直處於熱門狀態,歷久不衰!


💪MongoDB資料庫的特性

  • ✅文件資料庫,基於JSON/BSON,更靈活更可靠。
  • ✅動態DDL能力,沒有強制架構,支持快速迭代
  • ✅快速運算,數據快速查詢
  • ✅容易擴充,支援大量數據儲存
  • ✅強大支援功能,應用場景如CRM、內容管理、事件紀錄、商情分析、手機應用、社交等

有人說:MongoDB是NoSQL中最像SQL的數據庫

如下表所示:



database:與SQL的資料庫(database)概念相同

collection:相當於SQL中的table,一個集合可以存放多個文件。不同之處就在於集合的結構是動態的,不需要預先設定一個嚴格的表結構。更重要的是,MongoDB 不會對寫入的數據做任何結構上的校正

document :文件,相當於SQL中的row,一個文件由多個字段組成,並採用bson(json)格式表示

field:相當於SQL中的列column,差別在於field更靈活,可支援文件

💪MongoDB索引

毫無疑問,索引是一個資料庫最重要的能力,在這點MongoDB表現亮眼,MongoDB支援非常豐富的索引類型。利用這些索引,可以輕易找到想要的數據,而索引的類型和特性則是針對不同的應用場景設計的。索引技術仰賴於底層的儲存設定,目前MongoDB使用wiredTiger作為默認的引擎。

MongoDB的索引則使用B樹結構(B-tree),相對於其他傳統資料庫,例如MySQL則是使用B+樹(B+tree),MongoDB只要找到指定的索引,就可以對其進行訪問;單獨查詢MongoDB將比MySQL快。

圖-B樹

除了一般索引,MongoDB還有支援以下索引類型:

Hash index:另一種快速檢索的數據結構

Geospatial index:支援空間地理位置查詢,例如尋找附近1公里的小吃店

Text indexes:全文檢索

Wildcard index(模糊索引):在4.2版本開始加入,能更靈活查詢資料庫

💪MongoDB彙集

在大數據定義中的4V,Volume(容量)是最重要的;由於垂直擴充有上限,水平擴充則顯得更有優勢,MongoDB則擁有水平擴充的能力,可以將數據儲存到多個機器上以提供更大的容量和負載能力。此外,同時為了保證數據高可用性架構,MongoDB採用複製集的方式來實現數據複製。

💪MongoDB複製集

複製集可以作為Shard Cluster中的一個Shard之外,對於規模較小的業務來說,也可以使用一個單複製集的方式進行部署。MongoDB的複製集採取了一主多從的結構,即一個Primary Node + N* Secondary Node的方式,數據從主節點寫入,並複製到多個備節點。

典型架構如下:


利用MongoDB複製集,我們可以達到下列目標:

  • ✅資料庫可用性提高,主節點若當機,由備節點自動成為新的主節點
  • ✅讀寫分離,讀可以分流到備節點,減輕主節點的壓力

💪MongoDB開始支援資料庫交易

身為NoSQL資料庫的MongoDB,無法支援資料庫交易一直是被大家所詬病的事情(NoSQL資料庫本身就是放棄資料庫交易,追求高效率及可擴充性為主)。MongoDB一直都有資料庫交易的概念,但只針對文件資料庫為主,在4.0版本以後的MongoDB,便開始支援許多文件資料庫交易:

  • ✅4.0 版本支持複製集範圍的多文件資料庫交易
  • ✅4.2 版本支持資料分片的多文件資料庫交易

💪MongoDB未來發展

MongoDB的未來發展性很強,其靈活的開發模式彌補了傳統關聯式資料庫的缺陷,終於可以理解為什麼可以在DB排行榜上佔據第五名的地位(文件資料庫排行第一名)!


😀😀😀😀看了這麼多MongoDB的介紹,是否還意猶未盡呢?

恆逸推出的MongoDB課程不僅將上述的功能完整介紹,講師也會透過實作,帶您了解正確的MongoDB架構,透過課程,您將可以學習到下列技術:

  • ✅具備管理MongoDB日常操作與備份的能力
  • ✅使用MQL操作MongoDB資料
  • ✅使用MongoDB複製集建置高可用性架構
  • ✅使用MongoDB資料分片擴充MongoDB容量
  • ✅正確使用MongoDB安全功能強化MongoDB資料安全

👉👉快點選[恆逸]MongoDB管理與開發了解更多

0 意見:

張貼留言