【问题标题】:dynamoDBStreams getRecords() returning empty records when ShardIteratorType is set to LATEST当 ShardIteratorType 设置为 LATEST 时,dynamoDBStreams getRecords() 返回空记录
【发布时间】:2018-10-03 22:32:35
【问题描述】:

我试图通过带有适用于 nodeJS 的 AWS-SDK 的 dynamodb 流检索 DynamoDB 中最后一分钟的更改。 我想到了通过使用 ShardIteratorType 作为“最新”来实现它。每次我使用 getShardIterator() 的迭代器调用 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); 

谢谢。

【问题讨论】:

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


    【解决方案1】:

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

    TRIM_HORIZON - 开始读取分片中最后一个未修剪的记录 在系统中,这是分片中最旧的数据记录。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-26
      • 2012-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多