从 dynamodb 流读取数据

mns*_*mns 5 amazon-web-services amazon-dynamodb

我为我的发电机表设置了流。我正在按照文档中的示例程序从流中读取数据(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();
}
Run Code Online (Sandbox Code Playgroud)

但在真实环境中,我确信维护更改列表是不切实际的。设计是否意味着无限循环?为什么 shardIterator 不会变成 null?

小智 4

我在这里重复我对您在AWS 论坛上发布的同一问题的回答:

只要分片处于打开状态并且正在积极接收未来可能的更新,nextIterator 就不会变为 null。一旦分片关闭并且最后一条记录已被遍历,那么您的循环可能会退出并指示不再可能从分片获取更多记录。

请参阅此处的文档:http://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/dynamodbv2/model/GetRecordsResult.html#getNextShardIterator()

“如果设置为 null,则分片已关闭,请求的迭代器将不再返回任何数据。”

希望对您有所帮助,感谢您对 DynamoDB 的兴趣!