Azure Lei Zhang的博客

weibo: LeiZhang的微博/QQ: 185165016/QQ群:319036205/邮箱:leizhang1984@outlook.com/TeL:139-161-22926

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

  《Windows Azure Platform 系列文章目录

 

  当我们为CosmosDB配置多个Azure Region写入,就需要考虑冲突类型和解决策略。

  对于配置了多个写入区域的 Azure Cosmos DB 帐户,当写入者同时更新多个区域中的相同项时,可能会发生更新冲突。 更新冲突划分为以下三种类型:

  插入冲突:

  当应用程序同时从两个或更多个区域插入具有相同唯一索引的两个或更多个项时,可能会发生这些冲突。 例如,可能会因为 ID 属性而发生此冲突。 所有写入最初可能会在其各自的本地区域中成功。 但根据所选的冲突解决策略,最终只会提交一个具有原始 ID 的项目。

  替换冲突:

  当应用程序同时从两个或更多个区域更新单个项时,可能会发生这些冲突。

  删除冲突:

  当应用程序同时从一个区域删除一个项并从其他区域更新该项时,可能会发生这些冲突。

 

  冲突解决策略:

  Azure CosmosDB 提供了灵活的策略驱动的机制来解决更新冲突。 可以针对 Azure CosmosDB 容器,从以下两种冲突解决策略中进行选择:

  1.Last Write Wins (LWW),最后写入者胜出。

  这个策略是默认的策略。该策略基于时间同步时钟协议。

  如果在执行插入或替换操作时有两个或更多个项发生冲突,冲突解决路径值最大的项将成为优胜者。 如果多个项的冲突解决路径的数字值相同,则由系统确定优胜者。 保证所有区域融合到单个优胜者,并且提交的项的版本最终相同。 当涉及到删除冲突时,已删除版本始终优先于插入或替换冲突。 不管冲突解决路径的值如何,均会发生此结果。

  “最后写入者胜出”是默认的冲突解决策略。 它可用于 SQL 和 MongoDB API 帐户。

 

  2.自定义

  此解决策略旨在使用应用程序定义的语义来调解冲突。 在 Azure Cosmos DB 容器上设置此策略时,还需注册合并存储过程。 当在服务器的数据库事务下检测到冲突时,将自动调用此过程。 在执行提交协议过程中,该系统可保证正好执行合并过程一次。

 

posted on 2019-04-04 14:48  Lei Zhang的博客  阅读(431)  评论(0编辑  收藏  举报