日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

mongodb一致性协议_mongo的怎么保持事物的一致性-问答-阿里云开发者社区-阿里云...

發(fā)布時(shí)間:2023/12/2 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mongodb一致性协议_mongo的怎么保持事物的一致性-问答-阿里云开发者社区-阿里云... 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

http://docs.mongoing.com/manual-zh/tutorial/perform-two-phase-commits.html

要么操作全都執(zhí)行,要么都不執(zhí)行,不能執(zhí)行一半,改了幾條數(shù)據(jù)了,看哎喲好像不對(duì),那扔著吧。Consistency 在數(shù)據(jù)庫(kù)領(lǐng)域的意思跟在分布式系統(tǒng)里的意思不一樣,指數(shù)據(jù)的外部約束有沒有滿足,比如帳戶之間轉(zhuǎn)賬,不能最后總和還是負(fù)數(shù),或者超過原來的總和了。

那文檔中的辦法是怎么做的呢?簡(jiǎn)單說,就是在執(zhí)行操作之前,記下來要做什么,以后可以 redo。然后保證每個(gè)操作都是 冪等的 ,就是說重復(fù)執(zhí)行也沒事。比如,賦值是冪等的,但是加一個(gè)數(shù)就不是冪等的。利用 MongoDB 提供的單文檔的原子性,使用一些輔助的數(shù)據(jù)做到冪等,最后把輔助的數(shù)據(jù)清除掉。如果你的操作本身就是冪等的,那就不需要輔助數(shù)據(jù)了。如果要 undo,也是可能的,那就要記下如何 undo。

但是 ACID 中的 Isolation 是沒有的,也就是說事務(wù)之間有交叉,別的并發(fā)操作可以看到中間不一致的狀態(tài),上面說的外部約束只能最終得到保證。比如說,事務(wù) T1 包括 (張三:加100;李四:減100),事務(wù) T2 包括 (張三:加200;李四:減200),如果不加以限制,可能的順序是:

1.T1 (張三:加100)

2.T2 (張三:加200)

3.T2 (李四:減200)

4.T1 (李四:減100)

T2 執(zhí)行的時(shí)候可以讀取并修改 T1 的中間結(jié)果,在轉(zhuǎn)賬這個(gè)問題上沒有大問題,因?yàn)榧訙p是 可交換 的操作,先后不影響最終結(jié)果。但是如果我們把事務(wù)改成 T1 (張三 = 100;李四 = 100)和T2 (張三 = 200;李四 = 200) 這樣最終的結(jié)果就可能是 (張三 = 200;李四 = 100),有可能就不滿足一致性了。但是如果能在應(yīng)用里保證順序地執(zhí)行這兩個(gè)事務(wù),問題就避免了。

大家也了解 Isolation 有幾個(gè)級(jí)別,還有多版本等更復(fù)雜的。傳統(tǒng)數(shù)據(jù)庫(kù)在單機(jī)上也會(huì)在更強(qiáng)的 Isolation 和性能之間做權(quán)衡,提供不同的級(jí)別可選。這一點(diǎn)在分布式系統(tǒng)中被稱作 Consistency,實(shí)現(xiàn)起來的代價(jià)就更高了,所以 MongoDB 不支持。不過對(duì)大多應(yīng)用,這并不是太大的問題:

1.可能異常情況在邏輯上也是可以接受的,比如微信群發(fā),每個(gè)人收到的順序并不一樣。

2.可能邏輯上并發(fā)就是不可能的,比如一個(gè)用戶只能修改自己的數(shù)據(jù),比如只有一個(gè)線程寫數(shù)據(jù)。

3.或者把需要的數(shù)據(jù)放到一個(gè)文檔里,對(duì)單文檔,MongoDB 保證原子性,別的操作也不可能看到文檔一半被改了。

4.或者可以在應(yīng)用上層發(fā)現(xiàn)并解決。比如支付寶轉(zhuǎn)賬就自己實(shí)現(xiàn)了一套一致性協(xié)議,1分鐘之內(nèi)可以保證這一筆數(shù)據(jù)一致了。

對(duì)你的要求,如果可以通過修改數(shù)據(jù)模型,讓改動(dòng)在一個(gè)文檔里就方便了。最好是看看你具體的需要和應(yīng)用的假設(shè),分析分析可能出現(xiàn)的異常情況,最后想辦法。還有一個(gè)辦法,貴司可以購(gòu)買 MongoDB 的支持服務(wù),針對(duì)你現(xiàn)在的產(chǎn)品階段和需求 (開發(fā),維護(hù),咨詢,培訓(xùn)),提供不同類型的專業(yè)級(jí)支持,比再請(qǐng)個(gè)程序員 / DevOp / DBA 便宜靠譜多了。

總結(jié)

以上是生活随笔為你收集整理的mongodb一致性协议_mongo的怎么保持事物的一致性-问答-阿里云开发者社区-阿里云...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。