由于我们有一个使用投影的事件源系统,因此我们经常必须在事件存储中查询大量实体,以(重新)建立状态。这是通过以下方式完成的:
1。在PartitionKey
,RowKey
上查询实体,偶尔进行额外过滤
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。
答案 0 :(得分:1)
文档状态ExecuteQuerySegmentedAsync最多可返回1k 实体。关于为什么我们没有达到这个数字有什么想法吗?
对表的每个查询最多允许执行5秒。经过这5秒钟之后,表服务将返回根据查询能够找到的尽可能多的实体(最多1000个实体)。在这5秒钟内很可能找不到任何实体,在这种情况下,它将返回零个带有延续标记的实体。
来自此link
:
针对Table服务的查询最多可返回1,000 实体一次执行一次,最多执行五秒钟。如果 如果查询没有,结果集包含1,000多个实体 在五秒钟内完成,或者查询是否跨分区 边界,响应包括自定义标头,其中包含一组 延续令牌。延续令牌可用于构建 对下一页数据的后续请求。了解更多信息 有关延续令牌的信息,请参阅查询超时和分页。