0

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

例如:

查询 = { :inlinecount => 'allpages', :filter => ... }

结果 => azure_table_service.query_entities("table_name", query).count

或者:

查询 = { :skip => 1000, :filter => ... }

结果 = azure_table_service.query_entities("table_name", query).count

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

根据回复进行编辑: 我很清楚这真的是“多么错误”。我知道这非常慢,而且不是要走的路。这不适用于生产用途。我正在寻找一种方法来使用 ruby​​ 从表存储中的数据中获取一些指标,即席,而不修改实际的云应用程序。此代码在我的笔记本电脑上本地运行。不知何故,我无法检索继续令牌来分页 table

4

1 回答 1

2

您无法轻易获得任何语言的表实体的数量。要了解原因,您必须阅读Understanding Table Service Concepts特别是查询超时和分页以及查询表和实体

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

我知道,要获取 Azure 表中的记录总数,唯一的方法是在没有过滤条件的情况下执行查询并递归重复它,直到响应中没有继续令牌,计算每个返回实体的数量称呼。这将占用大量时间/带宽/存储交易资源。

根据评论更新

如果想要一些指标,请首先检查如何监控存储帐户并确认没有任何东西可以帮助您。

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

于 2013-09-24T14:00:38.260 回答