我为我的发电机表设置了流。我正在按照文档中的示例程序从流中读取数据(http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Streams.LowLevel.Walkthrough.CompleteProgram.html)。不过我有一个问题——
当迭代分片时,检查分片迭代器是否为空似乎并不是退出循环的充分条件。我的代码进入无限循环。在示例程序中,对更改数量进行计数,并用于退出循环 -->
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 不会变成 null?
我正在重复我对您发布的同一问题的回答AWS 论坛 here:
只要分片处于打开状态并且正在积极接收未来可能的更新,nextIterator 就不会变为 null。一旦分片关闭并且最后一条记录已被遍历,那么您的循环可能会退出并指示不再可能从分片获取更多记录。
请参阅我们的文档:http://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/dynamodbv2/model/GetRecordsResult.html#getNextShardIterator()
“如果设置为 null,则分片已关闭,请求的迭代器将不再返回任何数据。”
希望对您有所帮助,感谢您对 DynamoDB 的兴趣!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)