我试图使用适用于nodeJS的AWS-SDK通过dynamodb流检索DynamoDB中最后一刻的更改。 我想到了通过使用 ShardIteratorType 作为“LATEST”来实现它。每次我使用 getShardIterator() 获得的迭代器调用 getRecords() 时,它都会返回空记录,而将 ShardIteratorType 更改为“TRIM_HORIZON”会返回该分片中的对象。
我无法理解这种行为。如果有人能帮我解决这个问题,我将不胜感激。
这是实现的伪代码。
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);
谢谢。
最佳答案
根据文档,LATEST
将在最近的记录之后返回,如果您有 worker/thread
在后台运行,则通常使用此选项,以便任何可以拾取后续事件。
TRIM_HORIZON - Start reading at the last untrimmed record in the shard in the system, which is the oldest data record in the shard.
LATEST - Start reading just after the most recent record in the shard, so that you always read the most recent data in the shard.
关于amazon-dynamodb-streams - 当 ShardIteratorType 设置为 LATEST 时,dynamoDBStreams getRecords() 返回空记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52496641/