Azure Cosmos DB-文档计数不正确且可变

Azure Cosmos DB-文档计数不正确且可变,azure,azure-cosmosdb,azure-cosmosdb-sqlapi,Azure,Azure Cosmosdb,Azure Cosmosdb Sqlapi,我使用批量执行器在Azure Cosmos DB SQL容器中插入了100万个文档。没有记录任何错误。所有文档共享相同的分区密钥。该容器配置为3200 RU/s、无限存储容量和单区域写入 执行简单计数查询时: select value count(1) from c where c.partitionKey = @partitionKey 我得到的结果从303000到307000不等 此计数查询适用于较小的分区(从10k到250k文档) 是什么导致了这种奇怪的行为?这在宇宙数据库中是合理的。首

我使用批量执行器在Azure Cosmos DB SQL容器中插入了100万个文档。没有记录任何错误。所有文档共享相同的分区密钥。该容器配置为3200 RU/s、无限存储容量和单区域写入

执行简单计数查询时:

select value count(1) from c where c.partitionKey = @partitionKey
我得到的结果从303000到307000不等

此计数查询适用于较小的分区(从10k到250k文档)


是什么导致了这种奇怪的行为?

这在宇宙数据库中是合理的。首先,您需要知道的是文档数据库对
响应页面大小施加了限制。此链接总结了其中一些限制:

第二,如果您想从文档DB中查询大数据,则必须考虑查询性能问题,请参阅本文: 通过查看,您可以观察到对查询操作有重大影响的几个重要参数:

x-ms-max-item-count,x-ms-continuation。

因此,您的错误是RUs设置瓶颈造成的。
count
查询受分配给您的收藏的RU数量的限制。您将收到的结果将有一个延续令牌

您可能有两种解决方案:

1.当然,你可以提高设置

2.对于成本,您可以通过continuation token继续查找下一组结果,并继续添加它,以便获得总计数。(可能在sdk中)

您可以使用
延续标记设置数据的值并对数据进行分页。Document Db sdk支持无缝读取分页数据。您可以参考以下python代码片段:

q = client.QueryDocuments(collection_link, query, {'maxItemCount':10})
results_1 = q._fetch_function({'maxItemCount':10})
#this is a string representing a JSON object
token = results_1[1]['x-ms-continuation']
results_2 = q._fetch_function({'maxItemCount':10,'continuation':token})
我将整整30k个文档导入数据库,然后尝试运行查询

在查询资源管理器中从c
中选择值计数(1)。每一页的文档只占总文档的一部分。因此,我需要通过单击
Next Page
按钮来添加它们


当然,您可以通过continuation token在sdk代码中执行此查询。

这是有意义的,尽管这一实现细节泄露给客户端是相当令人惊讶的。