2012-09-27 61 views
0

在Windows Azure上表存儲我執行一個查詢:的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); 

但我得到的分區中的所有行,而不僅僅是採取指定的頂部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-

等。

+0

這是寫什麼編程語言?它使用什麼庫? – smarx

+0

這是Java。 Windows Azure Java SDK。 – gasotelo

+0

啊,謝謝。您是否使用過Fiddler(或類似的HTTP調試代理)來查看從您的計算機到存儲服務的實際流量?我想知道$ top參數是否丟失,或者可能是否有多個請求(通過結果頁面)。要麼可能表明庫中存在錯誤。 – smarx

回答

0

Smarx是正確的,可以遍歷所有結果,但是如果您只遍歷前兩個,庫將僅對這些項目發出請求。子序列迭代是用附加請求進行的。所以解決辦法是使用下面的代碼:

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!