当ShardIteratorType设置为LATEST时,dynamoDBStreams getRecords()返回空记录

时间:2018-09-25 11:02:41

标签: amazon-dynamodb-streams aws-sdk-js

我正在尝试使用适用于nodeJS的AWS-SDK通过dynamodb流检索DynamoDB中的最新更改。 我想到了通过将 ShardIteratorType 用作“最新”来实现它。每次我使用getShardIterator()的Iterator调用getRecords()时,它都会返回空记录,而将 ShardIteratorType 更改为“ TRIM_HORIZON”则会返回该Shard中的对象。

我无法理解这种行为。如果有人可以帮助我解决问题,将不胜感激。

这是实现的伪代码。

let getShardIterator = async (shardID) => {
    let params = {
        ShardId: shardID,
        ShardIteratorType: "LATEST", //using TRIM_HORIZON is working fine
        StreamArn: streamInfo.StreamArn
    };
    return new Promise((resolve, reject) => {
        dynamoStreams.getShardIterator(params, function (err, data) {
            if (err) reject(err) // an error occurred
            else resolve(data);
        });
    })
}

let getDataFromIterator = async (params) => {
    return new Promise((resolve, reject) => {
        dynamoStreams.getRecords(params, function (err, data) {
            if (err) reject(err, err.stack); 
            else resolve(data);           
        });
    })
}

let shardIterObj = await getShardIterator(ShardId); 
let data = await getDataFromIterator(shardIterObj); 

谢谢。

1 个答案:

答案 0 :(得分:0)

根据文档,LATEST将在最近的记录之后返回,如果您有worker/thread在后​​台运行,则通常使用此选项,以便可以拾取任何后续事件。 / p>

  

TRIM_HORIZON-从分片中最后未整理的记录开始读取   是系统中最旧的数据记录。

     

LATEST-在分片中的最新记录之后,之后开始阅读,   这样您就可以始终读取分片中的最新数据。