欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

瞬間爆炸-MongoDB4.0將支持多文檔事務(wù)

瞬間爆炸-MongoDB4.0將支持多文檔事務(wù)

瞬間爆炸-MongoDB4.0將支持多文檔事務(wù)

創(chuàng)新互聯(lián)網(wǎng)站建設(shè)公司提供網(wǎng)站設(shè)計(jì)和自適應(yīng)建站服務(wù)。團(tuán)隊(duì)由有經(jīng)驗(yàn)的網(wǎng)頁(yè)設(shè)計(jì)師、程序員和市場(chǎng)專(zhuān)家組成,能夠提供從html5,網(wǎng)站制作,廣告投放平臺(tái),模板建站到小程序開(kāi)發(fā)等全方位服務(wù)。 以客戶(hù)為中心,致力于為客戶(hù)提供創(chuàng)新、高效的解決方案,幫助您打造成功的企業(yè)網(wǎng)站。

背景

Part1:寫(xiě)在最前

在早期,我們說(shuō)的MongoDB支持事務(wù)是指針對(duì)MongoDB的單文檔級(jí)別,與我們MySQL等關(guān)系型數(shù)據(jù)庫(kù)中的事務(wù)是不同的,那什么是單文檔事務(wù)呢?

>db.username.update({'name': 'helei'}, {$set: {'age': 26, 'score': 85}})

上述命令對(duì)username集合中,name為helei列的行進(jìn)行更新,如果age更新為26,score由于宕機(jī)或其他原因?qū)е赂率。敲碝ongoDB則會(huì)回滾這一操作。

Part2:單文檔ACID實(shí)現(xiàn)

MongoDB在更新單個(gè)文檔時(shí),會(huì)對(duì)該文檔加鎖,而要理解MongoDB的鎖機(jī)制,需要先了解以下幾個(gè)概念:

1.Intent Lock, 意圖鎖表明讀寫(xiě)方(reader-writer)意圖針對(duì)更細(xì)粒度的資源進(jìn)行讀取或?qū)懭氩僮鳌@纾喝绻?dāng)某個(gè)集合被加了意向鎖,那么說(shuō)明讀、寫(xiě)方意圖針對(duì)該集合中的某個(gè)文檔進(jìn)行讀或?qū)懙牟僮鳌?/p>

2.MGL多粒度鎖機(jī)制(Multiple granularity locking ),有S鎖(Shared lock), IS鎖(Intent Share lock), X鎖(Exclusive lock),IX鎖(Intent Exclusive lock)

在Part1中的例子里,MongoDB會(huì)為name為helei的文檔加上X鎖,同時(shí)為包含該文檔的集合,數(shù)據(jù)庫(kù)和實(shí)例都加上意向?qū)戞i(IX),這時(shí),針對(duì)該文檔的操作就保證了原子性。

MongoDB4.0中的多文檔事務(wù)

Part1:多文檔事務(wù)

MongoDB 4.0將增加對(duì)多文檔事務(wù)的支持,通過(guò)snapshot隔離,事務(wù)提供全局一致的數(shù)據(jù)結(jié)果,并且執(zhí)行要么全部成功,要么全部失敗來(lái)保證數(shù)據(jù)完整性。

MongoDB4.0中的事務(wù)對(duì)于開(kāi)發(fā)人員來(lái)講將會(huì)和普通的關(guān)系型數(shù)據(jù)庫(kù)一樣方便,例如start_transaction和commit_transaction。啟用多文檔事務(wù)的MongoDB也不會(huì)影響機(jī)器的負(fù)載。在今年夏天發(fā)布的MongoDB 4.0中,事務(wù)將率先在副本集上提供支持,而sharding架構(gòu)中多文檔事務(wù)也將在MongoDB4.2版本中實(shí)現(xiàn)。

在早期的MongoDB版本中,僅支持單文檔事務(wù),如果想使用多文檔事務(wù),需要依賴(lài)特別的數(shù)據(jù)建模才能夠保證。而在MongoDB 4.0中,無(wú)論您如何為數(shù)據(jù)建模,都能夠支持多文檔事務(wù)。

下圖展示了,在各個(gè)版本中新支持的核心特性:

瞬間爆炸-MongoDB4.0將支持多文檔事務(wù)

Part2:Python

在Python中如何開(kāi)啟一個(gè)事務(wù)

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中如何開(kāi)啟一個(gè)事務(wù)

try (ClientSession clientSession = client.startSession()) {
   clientSession.startTransaction();
   try {
       collection.insertOne(clientSession, docOne);
       collection.insertOne(clientSession, docTwo);
       clientSession.commitTransaction();
   } catch (Exception e) {
       clientSession.abortTransaction();
   }
}

——總結(jié)——

通過(guò)本文,我們了解到MongoDB4.0中最具顛覆性的特性--多行文檔事務(wù)的支持,以及開(kāi)發(fā)語(yǔ)言中如何開(kāi)啟一個(gè)事務(wù)。由于筆者的水平有限,編寫(xiě)時(shí)間也很倉(cāng)促,文中難免會(huì)出現(xiàn)一些錯(cuò)誤或者不準(zhǔn)確的地方,不妥之處懇請(qǐng)讀者批評(píng)指正。喜歡筆者的文章,右上角點(diǎn)一波關(guān)注,謝謝~

瞬間爆炸-MongoDB4.0將支持多文檔事務(wù)

瞬間爆炸-MongoDB4.0將支持多文檔事務(wù)

文章題目:瞬間爆炸-MongoDB4.0將支持多文檔事務(wù)
文章源于:http://www.chinadenli.net/article42/gghehc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供建站公司關(guān)鍵詞優(yōu)化小程序開(kāi)發(fā)搜索引擎優(yōu)化移動(dòng)網(wǎng)站建設(shè)網(wǎng)頁(yè)設(shè)計(jì)公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

網(wǎng)站建設(shè)網(wǎng)站維護(hù)公司