gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 00:05:33 26 4
gpt4 key购买 nike

我已使用批量执行器在 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中这是合理的。首先,您需要了解的是文档数据库对响应页面大小施加了限制。此链接总结了其中一些限制: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 数量的限制。您收到的结果将有一个延续 token 。

您可能有两种解决方案:

1.当然,您可以提高 RU 设置。

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

您可以设置值Max Item Count并使用延续标记对数据进行分页。 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 中选择值 count(1)。结果每页只显示全部文档的一部分。因此,我需要通过单击 Next Page 按钮来添加它们。

enter image description here

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

关于Azure Cosmos DB - 不正确且可变的文档计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57911970/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com