創新互聯網站建設公司提供網站設計和自適應建站服務。團隊由有經驗的網頁設計師、程序員和市場專家組成,能夠提供從html5,網站制作,廣告投放平臺,模板建站到小程序開發等全方位服務。 以客戶為中心,致力于為客戶提供創新、高效的解決方案,幫助您打造成功的企業網站。
Part1:寫在最前
在早期,我們說的MongoDB支持事務是指針對MongoDB的單文檔級別,與我們MySQL等關系型數據庫中的事務是不同的,那什么是單文檔事務呢?
>db.username.update({'name': 'helei'}, {$set: {'age': 26, 'score': 85}})
上述命令對username集合中,name為helei列的行進行更新,如果age更新為26,score由于宕機或其他原因導致更新失敗,那么MongoDB則會回滾這一操作。
Part2:單文檔ACID實現
MongoDB在更新單個文檔時,會對該文檔加鎖,而要理解MongoDB的鎖機制,需要先了解以下幾個概念:
1.Intent Lock, 意圖鎖表明讀寫方(reader-writer)意圖針對更細粒度的資源進行讀取或寫入操作。例如:如果當某個集合被加了意向鎖,那么說明讀、寫方意圖針對該集合中的某個文檔進行讀或寫的操作。
2.MGL多粒度鎖機制(Multiple granularity locking ),有S鎖(Shared lock), IS鎖(Intent Share lock), X鎖(Exclusive lock),IX鎖(Intent Exclusive lock)
在Part1中的例子里,MongoDB會為name為helei的文檔加上X鎖,同時為包含該文檔的集合,數據庫和實例都加上意向寫鎖(IX),這時,針對該文檔的操作就保證了原子性。
Part1:多文檔事務
MongoDB 4.0將增加對多文檔事務的支持,通過snapshot隔離,事務提供全局一致的數據結果,并且執行要么全部成功,要么全部失敗來保證數據完整性。
MongoDB4.0中的事務對于開發人員來講將會和普通的關系型數據庫一樣方便,例如start_transaction和commit_transaction。啟用多文檔事務的MongoDB也不會影響機器的負載。在今年夏天發布的MongoDB 4.0中,事務將率先在副本集上提供支持,而sharding架構中多文檔事務也將在MongoDB4.2版本中實現。
在早期的MongoDB版本中,僅支持單文檔事務,如果想使用多文檔事務,需要依賴特別的數據建模才能夠保證。而在MongoDB 4.0中,無論您如何為數據建模,都能夠支持多文檔事務。
下圖展示了,在各個版本中新支持的核心特性:
Part2:Python
在Python中如何開啟一個事務
with client.start_session() as s: s.start_transaction(): try: collection.insert_one(doc1, session=s) collection.insert_one(doc2, session=s) except: s.abort_transaction() raise s.commit_transaction()
Part3:Java
在Java中如何開啟一個事務
try (ClientSession clientSession = client.startSession()) { clientSession.startTransaction(); try { collection.insertOne(clientSession, docOne); collection.insertOne(clientSession, docTwo); clientSession.commitTransaction(); } catch (Exception e) { clientSession.abortTransaction(); } }
——總結——
通過本文,我們了解到MongoDB4.0中最具顛覆性的特性--多行文檔事務的支持,以及開發語言中如何開啟一個事務。由于筆者的水平有限,編寫時間也很倉促,文中難免會出現一些錯誤或者不準確的地方,不妥之處懇請讀者批評指正。喜歡筆者的文章,右上角點一波關注,謝謝~
文章題目:瞬間爆炸-MongoDB4.0將支持多文檔事務
文章源于:http://vcdvsql.cn/article42/gghehc.html
成都網站建設公司_創新互聯,為您提供建站公司、關鍵詞優化、小程序開發、搜索引擎優化、移動網站建設、網頁設計公司
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯