#node.js #azure-cosmosdb
#node.js #azure-cosmosdb
Вопрос:
setInterval(async () => {
var time = Math.floor(Date.now() / 1000);
const { result: newevents } = await client.database("database").container("collection").items.query(`SELECT * FROM Events c WHERE c._ts >= ${time - 5} AND c._ts < ${time}`, { enableCrossPartitionQuery: true }).toArray();
newevents.forEach((element) => {
redisClientEventData.set(element.id, JSON.stringify(element));
});
}, 5000);
Я запускаю этот код каждые 5 секунд, чтобы получать события из cosmosdb в 5-секундном окне, а запрос к базе данных обычно занимает всего 40-60 мс. Однако со временем он пропустит секунду и события. Есть ли какой-либо способ гарантировать, что я смогу получать каждое событие каждые 5 секунд? Я попробовал цикл while, но, похоже, не сработало. Обычно это будет работать в течение 6-12 часов, но затем пропустите секунду.
Я ожидаю увидеть что-то вроде
1553786056
1553786061
1553786066
1553786071
Но со временем я в конечном итоге вижу
1553786056
1553786061
1553786067
1553786072
Комментарии:
1. Выполняется ли какое-либо другое задание или задачи в том же процессе узла?
2. Нет, это единственное. Я просто опустил требования выше этого.
3. Похоже, это решает именно вашу проблему npmjs.com/package/accurate-interval . «Создайте точный интервал, который не искажается со временем».
4. Как вы регистрируете время? использовать
console.log
или войти в базу данных?5. @acarlstein … Может быть, прочитать предыдущие комментарии?