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

标签 azure azure-cosmosdb

当我们从更改源中的文档数据库获取数据时,我们只需要每个分区,并尝试将 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,
                });

它返回所有分区的所有结果。有没有办法限制仅来自单个分区的结果?

最佳答案

Changefeed 在 PartitionKey Range 级别工作。

什么是分区键范围?

文档数据库当前有 10 GB 物理分区。 您指定的分区键是逻辑分区键。 文档数据库在内部使用散列将此逻辑分区键映射到物理分区。 因此,一堆逻辑分区可能共享同一个物理分区。 因此,为一系列哈希值分配了一个物理分区。

允许从更改源读取的最小粒度是分区键范围。 因此,您必须查询您感兴趣的分区的分区键范围 id。然后在 Changefeed 中查询该范围 id,并过滤掉与分区 id 不相关的数据。

注意:如果特定分区已满,文档数据库会透明地创建新的物理分区。因此,给定逻辑分区的分区键范围 ID 可能会随着时间的推移而改变。

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

关于Azure更改源和基于分区的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44829847/

相关文章:

Azure 媒体服务在编码作业时为 .wmv 文件提供 JobState.Error

azure - Microsoft.Compute/virtualMachines/extensions' 的段长度不正确

azure - 获取子文件夹Azure数据工厂中的所有文件名

c# - 如何从代码在 CosmosDB 中创建图形

c# - MongoDb C# 驱动程序解析命令插入失败 : document does not contain shard key

android - 从 Android 连接到 Azure DocumentDB

一个数据库的 Azure SQL 用户登录

c# - 如何从 cosmos 数据库中删除容器中的所有项目?

azure - 处理 cosmos sql 查询中 ARRAY_CONTAINS 搜索中的特殊字符

azure - ARM 模板是否会覆盖脚本创建的现有资源?