首页 文章

Azure更改源和基于分区的查询

提问于
浏览
2

当我们从更改源中的文档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,
                });

它返回所有分区的所有结果 . 有没有办法限制单个分区的结果?

1 回答

  • 1

    Changefeed在PartitionKey Range级别工作 .

    What are partition key ranges?

    文档Db当前具有10 GB物理分区 . 您指定的分区键是逻辑分区键 . 文档Db使用哈希在内部将此逻辑分区键映射到物理分区 . 因此,一堆逻辑分区可能共享相同的物理分区 . 因此,为一系列这些哈希分配了物理分区 .

    允许从更改源读取的最小颗粒将是分区键范围 . 因此,您必须查询您感兴趣的分区的分区键范围ID . 然后查询Changefeed以获取该范围ID,并过滤掉与分区ID无关的数据 .

    Note :如果特定分区已满,则文档db透明地创建新的物理分区 . 因此,给定逻辑分区的分区键范围ID可能会随时间而变化 .

    此链接详细解释了这一点:https://docs.microsoft.com/en-us/azure/cosmos-db/partition-data#partitioning-in-azure-cosmos-db

相关问题