在Azure Cosmos DB
中,是否可以在数据库/容器/分区键级别上创建多个只读副本以提高读取吞吐量?我有几个容器,每个逻辑分区键需要超过10K RU / s,现在不能重新设计分区键逻辑。因此,我正在考虑多次复制数据(最终一致性很好)。
我知道Azure提供Cosmos DB
的全球分发,但是我要寻找的是同一区域内的复制,理想情况下不是完整的数据库复制,而是容器复制。容器级复制将更具成本效益,因为我不需要复制大多数容器,而我最多需要复制10次。
答案 0 :(得分:0)
虽然可用的选项很少:
在同一区域中没有复制选项,但是您可以使用Change Feed将其复制到另一个数据库,并且要进行重新设计,其目的只是为了与读取查询一起使用。尽管最好使用预览中的无服务器选项,也可以使用自动缩放选项。但是,您也可以查看预配置的吞吐量,并将预配置的RU保留1年或3年,并按月付款,就像在PAYG模型中一样,但是折扣很大。一种选择是从运行主数据库和应用程序的区域中的VM进行延迟测试,并找出延迟时间(ms)最接近的区域,然后如果延迟是可以承受的,则可以使用全局复制到该区域。区域并开始使用它。我使用this工具进行延迟测试,但是从您的app \ DB运行所在区域内的VM中运行它。
答案 1 :(得分:0)
我的猜测是,您的查询都是跨分区的,每个查询消耗大量的RU / s。不幸的是,Cosmos DB中没有任何功能可以帮助您解决问题。
您的选择是创建更多容器,并使用更改摘要将数据复制到区域中,然后添加某种路由机制以在应用程序中路由请求。当然,您最终只会获得与此相关的一致性,因此,如果您具有较高的并发需求,那么它将无法正常工作。那么,您唯一的选择就是解决当今设计中的可伸缩性问题。
此live data migrator可以为您提供帮助。您可以使用它使第二个容器与原始容器保持同步,从而使您最终可以从第一个设计迁移到可扩展性更好的另一个设计。