c# - 为什么 CloudTable.ExecuteQuerySegmentedAsync 只返回最大 1k 个实体的一小部分?
问题描述
由于我们有一个使用投影的事件源系统,我们经常需要查询我们的事件存储以获取大量实体来(重新)构建我们的状态。这是通过以下方式完成的:
1.查询实体PartitionKey
,RowKey
偶尔进行额外过滤
2.处理结果段
3.重复此操作直到continuationtoken== null
由 Azure Function (V2) Windows.Azure.Storage 9.3.1 运行。
我们遇到的问题是返回的段ExecuteQuerySegmentedAsync
的大小从大约 200~ 到 700~ 个实体不等。我能够通过一个简单的查询来重现这一点PartitionKey
,而无需额外的过滤。看:
文档状态ExecuteQuerySegmentedAsync
最多可以返回 1k 个实体。关于我们为什么没有达到这个数字的任何想法?它将(预期)显着提高性能。
更新:未达到 5 秒的最大查询时间,获取一个段大约需要 200-300 毫秒。
解决方案
文档状态 ExecuteQuerySegmentedAsync 最多可以返回 1k 个实体。关于我们为什么没有达到这个数字的任何想法?
对表的每个查询最多允许执行 5 秒。在这 5 秒过去后,表服务将返回它能够根据查询找到的尽可能多的实体(最多 1000 个实体)。很可能在这 5 秒内没有找到实体,在这种情况下,它将返回零个实体和延续令牌。
从此link
:
针对表服务的查询一次最多可以返回 1,000 个实体,并且最多可以执行 5 秒。如果结果集包含超过 1,000 个实体,如果查询未在 5 秒内完成,或者如果查询跨越分区边界,则响应包括包含一组延续令牌的自定义标头。继续令牌可用于构造对下一页数据的后续请求。有关延续令牌的更多信息,请参阅查询超时和分页。
推荐阅读
- reflection - PL/SQL 反射集属性值
- tensorflow2.0 - 为什么在 Tensorflow 2.0 中从 .hdf5 转换为 .tflite 时出现“ValueError: Unknown layer: KerasLayer”?
- powershell - 多台计算机可以使用 PowerShell 将数据写入一台远程计算机中的单个文件吗?
- java - 如何在 cas-overlay-5.1.x 中使用 spring-cloud-zookeeper-discovery
- c++ - 将元素从 opencv 矩阵复制到特征矩阵
- bash - How to use user input to select a variable in bash?
- c - 为什么 C11 全局和局部静态断言的行为不同?
- kotlin - 在没有析构函数/生命周期的类中启动协程
- c# - 如何使用 SimpleInjector 注册 CustomContext(DbConnection 连接,DbCompiledModel 编译模型)?
- spring-boot - Spring boot 2 + Microsoft AD 身份验证 + 未找到 userPassword 属性