适用于 Ruby 的 Azure SDK:表存储 - query_entities页、计数、跳过实体


无法

真正找到正确的方法来获取表存储中的实体计数。最大结果集 = 1000,尝试使用内联计数并跳过 ODATA 查询,但到目前为止没有成功。

例如:

query = { :inlinecount => 'allpages', :filter => ... }

result => azure_table_service.query_entities("table_name", query(.count

或:

查询 = { :skip =>

1000, :filter => ... }

result = azure_table_service.query_entities("table_name", query(.count

关于如何做到这一点的任何想法(显然在服务器上保留计数操作(?

根据回复进行编辑:我很清楚这到底是"多大错特错"。我知道这非常缓慢,不是要走的路。这不适用于生产用途。我正在寻找一种方法,使用 ruby 临时从表存储中的数据中获取一些指标,而无需修改实际的云应用程序。此代码在我的笔记本电脑上本地运行。不知何故,我无法检索继续标记以对表进行分页

您无法轻松获取任何语言的表实体计数。 若要了解原因,必须通过了解表服务概念。查询超时和分页,特别是查询表和实体。

服务不支持/维护每个表的记录总数属性。原因之一是表数据可能分散在数百台服务器上。使用表存储时,您必须问自己,您是否真的想知道记录总数以及像468 129 439 781这样的数字在您的应用程序上下文中意味着什么?它真的能帮助你构建分页逻辑吗?

据我所知,获取 Azure 表中记录总数的唯一方法是执行不带筛选条件的查询,并以递归方式重复该查询,直到响应中没有继续标记,计算每个调用的返回实体数。这将花费大量的时间/带宽/存储事务资源。

根据评论进行更新

如果需要一些指标,请先查看如何监视存储帐户,并验证是否有有助于你的指标。

然后,如果您仍然想自己去,我强烈建议您使用像 Fiddler 这样的网络流量分析工具来捕获和检查您从 Ruby 应用程序发送的请求和响应。缺少继续令牌问题可能只是在 Ruby SDK 本身。首先确保它出现在响应中。如果未指定筛选器且表包含超过 1000 条记录,或者完成请求的时间不足以检索表中的所有记录(假设其记录少于 1000 条(,则响应中将包含表继续标记。

最新更新