为什么CloudTable.ExecuteQuerySegmentedAsync仅返回最多一千个实体的一小部分?

时间:2019-04-08 15:26:04

标签: c# .net-core azure-storage azure-table-storage

由于我们有一个使用投影的事件源系统,因此我们经常必须在事件存储中查询大量实体,以(重新)建立状态。这是通过以下方式完成的:

1。在PartitionKeyRowKey上查询实体,偶尔进行额外过滤 2.处理结果段 3.重复此操作直到continuationtoken== null

由Azure功能(V2)Windows.Azure.Storage 9.3.1运行。

我们遇到的问题是ExecuteQuerySegmentedAsync返回的段的大小从200到700左右不等。我仅通过PartitionKey上的简单查询就可以重现此信息,而无需进行其他过滤。看到: https://user-images.githubusercontent.com/49230954/55467681-18f2cf00-5602-11e9-90ad-70c324eb7d3c.JPG

文档状态ExecuteQuerySegmentedAsync最多可以返回1k个实体。关于为什么我们没有达到这个数字有什么想法吗? (有望)大大提高性能。

更新:未达到5秒的最长查询时间,获取一段视频大约需要200-300ms。

1 个答案:

答案 0 :(得分:1)

  

文档状态ExecuteQuerySegmentedAsync最多可返回1k   实体。关于为什么我们没有达到这个数字有什么想法吗?

对表的每个查询最多允许执行5秒。经过这5秒钟之后,表服务将返回根据查询能够找到的尽可能多的实体(最多1000个实体)。在这5秒钟内很可能找不到任何实体,在这种情况下,它将返回零个带有延续标记的实体。

来自此link

  

针对Table服务的查询最多可返回1,000   实体一次执行一次,最多执行五秒钟。如果   如果查询没有,结果集包含1,000多个实体   在五秒钟内完成,或者查询是否跨分区   边界,响应包括自定义标头,其中包含一组   延续令牌。延续令牌可用于构建   对下一页数据的后续请求。了解更多信息   有关延续令牌的信息,请参阅查询超时和分页。