c# - FeedIterator 和 ReadNextAsync 如何工作?

标签 c# azure-cosmosdb azure-cosmosdb-sqlapi

谁能给我解释一下幕后花絮吗? `

// Query multiple items from container
using FeedIterator<Product> feed = container.GetItemQueryIterator<Product>(
    queryText: "SELECT * FROM products"
);

// Iterate query result pages
while (feed.HasMoreResults)
{
    FeedResponse<Product> response = await feed.ReadNextAsync();

    // Iterate query results
    foreach (Product item in response)
    {
        Console.WriteLine($"Found item:\t{item.name}");
    }
}

`

来自https://learn.microsoft.com/en-us/azure/cosmos-db/nosql/how-to-dotnet-query-items这里我理解的是 GetItemQuery 从页面中的数据库获取数据。 feed.HasMoreResults 检查是否还有剩余页面,然后 ReadNextAsync 加载下一页。响应包含加载的页面中的所有项目,并且在 foreach 循环中我们遍历每个项目。我仍然想要详细描述 GetItemQueryIterator 如何获取数据。它是否获取满足查询的全部数据?调用 GetItemQueryIterator 时,页面是否加载到某个缓冲区或其他内容上,或者 ReadNextAsync 是否直接从数据库获取每个页面?与大型数据库一样,是一次获取所有页面,或者由 GetItemQueryIterator 发送页面列表,然后 ReadNextAsync 从列表中获取每个页面。我不知道这东西是如何工作的。

最佳答案

当您获得FeedIterator<T>时使用GetItemQueryIterator<T>除了一些元数据之外,不会从数据库中检索任何数据。

一旦您使用ReadNextAsync方法将查询首次发送到 Cosmos 数据库,您将收到第一组文档。随后的每个ReadNextAsync将获取下一组文档,直到最后一个响应表明您已获得所有内容并且 HasMoreResults设置为false .

关于c# - FeedIterator 和 ReadNextAsync 如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74938875/

相关文章:

microservices - 需要使用/Cosmos DB 抵御对事件溯源架构的古怪挑战

azure - 我对 cosmosdb 定价的理解正确吗?

c# - 无效的 Continuation token CosmosDB

azure - 如何使用嵌套属性在 cosmos DB 中定义唯一键

c# - 比较两个以逗号分隔的字符串是否匹配的最短代码是什么?

c# - ASP.Net Core - 将 SAML 断言转换为 ClaimsPrincipal

C# - 使用 Thread.Sleep() 让我的循环每秒运行数百次

c# - 在 C++ 中触发事件并在 C# 中处理它们

sql - 为每个 "Group"选择最新文档

sql - 宇宙数据库 : Query documents by time interval using partition key