MongoDB NoSQL Transaction ACID

MongoDB 4.0搶先看 - 副本集支持多文檔事務

莊興旺 2018/04/18 09:17:05
876

MongoDB 4.0搶先看 - 副本集支持多文檔事務


簡介

NoSQL資料庫大多不提供事務機制,原因在於它們是分散式系統架構,其一系列寫操作存取的資料,可能位於不同的分區伺服器。因此,分散式的多文檔事務,其原子性需要很高的協調性。內文將重點介紹 MonogDB 的事務之路 (Path to Transactions)。

作者

莊興旺


MongoDB 4.0搶先看 - 副本集支持多文檔事務

 

前言

MongoDB 為聚集導向的NoSQL

MongoDB 讓用戶透過靈活的資料結構,設計 "聚集" 後的資料,提供AP想要處理資料的最小單位(Document),適合分散式資料庫儲存。

 

 

. Relation to Document

 

NoSQL設計,很難滿足事務特性。

資料庫系統在做 "事務 transaction" 操作時,需具備ACID4個特性:

1.         原子性(Atomicity):要麼全部被執行,要麼都不執行

2.         一致性(Consistency):資料應滿足完整性約束

3.         隔離性(Isolation):事務併發時不互相影響

4.         持久性(Durability):提交後的事務將被永久保存

 

我們常聽到,NoSQL犧牲強一致性,使其能在分散式架構,水平擴展換取高可用性。但是,資料分散在多節點,很難保證多聚集事務的原子性,故通常NoSQL初始設計就不支持多聚集的事務功能。

 

通常來說,聚集導向的資料庫在跨多重聚集時並沒有 ACID事務。但是,每一次在單一聚集上的操作則是支援原子性質。這代表,若我們想要在單一動作中操作多重的聚集,必須要自行在應用程式碼中管理。 (參考 "搞懂NoSQL15堂課"

 

但是,MongoDB身為NoSQL的領頭羊,其設計理念為 Nexus 架構 (集結RDBNoSQL優點),自身又定位為通用型資料庫,仍不放棄實現NoSQL事務功能。因此,MongoDB開發團隊正逐步實現多文檔事務所需的基礎建設,等到功能完善,將讓開發者得以處理更多應用場景。(例. 金流系統、進銷存系統、帳單系統)

 

. 文檔聚集的一種表現方式

多文檔事務

釋出時間

MongoDB, Inc.預計在2018年夏天釋出4.0,將支持多文檔事務,4.0事務的系統架構只限於副本集 Replica Sets),而分片叢集 Sharded Cluster 的事務,預計要等到4.2

Java - Transaction Semantics pseudo

 

開發歷程/事務之路

MongoDB為了事務的資料完整性,於2014/12/16宣布併購WiredTiger Inc.,引進其儲存引擎技術,作為事務的基礎建設。

 

. Roadmap to Transactions

 

l   MongoDB 3.0 具備文件級(Document Level)的並行控制以及壓縮功能,還提供MVCCMultiversion Concurrency Control)這種像是PostgreSQL關聯式資料庫,確保事務功能的儲存層基礎功能。

 

l   MongoDB 3.2 新增

1.         Replication protocolVersion: 1 增強型共識協定,能讓主要副本集(Primary Replica Set)成員的網路分區(Network Partition)快速的從故障中恢復,並更嚴謹的確保寫入的持久性(Durability)。

2.         readConcern選項 (讀取多少副本後回應),允許應用程序在每個操作的基礎上,指定讀取隔離級別,從而提供強大的粒度一致性控制。

 

l   MongoDB 3.6 引入

1.         全局邏輯時鐘 Global logical clock/ Cluster Wide Logical Time 協助建立分散式叢集的全局資料快照,以實現多文檔事務快照隔離。通過快照隔離(Snapshot isolation),事務將提供全局一致性資料視圖,並執行 all-or-nothing來維持資料完整性(Data integrity)。此功能在分佈式集群中的每項操作中使用一致的時間,讓多文檔事務能夠提供快照隔離保證。

2.         儲存層時間戳 WiredTiger timestamps 強化分散式儲存層的操作順序之正確性。

 

上述兩者,支撐起3.6大量新功能的實現:

Ø  Consistent secondary reads in sharded clusterSafe Secondary Read即使系統正在叢集間搬遷資料做平衡,也會對 Secondary 成員提供一致的讀取。

Ø  Logical sessions Causal consistency Retryable writes的基礎,從多文檔事務的角度來看,它們的價值在於協調分散式叢集客戶端和伺服器操作,管理事務中每個語句執行的上下文。

Ø  Retryable writes 允許 MongoDB drivers在網路異常或選舉Primary期間,自動重新執行一次事務(原子性操作)。簡化應用程序的開發工作。

Ø  Causal consistency 允許開發人員在“讀取自己的寫入”保有強一致性,是根據Logical sessions和全局邏輯時鐘的啟用。確保寫入節點的資料,傳播到讀取節點上。

Ø  Change streams 允許開發人員構建響應式應用程序,當資料庫資料變動時,實時查看、過濾和觸發。Global logical clockWiredTiger timestampsChange streams提供了可恢復性(resumability -從短暫故障節點中自動恢復。因此消費類應用程序可以從發生節點故障的時間點,繼續完成更改。

 

l   MongoDB 4.0已經完成的功能,是支援副本集時間點讀取(Replica Set Point-in-time Reads),不只對於維持事務一致性十分關鍵,在日常讀取運作上也很有用。離完整的事務功能,只剩幾步之遙。

小結

NoSQL 聚集導向的資料結構,大多無法支持多文檔的事務,限制了 NoSQL 的應用場景。

 

即使應用程式不需要事務,或改由 Two-phase Commit方式完成,用戶仍不敢將 RDB 換成 NoSQL

用戶往往會想說,如果系統突然需要用到事務怎麼辦 ?

 

2018 2月,MonogoDB Inc. 宣布今年夏天將釋出新功能 - 副本集支持多文檔事務,讓用戶放心使用 NoSQL

看到MDB的股價從2月份開始持續上漲,我們能明白,整個市場看好MongoDB的未來發展。

NASDAQ - MDB

莊興旺
最熱門文章
  • 最熱門文章
  • 同作者文章