Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java DynamoDB-DynamoDBMapper查询并获取整个结果集_Java_Amazon Web Services_Amazon Dynamodb - Fatal编程技术网

Java DynamoDB-DynamoDBMapper查询并获取整个结果集

Java DynamoDB-DynamoDBMapper查询并获取整个结果集,java,amazon-web-services,amazon-dynamodb,Java,Amazon Web Services,Amazon Dynamodb,我正在使用哈希键查询DynamoDB表。表中的每个记录都由哈希键和范围键唯一标识 DynamoDBMapper mapper; .... MyClass myClass = new MyClass(); myClass.setHashKey(hashKey); DynamoDBQueryExpression<MyClass> queryExpression = new DynamoDBQueryExpression<MyClass>()

我正在使用哈希键查询DynamoDB表。表中的每个记录都由哈希键和范围键唯一标识

DynamoDBMapper mapper;
....
MyClass myClass = new MyClass();
myClass.setHashKey(hashKey);
DynamoDBQueryExpression<MyClass> queryExpression = new DynamoDBQueryExpression<MyClass>()
                                                 .withHashKeyValues(myClass);
PaginatedQueryList<MyClass> entries = mapper.query(MyClass.class, queryExpression);
//Work with the elements of entries 
DynamoDBMapper映射器;
....
MyClass MyClass=新的MyClass();
setHashKey(hashKey);
DynamoDBQueryExpression queryExpression=新建DynamoDBQueryExpression()
.WithHashKeyValue(myClass);
PaginatedQueryList条目=mapper.query(MyClass.class,queryExpression);
//使用条目的元素
当结果集大于1MB时,如何检索其余的。
我找不到任何方法来获取文档中提到的
LastEvaluatedKey

AWS SDK for Dynamodb Mapper为您处理分页。它在内部查询数据库,当您需要超过1MB的数据时,它会再次查询数据库并为您获取数据。 如果您希望一次性获得完整的列表,您可以使用诸如size或将分页结果复制到列表中这样的操作,这将需要mapper获取完整的结果。 简而言之,您不必担心LastEvaluatedKey及其处理,它是为您处理的

例如

 PaginatedQueryList<T> resultPaginatedList = dynamoDBMapper.query(getModelClass(), queryExpression);
 
 List<T> queryList = new LinkedList<>(resultPaginatedList); //--- Line1
 logger.info("Total elements found: " + queryList.size());  //--- Line2
PaginatedQueryList resultPaginatedList=dynamoDBMapper.query(getModelClass(),queryExpression);
List queryList=新建链接列表(resultPaginatedList);//--第1行
logger.info(“找到的元素总数:+queryList.size());//--第2行

第1行和第2行都描述了mapper将获取完整结果(通过多次查询SDK处理)的操作,而不仅仅是1MB。

您是否验证了您没有在PaginatedQueryList中获取所有结果?我认为该类应该处理为您获取所有数据的实现细节。@MarkB不,我还没有验证它。但是从这个例子中可以看出,如果结果超过1MB,查询就会停止,我们必须进行后续处理calls@MarkB因此,我可以只遍历
条目
,它将包含我查询的哈希键的所有记录。我查看了PaginatedQueryList的源代码,发现了与渴望和惰性加载相关的内容您正在查看文档中的低级查询函数,但您使用的是高级Java DynamoDB库,它具体返回一个分页结果,该结果在文档中表示它可以自动进行多次调用以检索结果。@MarkB我知道该文档用于低级API。但是在本文中,没有提到如何检索查询结果的行为。所以我不确定是真的。虽然有点让人困惑,因为
AmazonDynamoDB.qurery()
API只加载1MB,但是
DynamoDBMapper
确实提供了这种神奇的操作。以下是官方文件: