#node.js #cron #amazon-dynamodb #dynamodb-queries
#node.js #cron #amazon-dynamodb #dynamodb-запросы
Вопрос:
У меня есть таблица DynamoDB со следующими элементами
{
"jobId":<job1>,
"cron" : "* 5 * * *"
},
{
"jobId":<job2>,
"cron" : "* 8 * * *"
}
Мне нужно сканировать элементы, у которых следующее время выполнения на основе строки cron в течение следующих 5 минут, исходя из текущего времени.
Есть ли способ преобразовать cron в допустимое время следующего выполнения во время сканирования?
Я использую node.js в AWS Lambda и cron-parser
библиотеке npm для извлечения времени next_execution из строки cron.
Ответ №1:
Обратите внимание, что сканирование всей таблицы со временем замедлится. Возможно, вы захотите рассмотреть какое-либо другое хранилище данных или структуру для хранения этих данных.
Это говорит о том, что что-то подобное может сработать:
const results = await client.scan({ TableName: 'tableName' }).promise();
const cronItems = results.Items;
const intervals = cronItems.map((item) => {
return cronParser.parseExpression(item.cron);
});
const now = new Date();
const fiveMinMillis = 300 * 1000;
const within5Mins = intervals.filter((interval) => {
const timeUntil = interval.next().valueOf() - now.valueOf();
return timeUntil < fiveMinMillis;
});
Обратите внимание, что вам действительно нужно будет вызывать scan(...)
итеративно, пока ответ не будет содержать LastEvaluatedKey
атрибут. Подробности смотрите здесь.