iT邦幫忙

2022 iThome 鐵人賽

DAY 19
0
Software Development

NoSQL: Not Only SQL系列 第 19

[Day 19] Document Database: 以 MongoDB 為例

  • 分享至 

  • xImage
  •  

MongoDB 由 10gen 團隊(現為 MongoDB Inc.)在 2009 年推出,是 Document Database 的一種,功能和關聯式資料庫相當接近,同時又具備高可擴展性的資料庫。MongoDB 透過 Sharding Key 進行資料分片,每個分片稱為 Chunk;所有的資料也會有一或多份副本存放在 Replica Set,其中一個為 Primary,其餘的為 Secondaries,資料會先被寫入 Primary 後複製到 Secondaries,並保持最終一致性。MongoDB 使用的資料結構是 BSON (取義 Binary JSON),這讓開發者可以更加彈性的使用它,不需要預先定義完整 Schema 並強制所有資料共用,並可透過設定索引的方式提升查詢效能。

在 MongoDB 中,一筆資料是一個 Document,多個 Document 被存放在 Collection 中,而一個 Database 中可以有多個 Collection。
https://ithelp.ithome.com.tw/upload/images/20220921/20151137YXZJXQzYoR.png

由於 MongoDB「幾乎」具備關聯式資料庫的功能,像是可以使用複雜的查詢語法對資料進行查詢,和建立索引提升查詢效能,又同時擁有高可擴展性,可以透過加機器不斷水平擴展以滿足資料量的成長,成為主流的 NoSQL Database 之一,是許多開發者在挑選資料庫時的熱門選擇。

因為 MongoDB 的同筆資料會被存放在 Replica Set 多個副本中,如果是被寫進 Primary 和所有 Secondaries 之後才會回應寫入成功,效能會比較差,但可以確保資料遺失的機率較低;相反的,當只寫入 Primary 成功就回應寫入成功,可以提升寫入的效能,但當 Primary 在來不及同步到 Secondaries 前就出問題時,即便資料庫回應寫入成功,資料卻遺失了。讀取資料時,因為最終一致性表示有可能暫時存在資料不一致的狀況,如果選擇取不同副本都得到相同結果後才視為取得資料,效能也會比較差,但可確保取到的資料更即時更正確;若只要一或兩個副本擁有同樣的資料就回傳,則可有較快的回應速度,只是有機會取到過時不正確的資料。上述情境可以透過設定 read concernwrite concern 的數值來調整,視系統的設計需求決定如何在資料可靠度和效能間取捨。


上一篇
[Day 18] Document Database: 簡介
下一篇
[Day 20] Document Database: 以 MongoDB 為例
系列文
NoSQL: Not Only SQL30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言