从dynamodb流中读取数据

时间:2015-08-10 05:28:50

标签: amazon-web-services amazon-dynamodb

我为我的发电机表设置了流。我正在按照文档中的示例程序来读取流中的数据(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不会变为空?

1 个答案:

答案 0 :(得分:3)

我正在重复我对您在AWS Forums发布的同一问题的回答:

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

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

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

希望有所帮助,感谢您对DynamoDB的关注!