如何从 CosmosDB 中批量获取文档并进行处理?
How can I fetch documents in batches from CosmosDB and process them?
我正在尝试从 CosmosDB 中获取文档,然后对返回的文档执行 foreach 循环,我的操作如下
var productListFromHAPI =
await CosmosDb.GetProductDataFromHAPI(brand, deployedCountry,
primaryLocale, secondaryLocale, _rawDataContainer, log);
var finalListOfObjects = new List<StorelensItemModel_V3>();
foreach (var storeVariantToInsert in productListFromHAPI) { processing here }
问题是 GetProductDataFromHAPI returns 数百万个文档和主机,无论我制作多大,都 运行 资源不足。
我如何拆分它以便同时获取和处理 1000 个文档?我知道我可以使用 select top 1000 等但是我怎么知道第二轮我不会再次获取相同的项目?
我也尝试过使用 offset 和 limit,但无法正常工作
分页似乎不适合这个用例。
看起来您正在使用一个包装器 GetProductDataFromHAPI
,它在下面调用 Cosmos SDK。
Cosmos SDK FeedIterators 允许您分页,一次消耗一页结果:
using (FeedIterator<StorelensItemModel_V3> feedIterator = this.Container.GetItemQueryIterator<StorelensItemModel_V3>(
"query"))
{
while (feedIterator.HasMoreResults)
{
FeedResponse<StorelensItemModel_V3> response = await feedIterator.ReadNextAsync();
// You can yield the response for an upper layer to be consumed and pass the ContinuationToken to use the next time you want to continue the query
}
}
附带说明一下,在构建和执行查询时请牢记性能提示:https://docs.microsoft.com/azure/cosmos-db/sql/performance-tips-query-sdk?tabs=v3&pivots=programming-language-csharp
我正在尝试从 CosmosDB 中获取文档,然后对返回的文档执行 foreach 循环,我的操作如下
var productListFromHAPI =
await CosmosDb.GetProductDataFromHAPI(brand, deployedCountry,
primaryLocale, secondaryLocale, _rawDataContainer, log);
var finalListOfObjects = new List<StorelensItemModel_V3>();
foreach (var storeVariantToInsert in productListFromHAPI) { processing here }
问题是 GetProductDataFromHAPI returns 数百万个文档和主机,无论我制作多大,都 运行 资源不足。
我如何拆分它以便同时获取和处理 1000 个文档?我知道我可以使用 select top 1000 等但是我怎么知道第二轮我不会再次获取相同的项目?
我也尝试过使用 offset 和 limit,但无法正常工作
分页似乎不适合这个用例。
看起来您正在使用一个包装器 GetProductDataFromHAPI
,它在下面调用 Cosmos SDK。
Cosmos SDK FeedIterators 允许您分页,一次消耗一页结果:
using (FeedIterator<StorelensItemModel_V3> feedIterator = this.Container.GetItemQueryIterator<StorelensItemModel_V3>(
"query"))
{
while (feedIterator.HasMoreResults)
{
FeedResponse<StorelensItemModel_V3> response = await feedIterator.ReadNextAsync();
// You can yield the response for an upper layer to be consumed and pass the ContinuationToken to use the next time you want to continue the query
}
}
附带说明一下,在构建和执行查询时请牢记性能提示:https://docs.microsoft.com/azure/cosmos-db/sql/performance-tips-query-sdk?tabs=v3&pivots=programming-language-csharp