Azure Cosmos DB - 不正确且可变的文档计数
Azure Cosmos DB - incorrect and variable document count
我已经使用批量执行器在 Azure Cosmos DB SQL 容器中插入了整整 100 万个文档。没有记录错误。所有文档共享相同的分区键。容器预配置为 3,200 RU/s、无限存储容量和单区域写入。
执行简单计数查询时:
select value count(1) from c where c.partitionKey = @partitionKey
我得到从 303,000 到 307,000 不等的不同结果。
此计数查询适用于较小的分区(从 10k 到 250k 文档)。
什么会导致这种奇怪的行为?
在cosmos db中是合理的。首先,您需要知道的是,Document DB 对 Response page size
施加了限制。 link 总结了其中一些限制:
其次,如果要从Document DB查询大数据,就要考虑查询性能问题,请参考这篇文章:Tuning query performance with Azure Cosmos DB.
通过查看 Document DB REST API,您可以观察到几个对查询操作有重大影响的重要参数:x-ms-max-item-count, x-ms-continuation.
所以,您的错误是由于 RUs 设置的瓶颈造成的。 count
查询受分配给您的集合的 RU 数量的限制。您收到的结果将有一个延续标记。
您可能有 2 个解决方案:
1.Surely,您可以提高 RUs 设置。
2.For 成本,您可以通过继续令牌继续寻找下一组结果并继续添加它,以便获得总计数。(可能在 sdk 中)
您可以设置 Max Item Count 的值并使用 continuation tokens
对数据进行分页。 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 文档导入 database.Then 我尝试 运行 查询
select value count(1) from c
在查询资源管理器中。结果每页只显示全部文档的一部分。所以我需要通过单击 Next Page
按钮将它们全部添加。
当然,您可以通过延续令牌在 sdk 代码中执行此查询。
我已经使用批量执行器在 Azure Cosmos DB SQL 容器中插入了整整 100 万个文档。没有记录错误。所有文档共享相同的分区键。容器预配置为 3,200 RU/s、无限存储容量和单区域写入。
执行简单计数查询时:
select value count(1) from c where c.partitionKey = @partitionKey
我得到从 303,000 到 307,000 不等的不同结果。
此计数查询适用于较小的分区(从 10k 到 250k 文档)。
什么会导致这种奇怪的行为?
在cosmos db中是合理的。首先,您需要知道的是,Document DB 对 Response page size
施加了限制。 link 总结了其中一些限制:
其次,如果要从Document DB查询大数据,就要考虑查询性能问题,请参考这篇文章:Tuning query performance with Azure Cosmos DB.
通过查看 Document DB REST API,您可以观察到几个对查询操作有重大影响的重要参数:x-ms-max-item-count, x-ms-continuation.
所以,您的错误是由于 RUs 设置的瓶颈造成的。 count
查询受分配给您的集合的 RU 数量的限制。您收到的结果将有一个延续标记。
您可能有 2 个解决方案:
1.Surely,您可以提高 RUs 设置。
2.For 成本,您可以通过继续令牌继续寻找下一组结果并继续添加它,以便获得总计数。(可能在 sdk 中)
您可以设置 Max Item Count 的值并使用 continuation tokens
对数据进行分页。 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 文档导入 database.Then 我尝试 运行 查询
select value count(1) from c
在查询资源管理器中。结果每页只显示全部文档的一部分。所以我需要通过单击 Next Page
按钮将它们全部添加。
当然,您可以通过延续令牌在 sdk 代码中执行此查询。