我试图了解以下两个代码段之间的区别。一个使用页面来获取扫描结果,而第二个不使用。我想知道如果数据库中的项目总数非常大,第二种方法是否有效? AWS文档称扫描结果受限于1 Mb。这对第2版有何影响?它只会获得前1 MB的结果,还是会在每个页面后进行数据库调用?
请注意,我使用的是table.scan API,它与DynamoDBClient.scan api不同。有关API的详细信息,请参阅http://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/dynamodbv2/document/Table.html。
版本1(使用页面):
ItemCollection<ScanOutcome> items = table.scan(spec);
items.pages().forEach(page -> {
for (Item item : page) {
response.add(item);
}
});
版本2(迭代没有页面的项目):
ItemCollection<ScanOutcome> items = table.scan(spec);
for (Item item : items) {
response.add(item);
}
答案 0 :(得分:2)
Tofig是对的。这两种方法没有区别。关于扫描结果限制为1 MB的声明仅适用于不适用于Document API的低级API 来自ItemCollection
的文档项目的集合。 ItemCollection对象维护游标 指向其当前的数据页面。最初光标是 位于第一页之前。下一个方法将光标移动到 下一行,因为当没有更多行时它返回false 在ItemCollection对象中,它可以在while循环中使用 遍历集合。 可以触发网络通话 该集合跨页边界重复。
答案 1 :(得分:0)
我进行了一项实验,我创建了1000条记录,每条记录的大小为5kb。然后我使用版本2来扫描表格并且仍然获得所有1000条记录,尽管总大小明显> 1MB。两个版本扫描整个表格,所以似乎没有区别。似乎ItemCollection为您处理分页,除非您想控制网络调用和页面大小,否则不需要使用页面。