我为我的发电机表设置了流。我正在按照文档中的示例程序来读取流中的数据(http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Streams.LowLevel.Walkthrough.CompleteProgram.html)。但是我有一个问题 - 当遍历分片时,似乎检查sharditerator为null并不是退出循环的充分条件。我的代码进入无限循环。在示例程序中,计算了更改次数,并用于退出循环 - >
while (nextItr != null && numChanges > 0) {
// Use the iterator to read the data records from the shard
GetRecordsResult getRecordsResult =
streamsClient.getRecords(new GetRecordsRequest().
withShardIterator(nextItr));
List<Record> records = getRecordsResult.getRecords();
System.out.println("Getting records...");
for (Record record : records) {
System.out.println(record);
numChanges--;
}
nextItr = getRecordsResult.getNextShardIterator();
}
但在真实的环境中,我确信保持更改列表是不切实际的。设计是否意味着无限循环?为什么shardIterator不会变为空?
答案 0 :(得分:3)
我正在重复我对您在AWS Forums发布的同一问题的回答:
只要分片处于打开状态并且正在积极接收可能的未来更新,nextIterator就不会变为null。一旦碎片关闭并且遍历了最后一条记录,那么您的循环可能会退出并指示不再可能从碎片中获取更多记录。
“如果设置为null,则该分片已关闭,请求的迭代器将不再返回任何数据。”
希望有所帮助,感谢您对DynamoDB的关注!