在 cosmos db 中是合理的。首先,您需要知道的是 Document DB 对Response page size 施加了限制。此链接总结了其中一些限制:Azure DocumentDb Storage Limits - what exactly do they mean?
其次,如果要从Document DB中查询大数据,则要考虑查询性能问题,请参考这篇文章:Tuning query performance with Azure Cosmos DB。
通过查看Document DB REST API,您可以观察到几个对查询操作有重大影响的重要参数:x-ms-max-item-count, x-ms-continuation.
因此,您的错误是由于 RU 设置的瓶颈造成的。 count 查询受分配给您的集合的 RU 数量的限制。您将收到的结果将有一个延续令牌。
您可能有两种解决方案:
1.当然,你可以提高 RUs 设置。
2.对于成本,您可以通过延续令牌继续寻找下一组结果并继续添加它,以便您获得总数。(可能在sdk中)
您可以设置Max Item Count 的值并使用continuation tokens 对数据进行分页。 Document Db sdk 支持无缝读取分页数据。可以参考python代码的sn-p如下:
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 文档导入到我的数据库中。然后我尝试运行查询
select value count(1) from c 在查询资源管理器中。事实证明,每页只有部分文件。所以我需要通过点击Next Page按钮来添加它们。
当然,您可以通过延续令牌在 sdk 代码中执行此查询。