【发布时间】:2012-09-19 08:24:50
【问题描述】:
在 Windows Azure 表存储上,我正在执行下一个查询:
CloudTableClient ctc=TableStorage.getTableClient();
String q1=TableQuery.generateFilterCondition(TableConstants.PARTITION_KEY, QueryComparisons.EQUAL, Long.toHexString(partitionId));
TableQuery<Actividad> rangeQuery=TableQuery.from(tableName, Actividad.class).where(q1).take(2);
int e=0;
for(Actividad ac:ctc.execute(query)){
e++;
}
System.out.println(e);
但我得到了分区上的所有行,而不仅仅是在 take(2) 上指定的前 2 行。
有什么建议吗?
回答smarx:
我使用 Wireshark 查看 http 请求:
初始请求是:
GET /actividadreciente?$filter=PartitionKey%20eq%20%2717%27&$top=2&timeout=60
服务有响应,然后发出大量请求:
GET /actividadreciente? $filter=PartitionKey%20eq%20%2717%27&$top=2&NextRowKey=1%2124%21RkZGRkZFQzY2REYzMTA3Mw--&timeout=60&NextPartitionKey=1%214%21MTc-
GET /actividadreciente?$filter=PartitionKey%20eq%20%2717%27&$top=2&NextRowKey=1%2124%21RkZGRkZFQzY3Mjk2MEZEOA--&timeout=60&NextPartitionKey=1%214%21MTc-
GET /actividadreciente?$filter=PartitionKey%20eq%20%2717%27&$top=2&NextRowKey=1%2124%21RkZGRkZFQzY3Mjk5MzVGOQ--&timeout=60&NextPartitionKey=1%214%21MTc-
等等。
【问题讨论】:
-
这是用什么编程语言编写的?它使用的是什么库?
-
它是 Java。 Windows Azure Java SDK。
-
啊,谢谢。您是否使用过 Fiddler(或类似的 HTTP 调试代理)来查看从您的机器到存储服务的实际流量?我想知道是否缺少 $top 参数,或者是否正在发出多个请求(对结果进行分页)。两者都可能表明库中存在错误。
-
我做到了。我编辑我的问题。我想这是一个库错误。你知道我该如何举报吗?
-
如果不继续迭代会发生什么?我认为 execute() 返回一个迭代器,只要您请求它们(通过迭代),它就会不断获取新页面。如果您在获得要查找的两个实体后停止读取实体,我的猜测是只会发出一个查询。
标签: java azure-storage