Azure CosmosDB配置多個(gè)Azure Region寫入時(shí),要如何考慮沖突類型和解決策略?
我來(lái)答

Azure CosmosDB配置多個(gè)Azure Region寫入時(shí),要如何考慮沖突類型和解決策略?

王喬 2020-09-24 提問(wèn)
264

Azure  CosmosDB配置多個(gè)Azure  Region寫入時(shí),沖突類型和解決策略要如何考慮?

關(guān)閉
提交回答
1 個(gè)回答
我來(lái)答
何劍

對(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ò)程一次。

回答于 2020-09-24
贊同
評(píng)論
掃碼關(guān)注
獲取更多出海問(wèn)答的相關(guān)信息
小程序
快出海小程序
公眾號(hào)
快出海公眾號(hào)
商務(wù)合作
商務(wù)合作
投稿采訪
投稿采訪
出海管家
出海管家