CosmosDB ChangeFeed 始终从单个 PartitionKeyRange 读取更改
CosmosDB ChangeFeed always reading changes from a single PartitionKeyRange
我已将 300k 文档插入到 CosmosDB 集合中,使用为集合定义的分区键属性的许多不同值。当我尝试从 ChangeFeed 中读取数据时(同时使用 Azure Functions 和 ChangeFeedProcessor 示例),我总是得到一个 PartitionKeyRange 值为 0 的单线程 cosuming 事件。
我不明白为什么我只能从一个 PartitionKeyRange 中获得更改,即使我在集合的定义分区键中有这么多不同的值。
有什么建议吗?
更新:我有 运行 Cosmos DB samples 中包含的 PartitionStats 项目,您可以在下面看到输出。我的 "Logical Partitions".
似乎只得到一个 "PartitionKeyRange"
PartitionKeyRanges 不等同于分区键。这个命名有点混乱,我们正在努力在我们的 SDK 的下一版本中更改它。将分区键视为您可以控制的数据逻辑分组,而分区键是后端控制的分组的物理表示。它由(通常)许多逻辑分区键组成。
PartitionKeyRanges的个数不能由你这个终端用户控制,而是由后台为你管理。它由预留吞吐量、使用的存储量和使用模式的组合决定。建议不要围绕拥有更多 PartitionKeyRanges 进行设计,因为它可以随时更改,而是专注于尽可能快地处理提要。例如,您可能需要将任何 CPU 密集型工作推入一个队列,在该队列中工作可以进一步并行化,而不会延迟流的处理。
我已将 300k 文档插入到 CosmosDB 集合中,使用为集合定义的分区键属性的许多不同值。当我尝试从 ChangeFeed 中读取数据时(同时使用 Azure Functions 和 ChangeFeedProcessor 示例),我总是得到一个 PartitionKeyRange 值为 0 的单线程 cosuming 事件。
我不明白为什么我只能从一个 PartitionKeyRange 中获得更改,即使我在集合的定义分区键中有这么多不同的值。
有什么建议吗?
更新:我有 运行 Cosmos DB samples 中包含的 PartitionStats 项目,您可以在下面看到输出。我的 "Logical Partitions".
似乎只得到一个 "PartitionKeyRange"PartitionKeyRanges 不等同于分区键。这个命名有点混乱,我们正在努力在我们的 SDK 的下一版本中更改它。将分区键视为您可以控制的数据逻辑分组,而分区键是后端控制的分组的物理表示。它由(通常)许多逻辑分区键组成。
PartitionKeyRanges的个数不能由你这个终端用户控制,而是由后台为你管理。它由预留吞吐量、使用的存储量和使用模式的组合决定。建议不要围绕拥有更多 PartitionKeyRanges 进行设计,因为它可以随时更改,而是专注于尽可能快地处理提要。例如,您可能需要将任何 CPU 密集型工作推入一个队列,在该队列中工作可以进一步并行化,而不会延迟流的处理。