Записи в БД, которые должны запускать синхронизированные события = Как эффективно реализовать? - PullRequest
0 голосов
/ 31 октября 2011

Проблема:
Это очень интересная проблема: у меня есть большое количество записей в базе данных, которые сами связали с ними «время запуска» (= дата в будущем)).Если это время верно / достигнуто, запись должна выполнить / запустить определенное действие.Несколько потоков обновят это время для записей.Так что это время не является фиксированным, оно может быть изменено различными потоками ...

Решения:
Опрос:
Я могу, конечно, снова и снова запрашивать записи, которые имеют"время вышло".В конце я должен был бы написать цикл, который выполняет запросы (только через SQL), если для события / записи истекло время ожидания.Но это бесполезно иметь такой цикл опроса для БД !?
Потоки : Другой подход состоит в том, чтобы сохранить все из них в памяти, например, с помощью "Executor Framework" или использовать Quartz в качестве потоков.Это было бы логично с точки зрения JAva, скорее всего, в очень удачное время.Но тогда у меня были бы тысячи потоков ...

Вопрос:
Какие существуют лучшие подходы для решения этой проблемы?Любые предложения / идеи приветствуются, поэтому я могу провести дальнейшее исследование по ним.

Большое спасибо !!

1 Ответ

2 голосов
/ 31 октября 2011

В зависимости от базы данных у некоторых есть «уведомления» (я думаю о Postgres здесь).Это позволяет вам запустить процесс и позволить другим вещам в PG уведомлять вас, когда они происходят.

Т.е. в этом сценарии, когда запись изменяется с истечением времени ожидания, у вас может быть триггер, уведомляющий ваш процесс синхронизации(который находится на совершенно другом соединении с БД), и он может затем вставлять записи @at, или записи cron, или все, что вам нужно делать на вашей стороне для управления и выполнения действий.

В новейшей версиирелизы PG, вы можете отправлять данные вместе с уведомлением, то есть вы можете отправить значение PK записи, которая изменилась.

Clients --> [Postgres]  -----------<> Record Monitor client ---- > process records()
            |                       |
         records_table              |
            |                       |
             \_ timing_Trigger()  --/
                      on_update/insert/delete notify RecordMonitorClientOfChange.

Супер дрянная диаграмма того, что я бы сделал.

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