Windows Azure表存储问题

时间:2012-09-27 14:05:15

标签: java azure-storage

在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-

等等。

1 个答案:

答案 0 :(得分:0)

Smarx是对的,可以迭代所有结果,但是如果你只迭代前2个,那么库只会向这些项发出请求。使用aditional请求进行子序列迭代。所以解决方案是使用下一个代码:

CloudTableClient ctc=TableStorage.getTableClient();
final int limit=2;
String q1=TableQuery.generateFilterCondition(TableConstants.PARTITION_KEY, QueryComparisons.EQUAL, Long.toHexString(partitionId));
TableQuery<Actividad> rangeQuery=TableQuery.from(tableName, Actividad.class).where(q1).take(limit);
int e=0;
for(Actividad ac:ctc.execute(query)){
    e++;
    //Use ac
    if(e==limit)break;
}
System.out.println(e);

非常感谢Smarx!