joko_pain
@joko_pain
Грешу веб-разработкой и не много дизайном

Данные в дб запрашиваются до их появления, как заставить ждать?

Вопрос без кода, есть несколько взаимосвязанных проектов на NODE JS, один добавляет данные в БД, другой запрашивает оттуда, так как всё происходит асинхронно, данные не успевают долететь до ДБ, а их уже запрашивают.
Вопрос как через SQL запрос сказать postgres чтоб он подождал пока данные появляться?
  • Вопрос задан
  • 147 просмотров
Пригласить эксперта
Ответы на вопрос 5
@de1m
Я так думаю, что никак, это как-то не очень в концепт SQL бы вписывалось.
Надо делать очередь, один в неё что-то пишет, а следующий шаг только когда предыдущий завершился.
Ответ написан
AgentSmith
@AgentSmith
появляться

Я думать, что я на твоём месте организоваться очередь. Например, RabbitMQ.
Она позволяться сделаться архитектуру более гибкой.
Ответ написан
Alexandre888
@Alexandre888
Javascript-разработчик
Вопрос как через SQL запрос сказать postgres чтоб он подождал пока данные появляться?

через sql - никак, но зачем вам это? добавьте запрос в if-выражение, которое будет проверять каждую секунду, дошёл ли другой запрос до базы, и, если это правда - запускать другой запрос.

или же, можно реализовать это таким способом:
client.query(`SELECT column_name FROM table_name WHERE условие`, function (err, results) {
while (строки по запросу не найдены) {
// ждать n секунд (запрос пока не дошёл)
}
// отправить запрос при нахождении строк
})
Ответ написан
BojackHorseman
@BojackHorseman
...в творческом отпуске...
можно рекурсивный cte написать, который дождется данные...
что из этого выйдет в плане расхода ресурсов я не знаю
Ответ написан
@edo1h
Или приспосабливать LISTEN/NOTIFY, или использовать внешний по отношению к базе механизм очередей.

BTW, в статье обсуждали LISTEN/NOTIFY, но в комментариях не особо тепло отнеслись к этому подходу.

Моё мнение: если речь именно о «подождать прихода данных в базе», то LISTEN/NOTIFY отлично подходит (и сам не раз использовал), если же нужны многие нагруженные очереди — лучше взять готовые реализации.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
MedPoint24 Москва
от 190 000 до 220 000 ₽
Гравител Москва
от 140 000 до 180 000 ₽
от 80 000 до 120 000 ₽
18 сент. 2020, в 21:23
2500 руб./за проект
18 сент. 2020, в 20:16
13000 руб./за проект
18 сент. 2020, в 19:05
25000 руб./за проект