在我的方案中,我正在使用CosmosDbTrigger处理具有Azure功能的Cosmos Db集合中的更改。
源Cosmos Db集合按设备ID分区。 输出保留在另一个Cosmos Db集合中。 在某些情况下,我必须关联来自同一设备的多个文档并输出一个文档。
所以我想知道是否必须应用某种事务逻辑来防止出现竞争情况,因为当我收到2个文档时,这些文档应由我的Azure函数的多个实例同时合并为一个文档? 还是我可以依靠在同一功能实例上对每个分区进行一批更改而在其中可以循环处理和关联所有相关文档?
每个分区的更改数量永远不会超过单个批次的默认100个项目。
答案 0 :(得分:3)
每个分区键一次只能被一个实例处理。在开始任何处理之前,每个实例将获得给定分区的租约。这就是Leases集合的用途。
在更改Feed处理器库中查看此文档:https://azure.microsoft.com/nl-nl/blog/introducing-the-azure-cosmosdb-change-feed-processor-library/
但是,据我了解您的情况,即使更改量低于100,也不能保证您将在一个批次中获得所有相关更改。如果相关更改在不同批次中,它们<不幸的是,在那个确切的时刻更换租赁持有人的情况下,em>可能会被不同的实例处理。