我正在尝试使用cosmoseDB的一个用例,我们想要维护一个CosmoseDB但是用一些分区键将数据分成美国地区和欧洲地区?
对于插入/更新文档,应用程序知道文档所在的区域(美国/欧洲)是否可以在插入/更新文档时指向正确的区域?
答案 0 :(得分:0)
据我所知,Cosmos DB全局分发机制保证了所有副本集的一致性。
创建分发cosmos db帐户时,启用geo-redundancy
。
您将看到读写分离的区域。
写入操作在写入区域中完成并复制到其他读取区域以确保一致性。在客户端,无需指向特定区域来写入数据。从一致性的角度来看,所有区域数据应该是相同的。
更多细节,您可以参考此document。
希望它对你有所帮助。
答案 1 :(得分:0)
您可以有多个写区域吗?
DocumentDB具有良好的内置功能,通过向您的documentDB帐户添加读取区域,使读取操作更接近消费者。您可以在文档中阅读它:"How to setup Azure Cosmos DB global distribution using the SQL API"。
基于此,我的理解是在任何给定时间始终只有1个写区域。我不打赌我的拇指,但它在文档中暗示。例如,在"Connecting to a preferred region using the SQL API"中:
SDK会自动将所有写入发送到当前写入区域。
所有读取都将发送到PreferredLocations列表中的第一个可用区域。如果请求失败,客户端将使列表失败到下一个区域,依此类推。
您可以做什么..
当您还希望分发写入时(特别是如果您关心一致性和延迟),事情变得更加复杂。 DocumentDB自己的文档建议您将其实现为多个帐户的组合,每个帐户都有自己的本地写入区域,并自动分发到其他区域中的读取/回退节点。
缺点是您的应用程序必须配置并实现应用程序代码中所有帐户的读取并合并结果。按地理位置对数据进行良好分区有助于避免完全扇出,但您的DAL仍然需要在内部管理多个存储。
此方案在文档页面中有更详细的解释 "Multi-master globally replicated database architectures with Azure Cosmos DB"
我会认真考虑增加这种复杂性是否合理,或者只分发阅读就足够了。
答案 2 :(得分:0)
给定帐户的所有区域都具有相同的复制数据。如果要跨区域分隔数据,则需要将其拆分为两个帐户。
鉴于美国的分区A和欧盟的分区B - 如果A和B在同一帐户下,或者在不同的帐户下,则几乎没有差别......集合/ db / account都只是逻辑包装器分区。