我正在MVC中创建一个应用程序,并使用亚马逊云服务作为后端。我需要从数据库批量数据,所以我使用这样的查询-
SelectResponse response = simpleDBClient.Select(new SelectRequest()
{
SelectExpression = "select * from survey1 limit 2400"
});
目前运行良好,返回2400张唱片。现在我想对这些记录应用搜索,所以我必须使用where子句,但当我使用where子句时,它在任何有效条件下只返回10条记录。
请帮帮我。任何帮助都将不胜感激。
您可以将limit
与where
子句一起使用。更详细的信息,这里是Select
Query
-的Syntax
select output_list from domain_name [where expression] [sort_instructions] [limit limit]
output_list
可以是:、itemName()
、计数()、属性列表
- *
- `itemName()`仅用于项名称
- 项总数的count(*)与查询表达式匹配。它将返回结果集中的项数,而不是返回项
- 属性的显式列表(attribute1,…,attributeN)
domain_name是要从中搜索items
的domain
。
表达式是项的match expression
。您可以使用选择表达式,如=、<=、<,>=,like,not like,between,is null,is not null etc.
sort_instructions
按升序或降序对单个属性的结果进行排序。
limit
是要返回的最大结果数(默认值:100,最大值2500)。
请注意-
响应的总大小不能超过1 MB。Amazon SimpleDB自动调整每页返回的项目数以强制执行这个限度。例如,即使您要求检索2500个项目,但是每个项目大小为10 KB,系统返回100个项目以及一个合适的下一个令牌,以便您可以获得下一页的结果。
注意:运行时间超过5秒的操作会返回超时错误响应或部分或空的结果集。部分和空结果集包含一个NextToken值,它允许您继续从它停止的地方开始的操作。
源
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;
}