170 похожих чатов

Привет всем, есть немного замороченный вопрос, с другом моим дискуссия

возникла одна, озадачились.

Для организации работы одного сервиса используется бесконечный цикл внутри которого выполняются постоянно операции разные.

опишу кратко сервис

Этот сервис постоянно смотрит в базе статусы, если видит что в строках базы изменились статусы ("Выполнено") то сервис добавляет в Mongo базу новые строки со статусами (Ожидает обработки)
При том когда ложит новую строку, сразу кидает в кафку параллельно еще и сообщение привязанное по id к строке, прошу не вдаваться почему это именно все так построенно - нужно для статистики и удобного управления процессами из веб панели, с базы проще контролировать статусы, время старта работы и завершения и т.д.

Цель сервиса постоянно пополнять новыми свежими строками базу и кафку, если старые приняли статус "Выполнено", при этом сервис следит, чтобы в общей сложности текущими активными в моменте придерживалось постоянно 40 свежих строк в базе в статусе "Ожидает обработки", чтобы другому исполняющему сервису было постоянно мясо (новые сообщения в кафке) для работы

Соответственно с задержкой в 5 секунд сервис постоянно отслеживает статусы строк в базе и чекает.

Вопрос: насколько в плане эффективности справедливо в цикле так все время базу опрашивать? Это во-первых нагрузка на базу, во-вторых цикл вечный ресурсы кушает и оперативу.. Есть ли что-то эффективнее вечного цикла? Все таки 21 век на дворе..?

Существуют ли более правильные подходы для организации подобных сервисов?

4 ответов

16 просмотров

@scheduled + кеш на БД

гуглите debezium или вообще "change data capture". но вообще, если работает и никто не жалутеся - лучше не трогайте

Можно подписаться на изменения, на монго это точно есть и работает

As@@t-A Автор вопроса

работа по событию очень круто - эффективно, чем вхолостую молотить

Похожие вопросы

Обсуждают сегодня

Какой-то там пердун в 90-х решил, что есть какая-то разная типизация. Кого вообще это волнует?
КТ315
49
void terminal_scroll() { memmove(terminal_buffer, terminal_buffer + VGA_WIDTH, buffer_size - VGA_WIDTH); memset(terminal_buffer + buffer_size - VGA_WIDTH, 0, VGA_WIDTH); ...
Егор
47
Всем привет! Подскажите, пожалуйста, в чем ошибка? Настраиваю подключение к MySQL. Либы лежат рядом с exe. Все как по "учебнику"
Евгений
16
А можете как-то проверить меня по знаниям по ассемблеру?
A A
132
Здравствуйте! У меня появилась возможность купить книгу "Изучай Haskell во имя добра!". Но я где-то слышал, что эта книга устарела. Насколько это правда??
E
22
Здравствуйте! Я вот на stepic решаю задачи на хаскеле https://stepik.org/lesson/8443/step/8?unit=1578 мой код import Data.List (isInfixOf) removing :: String -> [String] ->...
E
10
Камрады, кто тесно работал с vtv, хотел уточнить. Ширина column задаётся жёстко на этапе создания дерева или можно в рантайме ее менять программно (не мышкой)?
Ed Doc
10
да ладно ... что там неочевидного ? глянуть в исх-ки датасета и/или кверика чтобы понять в каком месте и как выполняется обращения к св-вам blablaSQL - минутное дело, даже е...
Сергей
7
Здесь для arm кто-нибудь кодит ?
Nothing
52
Всем привет, у меня есть сервер принимающий входящие HTTP подключения, как проверить, что подключение было через прокси или нет, есть какие то поля в заголовках по которым мо...
DS
8
Карта сайта