使用 Java High Level API 从 DynamoDB 表获取所有表项

dus*_*shu 7 java amazon-web-services amazon-dynamodb

我使用 dynamodbmapper 在 dynamodb 表中实现了扫描操作,但我没有得到所有结果。每当我运行程序时,扫描都会返回不同数量的项目。

代码片段:

DyanmoDBScanExpression scanExpression = new DynamoDBScanExpression();
List<Books> scanResult = mapper.scan(Books.class, scanExpression);
Run Code Online (Sandbox Code Playgroud)

我调查了一下,发现扫描返回的物品有限制。但我找不到使用映射器从表中获取所有项目的方法!有没有办法让我可以循环遍历表中的所有项目。我已经在 J​​VM 中设置了足够的堆内存,因此不会出现内存问题。

Jac*_*Joy 8

在java中使用不带任何过滤器的DynamoDBScanExpression,

// Change to your Table_Name (you can load dynamically from lambda env as well)
DynamoDBMapperConfig mapperConfig = new DynamoDBMapperConfig.Builder().withTableNameOverride(DynamoDBMapperConfig.TableNameOverride.withTableNameReplacement("Table_Name")).build();

DynamoDBMapper mapper = new DynamoDBMapper(client, mapperConfig);

DynamoDBScanExpression scanExpression = new DynamoDBScanExpression();

// Change to your model class   
List < ParticipantReport > scanResult = mapper.scan(ParticipantReport.class, scanExpression);



// Check the count and iterate the list and perform as desired.
scanResult.size();
Run Code Online (Sandbox Code Playgroud)


Mir*_*cea 4

扫描应返回所有项目。
问题是返回的集合是延迟加载的。您需要遍历列表,当它消耗所有获取的项目时,将在幕后进行额外的调用以引入更多项目(直到所有项目都被引入)。

http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/JavaQueryScanORMModelExample.html

在那个例子中是:

List<Book> scanResult = mapper.scan(Book.class, scanExpression);

for (Book book : scanResult) {
    System.out.println(book);
}
Run Code Online (Sandbox Code Playgroud)