如何在cosmosdb中设置多个写区域,以便我不需要在应用程序层中组合两个或多个不同区域的查询结果?从这个文档中,似乎cosmosdb全局分布是具有一个编写器和多个读取secondarys的全局复制,而不是真正的多主机。 https://docs.microsoft.com/en-us/azure/documentdb/documentdb-multi-region-writers
答案 0 :(得分:3)
截至2018年5月,Cosmos DB现在使用CRDT数据类型和自动冲突解决方案本机支持多主机。
Azure Cosmos DB中的多主机提供高级别的可用性 (99.999%),写入数据的单位数毫秒延迟 可扩展性,内置全面而灵活的冲突 决议支持。
Multi-master由多个主区域组成 参与随意写随机模型(主动 - 主动模式)和它 用于确保数据在您需要的任何时间可用 它。对单个区域所做的更新是异步传播的 到所有其他地区(反过来又是自己的主要地区)。 Azure Cosmos数据库区域在多主机中作为主区域运行 配置自动工作以收敛所有副本的数据 并确保全球一致性和数据完整性。
Azure Cosmos DB实现了处理冲突写入的逻辑 在数据库引擎本身内部。 Azure Cosmos DB提供 通过提供全面而灵活的冲突解决支持 几种冲突解决模型,包括自动(CRDT- 无冲突复制数据类型),最后写入胜利(LWW)和 用于自动冲突解决的自定义(存储过程)。该 冲突解决模型提供正确性和一致性 保证并消除开发人员必须思考的负担 关于一致性,可用性,性能,复制延迟和 地理故障和跨区域的复杂事件组合 写冲突。
此处有更多详情:https://docs.microsoft.com/en-us/azure/cosmos-db/multi-region-writers
目前处于预览阶段,可能需要获得批准才能使用它:
答案 1 :(得分:2)
根据您提供的link,根据我的理解。 cosmosdb / documentdb中的多主机由多个文档分别针对写区域实现,并从组合查询中读取文档。目前似乎不支持在cosmosdb中设置多个写区域,因此不需要组合两个或更多不同区域的查询结果。
答案 2 :(得分:1)
引用的文章说明了如何在Cosmosdb中实现多主机,同时明确声明它不是多主数据库。
有很多方法可以模拟"通过配置一致性级别(例如会话)来实现多主场景,这将允许调用者在不将其写入写入区域的情况下查看其本地副本。您可以在此处找到各个级别的详细信息:https://docs.microsoft.com/en-us/azure/cosmos-db/consistency-levels。
除此之外,考虑一下您是否真的需要通过使用一致性级别来考虑多主机,考虑可接受的延迟等等。很少有情况不能容忍延迟,特别是当您有足够的工具时提供近似于本地写入主机的用户体验。当涉及远程网络时,没有实时的事情;)