如何从Amazon Simple DB检索超过100条记录

时间:2014-02-24 12:01:06

标签: c# amazon-simpledb

我正在MVC中创建应用程序并使用Amazon云服务进行后端。我需要数据库中的数据,所以我使用像这样的查询 -

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

  });

现在正常工作并返回2400记录。现在我想在这些记录上应用搜索所以我必须使用where子句,但是当我使用where子句时,它在任何有效条件下只返回10条记录。

请帮助我任何帮助都会得到赞赏。

2 个答案:

答案 0 :(得分:2)

您可以将limitwhere子句一起使用。有关详细信息,请参阅Syntax Select -

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

output_list可以是:itemName(),count(),属性列表

  1. *表示所有属性。
  2. `itemName()`仅用于项目名称。
  3. count(*)表示项目总数与查询表达式匹配。它将返回结果集中的项目数,而不是返回项目。
  4. 明确的属性列表(attribute1,...,attributeN)
  5. domain_name是您要搜索domain的{​​{1}}。

    表达式是项目的items。您可以使用选择表达式,例如=,< =,<,> =,like,not like,between,is null,not null etc。

    match expression按单个属性按升序或降序对结果进行排序。

    sort_instructions是要返回的最大结果数(默认值:100,最多2500)。

    请注意 -

      

    响应的总大小不能超过1 MB。 Amazon SimpleDB   自动调整每页返回的项目数以强制执行   这个限制。例如,即使您要求检索2500项,但是   每个项目的大小为10 KB,系统返回100个项目   以及适当的下一个标记,以便您可以获得下一页结果。

         

    注意:运行时间超过5秒的操作会返回超时   错误响应或部分或空结果集。部分和空洞   结果集包含一个NextToken值,允许您继续   从中断的地方开始的操作。

    Source

答案 1 :(得分:2)

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