2014-02-24 32 views
2

我正在MVC中創建應用程序並將Amazon雲服務用於後端。我需要從數據庫批量數據,就像我使用這樣的查詢 -如何從亞馬遜簡單數據庫中檢索100多條記錄

SelectResponse response = simpleDBClient.Select(new SelectRequest() 
    { 
     SelectExpression = "select * from survey1 limit 2400" 

    }); 

這是現在工作正常,並返回2400記錄。現在我想在這些記錄上應用搜索所以我必須使用where子句,但是當我使用where子句時,它在任何有效條件中只返回10條記錄。

請幫幫我任何幫助將被讚賞。

+0

看看這個答案是否有幫助: http://stackoverflow.com/a/1832779/2959100 –

回答

1

您可以使用limitwhere條款。對於這裏詳細爲SyntaxSelectQuery -

select output_list from domain_name [where expression] [sort_instructions] [limit limit] 

output_list可以是:itemName(),計數(),屬性

  1. *所有屬性的列表。
  2. `itemName()`僅用於項目名稱。
  3. 計數(*)的項目總數與查詢表達式匹配。它將返回結果集中的項目數量,而不是返回項目。
  4. 屬性的顯式列表(ATTRIBUTE1,...,attributeN)

的domain_name是從您要搜索itemsdomain

表達式是match expression的項目。可以使用像=,< =,<,> =,選擇表達式喜歡,不喜歡,之間,爲空,非空等

sort_instructions各種各樣的單一屬性的結果,在以升序或降序訂購。

limit是結果的返回(默認值:100,最多2500。)的最大數量。

請注意 -

響應的總大小不能超過1 MB。 Amazon SimpleDB 會自動調整每頁返回的項目數量,以強制實施此限制 。例如,即使您要求檢索2500個項目,但每個個別項目的大小爲10 KB,系統都會返回100個項目 和相應的下一個標記,以便您可以獲得下一頁結果。

注:運行長於5秒操作返回一個超時誤差 響應或部分或空結果集。部分和空 結果集包含一個NextToken值,該值允許您從其停止的位置繼續執行 操作。

Source

1

SimpleDB的僅可以一次檢索數據的唯一1MB,SimpleDB的把一個的nextToken響應於指示存在要檢索更多的數據。

這是在Java中是如何做到的。

public List<Item> getItems(){ 
    AmazonSimpleDBClient client = new AmazonSimpleDBClient(...); 
    List<Item> items = new ArrayList<>(); 
    String nextToken = null; 

    do { 
     final SelectRequest request = new SelectRequest(); 
     request.setSelectExpression("MY SELECT QUERY"); 

     // SimpleDB can paginate the result. For paginated result NextToken value will be not null 
     request.setNextToken(nextToken); 
     nextToken = null; 

     SelectResult result = client.select(request); 

     if (result != null) { 
      nextToken = (result.getNextToken() != null) ? result.getNextToken() : null; 
      items.addAll(result.getItems()); 
     } 
    } while (nextToken != null); 

    return items; 
}