C# 为什么CloudTable.ExecuteQuerySegmentedAsync只返回最大1k实体的一小部分?
由于我们有一个事件源系统与预测一起工作,因此我们经常需要查询事件存储库中的大量实体来(重新)构建我们的状态。 这是通过以下方式实现的: 1.在C# 为什么CloudTable.ExecuteQuerySegmentedAsync只返回最大1k实体的一小部分?,c#,.net-core,azure-storage,azure-table-storage,C#,.net Core,Azure Storage,Azure Table Storage,由于我们有一个事件源系统与预测一起工作,因此我们经常需要查询事件存储库中的大量实体来(重新)构建我们的状态。 这是通过以下方式实现的: 1.在PartitionKey、RowKey上查询实体,偶尔进行额外过滤 2.处理结果段 3.重复此操作直到continuationtoken==null 由Azure函数(V2)运行,即Windows.Azure.Storage 9.3.1 我们遇到的问题是,ExecuteQuerySegmentedAsync返回的段大小在200到700个实体之间变化。我只需
PartitionKey
、RowKey
上查询实体,偶尔进行额外过滤2.处理结果段
3.重复此操作直到
continuationtoken==null
由Azure函数(V2)运行,即Windows.Azure.Storage 9.3.1 我们遇到的问题是,
ExecuteQuerySegmentedAsync
返回的段大小在200到700个实体之间变化。我只需在PartitionKey
上进行简单的查询,就可以重现这一点,而无需进行额外的筛选。见:
文档状态ExecuteQuerySegmentedAsync
最多可返回1k个实体。你知道为什么我们没有达到这个数字吗?这将(预期)显著提高性能
更新:未达到5秒的最大查询时间,获取段大约需要200-300毫秒
文档状态ExecuteQuerySegmentedAsync最多可返回1k
实体的定义。你知道为什么我们没有达到这个数字吗
对表的每个查询最多允许执行5秒。在这5秒钟过后,表服务将返回它能够根据查询找到的尽可能多的实体(最多1000个实体)。很有可能在这5秒钟内没有找到任何实体,在这种情况下,它将返回零个带有延续标记的实体
由此:
对表服务的查询最多可返回1000个
一次执行一个实体,最多可执行五秒钟。如果
如果查询没有包含,则结果集包含1000多个实体
在五秒钟内完成,或者如果查询跨越分区
边界,响应包括包含一组
延续令牌。延续令牌可用于构造
对下一页数据的后续请求。更多信息
关于延续标记,请参阅查询超时和分页
谢谢很好,这可能是问题所在。只需对完全相同的查询计时,获取一个段通常需要大约300-400毫秒。