如果不使用 AsPages(),TableClient.Query<T> 将发出多少请求?

问题描述 投票:0回答:4

我对 C# 中的

Pageable< T >
有疑问。我在 Azure 命名域中有表存储。我正在使用 Azure.Data.Tables nuget 包,并查询我正在使用的所有域:

 var domains = _localDomainTableClient
                .Query<Domain>()
                .AsPages()
                .SelectMany(d => d.Values);

但我不明白一些事情。如果我在没有 AsPages 方法的情况下使用 Query< T > 会怎样?

IEnumerable<Domain> domainsPAges = tableClient.Query<Domain>();

我知道

AsPages()
返回页面集合。例如,如果我在表中有 10000 个项目,
Query<Domain>().AsPages()
应该向表发出 10 个请求并返回给我 10 页,每页有 1000 个项目(除非我更改了默认值)但我不明白到底发生了什么如果我不使用
AsPages() ?

例子:

IEnumerable<Domain> domainsPAges = tableClient.Query<Domain>(); 

Query<Domain>()
返回
Pageble< T >
但是,它是再次向表发出 10 次请求还是获取所有元素直到内存溢出(默认为 4 MB)或一次获取所有元素?

我检查了文档,但找不到我需要的东西。

可能需要多个服务请求才能迭代的值集合。

在页面中检索到的值的集合

这到底是什么意思?

感谢您的帮助。

c# azure azure-table-storage azure-tableclient
4个回答
1
投票

如果不使用 AsPages(),Query 将发出多少请求?

在 C# 中,Query 方法是 Azure Cosmos DB SDK 的一部分。

Query<T>
方法将在对数据库的单个请求中检索所有匹配结果。此行为称为单分区查询。

如果查询涉及到多个分区,那么Query方法会进行多次请求来检索所有匹配的结果。请求的确切数量将取决于涉及的分区数量和结果集的大小。

如果不使用

AsPages()
方法,那么查询结果将作为单个可枚举对象返回。如果使用
AsPages()
方法,查询结果将作为一系列页面返回,每个页面包含查询结果的一个子集。在这种情况下,请求的数量将取决于每个页面的大小和符合查询条件的结果总数。

如果我在没有 AsPages 方法的情况下使用 Query< T > 会怎么样

在 C# 中,如果您使用

Query<T>
而不使用 AsPages 方法,您将在一个批次中收到所有查询结果。

Query<T>
方法返回一个表示查询结果的 IEnumerable。如果不使用 AsPages,整个结果集将被一次性加载到内存中。这会导致高内存使用率并且性能会下降,因为它会消耗大量内存。

AsPages 方法还使您能够以更有效的方式检索结果。它允许您以较小的批次或页面检索结果,这有助于减少内存使用并提高性能。 AsPages 方法返回一个

IAsyncEnumerable<Page<T>>
,其中每个 Page 代表一页结果。

Query() 返回 Pageble< T > 但是,它是再次向表发出 10 次请求还是获取所有元素直到内存溢出(默认为 4 MB)或一次获取所有元素?

Query() 的行为取决于方法的实现和底层数据库系统。

当您执行返回可分页结果的查询时,数据库将执行查询并根据页面大小和当前页码仅将结果的子集返回给应用程序。其余结果将在对下一页的后续请求中检索。

因此,如果您使用特定页面大小调用

Query<Domain>()
,它只会检索该页面大小中指定的元素数量,而不是表中的所有元素。

对表的请求数将取决于需要检索以返回查询的所有结果的页数。

用于存储检索结果的内存将取决于检索对象的大小和每页检索对象的数量。使用可分页结果时,返回对象的大小通常会受到限制以减少内存使用量,因此内存使用量不太可能超过 4 MB 的默认限制。

有关更多信息,请参阅此查询表实体SO线程。


0
投票
------------------

可能需要多个服务请求才能迭代的值集合。

检查这个-http://qa4.sdg.me/600000001403512

谢谢 bharti96


0
投票
嗨 var 域应该正确返回一些值

谢谢

  • 从谷歌查看一些相关代码


0
投票
嗨 var 域应该返回一些值。

当返回空值时,它会抛出错误。

© www.soinside.com 2019 - 2024. All rights reserved.