Azure CosmosDB配置多個(gè)Azure Region寫入時(shí),沖突類型和解決策略要如何考慮?
對(duì)于配置了多個(gè)寫入?yún)^(qū)域的Azure Cosmos DB帳戶,當(dāng)寫入者同時(shí)更新多個(gè)區(qū)域中的相同項(xiàng)時(shí),沖突劃分為以下三種類型:
插入沖突:
當(dāng)應(yīng)用程序同時(shí)從兩個(gè)或更多個(gè)區(qū)域插入具有相同唯一索引的兩個(gè)或更多個(gè)項(xiàng)時(shí),可能會(huì)發(fā)生這些沖突。例如,可能會(huì)因?yàn)镮D屬性而發(fā)生此沖突。所有寫入最初可能會(huì)在其各自的本地區(qū)域中成功。但根據(jù)所選的沖突解決策略,最終只會(huì)提交一個(gè)具有原始ID的項(xiàng)目。
替換沖突:
當(dāng)應(yīng)用程序同時(shí)從兩個(gè)或更多個(gè)區(qū)域更新單個(gè)項(xiàng)時(shí),可能會(huì)發(fā)生這些沖突。
刪除沖突:
當(dāng)應(yīng)用程序同時(shí)從一個(gè)區(qū)域刪除一個(gè)項(xiàng)并從其他區(qū)域更新該項(xiàng)時(shí),可能會(huì)發(fā)生這些沖突。
沖突解決策略:
Azure CosmosDB提供了靈活的策略驅(qū)動(dòng)的機(jī)制來(lái)解決更新沖突??梢葬槍?duì)Azure CosmosDB容器,從以下兩種沖突解決策略中進(jìn)行選擇:
1.Last Write Wins(LWW),最后寫入者勝出。
如果在執(zhí)行插入或替換操作時(shí)有兩個(gè)或更多個(gè)項(xiàng)發(fā)生沖突,沖突解決路徑值最大的項(xiàng)將成為優(yōu)勝者。如果多個(gè)項(xiàng)的沖突解決路徑的數(shù)字值相同,則由系統(tǒng)確定優(yōu)勝者。保證所有區(qū)域融合到單個(gè)優(yōu)勝者,并且提交的項(xiàng)的版本最終相同。當(dāng)涉及到刪除沖突時(shí),已刪除版本始終優(yōu)先于插入或替換沖突。不管沖突解決路徑的值如何,均會(huì)發(fā)生此結(jié)果。
“最后寫入者勝出”是默認(rèn)的沖突解決策略。它可用于SQL和MongoDB API帳戶。
2.自定義
此解決策略旨在使用應(yīng)用程序定義的語(yǔ)義來(lái)調(diào)解沖突。在Azure Cosmos DB容器上設(shè)置此策略時(shí),還需注冊(cè)合并存儲(chǔ)過(guò)程。當(dāng)在服務(wù)器的數(shù)據(jù)庫(kù)事務(wù)下檢測(cè)到?jīng)_突時(shí),將自動(dòng)調(diào)用此過(guò)程。在執(zhí)行提交協(xié)議過(guò)程中,該系統(tǒng)可保證正好執(zhí)行合并過(guò)程一次。