MongoDB事務(wù)
事務(wù)介紹
在 MongoDB 中,對(duì)單個(gè)文檔的操作是原子的。由于您可以使用嵌入的文檔和數(shù)組來捕獲單個(gè)文檔結(jié)構(gòu)中的數(shù)據(jù)之間的關(guān)系,而不是跨多個(gè)文檔和集合進(jìn)行規(guī)范化,因此這種單一文檔的原子性消除了對(duì)多文檔的需求許多實(shí)際用例的事務(wù)。
對(duì)于需要對(duì)多個(gè)文檔(在單個(gè)或多個(gè)集合中)進(jìn)行讀取和寫入原子化的情況,MongoDB 支持多文檔事務(wù)。對(duì)于分布式事務(wù),事務(wù)可用于多個(gè)操作、集合、數(shù)據(jù)庫、文檔和分片。
事務(wù)和原子性
分布式事務(wù)和多單據(jù)事務(wù) 從 MongoDB 4.2 開始,這兩個(gè)術(shù)語是同義詞。分布式事務(wù)是指分片群集和副本集上的多文檔交易記錄。多文檔事務(wù)(無論是在分片群集還是副本集上)也稱為從 MongoDB 4.2 開始的分布式事務(wù)。 對(duì)于需要對(duì)多個(gè)文檔(在單個(gè)或多個(gè)集合中)進(jìn)行讀取和寫入原子化的情況,MongoDB 支持多文檔事務(wù):
在版本 4.0中,MongoDB 支持副本集上的多文檔事務(wù)。
在版本 4.2中,MongoDB 引入了分布式事務(wù),這增加了對(duì)分片群集上的多文檔事務(wù)的支持,并合并了對(duì)副本集上多文檔事務(wù)的現(xiàn)有支持。
要在 MongoDB 4.2 部署(副本集和分片群集)上使用事務(wù),客戶端必須使用為 MongoDB 4.2 更新的 MongoDB 驅(qū)動(dòng)程序。
多文檔事務(wù)是原子的(即提供"全無"命題):
當(dāng)事務(wù)提交時(shí),事務(wù)中所做的所有數(shù)據(jù)更改都將保存在事務(wù)外部并可見。也就是說,事務(wù)不會(huì)提交其某些更改,而回滾其他更改。
在事務(wù)提交之前,事務(wù)中所做的數(shù)據(jù)更改在事務(wù)外部不可見。
但是,當(dāng)事務(wù)寫入多個(gè)分片時(shí),并非所有外部讀取操作都需要等待提交的事務(wù)的結(jié)果在分片中可見。例如,如果提交事務(wù),寫入 1 在分片 A 上可見,但在分片 B 上尚未顯示寫入 2,則讀取時(shí)的外部讀取"local"可以讀取寫入 1 的結(jié)果,而看不到寫入 2。
當(dāng)事務(wù)中止時(shí),事務(wù)中所做的所有數(shù)據(jù)更改將被丟棄,而不會(huì)變得可見。例如,如果事務(wù)中的任何操作失敗,事務(wù)將中止,并且事務(wù)中所做的所有數(shù)據(jù)更改將被丟棄,而不會(huì)變得可見。文章來源:http://www.zghlxwxcb.cn/news/detail-694815.html
準(zhǔn)備工作
MongoDB 使用事務(wù)的前提是 MongoDB 版本大于 4.0,需要配置 MongoDB 工作模式為副本集,單個(gè) MongoDB 節(jié)點(diǎn)不足支持事務(wù),因?yàn)?MongoDB 事務(wù)至少需要兩個(gè)節(jié)點(diǎn)。其中一個(gè)是主節(jié)點(diǎn),負(fù)責(zé)處理客戶端請(qǐng)求,其余的都是從節(jié)點(diǎn),負(fù)責(zé)復(fù)制主節(jié)點(diǎn)上的數(shù)據(jù)。mongodb各個(gè)節(jié)點(diǎn)常見的搭配方式為:一主一從、一主多從。主節(jié)點(diǎn)記錄在其上的所有操作oplog,從節(jié)點(diǎn)定期輪詢主節(jié)點(diǎn)獲取這些操作,然后對(duì)自己的數(shù)據(jù)副本執(zhí)行這些操作,從而保證從節(jié)點(diǎn)的數(shù)據(jù)與主節(jié)點(diǎn)一致。文章來源地址http://www.zghlxwxcb.cn/news/detail-694815.html
部署 | 功能 兼容性版本 |
---|---|
副本集 | 4.0 |
分片集群 | 4.2 |
鏈接:https://juejin.cn/post/6844904089612992520
?
到了這里,關(guān)于在 Node.js 中使用 MongoDB 事務(wù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!