2012-09-27 6 views
0

В Windows Azure Table Storage Я выполнение следующего запроса:для Windows Azure Table Storage заспорить

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); 

Но я получаю все строки на раздел, а не только сверху-указан на дубле (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-

И так далее.

+0

На каком языке программирования это написано? В какой библиотеке она используется? – smarx

+0

Это Java. Windows Azure Java SDK. – gasotelo

+0

А, спасибо. Вы использовали Fiddler (или аналогичный прокси-сервер HTTP отладки), чтобы посмотреть фактический трафик с вашего компьютера на службу хранения? Интересно, отсутствует ли параметр $ top, или, может быть, если выполняется несколько запросов (на странице через результаты). Любой может указать на ошибку в библиотеке. – smarx

ответ

0

Smarx прав, можно перебирать все результаты, но если вы только перебираете первые 2, библиотека будет делать запрос только с этими элементами. Последовательные итерации выполняются с дополнительными запросами. Таким образом, решение должно использовать следующий код:

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!

Смежные вопросы