当我们从更改Feed中的Document Db获取数据时,我们只需要每个分区并尝试将PatitionKey添加到代码中。
do
{
FeedResponse<PartitionKeyRange> pkRangesResponse = await client.ReadPartitionKeyRangeFeedAsync(
collectionUri,
new FeedOptions
{
RequestContinuation = pkRangesResponseContinuation,
PartitionKey = new PartitionKey("KEY"),
});
partitionKeyRanges.AddRange(pkRangesResponse);
pkRangesResponseContinuation = pkRangesResponse.ResponseContinuation;
}
while (pkRangesResponseContinuation != null);
返回单一范围,当我们进行第二次查询时
IDocumentQuery<Document> query = client.CreateDocumentChangeFeedQuery(
collectionUri,
new ChangeFeedOptions
{
PartitionKeyRangeId = pkRange.Id,
StartFromBeginning = true,
RequestContinuation = continuation,
MaxItemCount = -1,
});
它返回所有分区的所有结果。有没有办法限制单个分区的结果?
答案 0 :(得分:1)
Changefeed在PartitionKey Range级别工作。
什么是分区键范围?
Document Db目前有10 GB的物理分区。 您指定的分区键是逻辑分区键。 文档Db使用哈希在内部将此逻辑分区键映射到物理分区。 因此,一堆逻辑分区可能共享相同的物理分区。 因此,为一系列哈希分配了物理分区。
允许从更改源读取的最小粒度为分区键范围。 因此,您必须查询您感兴趣的分区的分区键范围ID。然后查询Changefeed以获取该范围ID,并过滤掉与分区ID无关的数据。
注意:如果特定分区已满,则文档数据库透明地创建新的物理分区。因此,给定逻辑分区的分区键范围ID可能会随时间而变化。
此链接详细解释了这一点: https://docs.microsoft.com/en-us/azure/cosmos-db/partition-data#partitioning-in-azure-cosmos-db