DynamoDBStreams getRecords () возвращает пустые записи, когда ShardIteratorType имеет значение LATEST - PullRequest
0 голосов
/ 25 сентября 2018

Я пытался получить последние изменения в DynamoDB через потоки DynamodB с AWS-SDK для nodeJS.Я думал о его реализации, используя ShardIteratorType в качестве "ПОСЛЕДНЕГО".Каждый раз, когда я вызываю getRecords () с помощью Iterator, который я получил getShardIterator (), он возвращает пустые записи, тогда как изменение 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); 

Спасибо.

1 Ответ

0 голосов
/ 03 октября 2018

Согласно документам, LATEST вернется сразу после самой последней записи, эта опция обычно используется, если у вас worker/thread работает в фоновом режиме, так что любые последующие события могут быть получены.

TRIM_HORIZON - начать чтение с последней незарезанной записи в сегменте в системе, которая является самой старой записью данных в сегменте.

LATEST - начать чтение просто после самой последней записи в осколке, чтобы вы всегда читали самые последние данные в осколке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...