Получение событий из базы данных - PullRequest
31 голосов
/ 01 мая 2009

Я не очень знаком с базами данных и тем, что они предлагают вне операций CRUD.

Мои исследования привели меня к триггерам . Похоже, что триггеры предлагают такой тип функциональности:

(из Википедия )

Обычно существует три триггерных события, которые вызывают срабатывание триггеров:

  • Событие INSERT (поскольку новая запись вставляется в базу данных).
  • Событие UPDATE (как запись изменяется).
  • Событие DELETE (поскольку запись удаляется).

Мой вопрос: есть ли какой-нибудь способ, которым я могу получать уведомления в Java (предпочтительно с данными, которые изменились) базой данных, когда запись обновляется / удаляется / вставляется с использованием какой-либо семантики триггера?

Какие могут быть альтернативные решения этой проблемы? Как я могу прослушивать события базы данных?

Основной причиной, по которой я хочу это сделать, является сценарий, подобный этому :

У меня 5 клиентских приложений, все в разных процессах / на разных ПК. Все они имеют общую базу данных (в данном случае Postgres).

Допустим, один клиент изменяет запись в БД, в которой все 5 клиентов «заинтересованы». Я пытаюсь придумать, как клиенты могут быть «уведомлены» об изменении (желательно с прикрепленными данными). ) вместо того, чтобы они запрашивали данные через некоторый интервал.

Ответы [ 12 ]

0 голосов
/ 01 мая 2009

Здесь есть несколько различных техник, в зависимости от базы данных, которую вы используете. Одна идея - опросить базу данных (которую, я уверен, вы пытаетесь избежать). По сути, вы можете проверять наличие изменений очень часто.

Другим решением (если вы используете SQL Server 2005) является использование служб Notification Services, хотя эта технология может быть заменена в SQL 2008 (мы пока не видели чистой замены, но Microsoft публично об этом говорила) .

0 голосов
/ 01 мая 2009

То, что вы спрашиваете, полностью зависит как от базы данных, которую вы используете, так и от структуры, которую вы используете для связи с вашей базой данных.

Если вы используете что-то вроде Hibernate в качестве слоя персистентности, у него есть набор прослушивателей и перехватчиков, которые вы можете использовать для мониторинга записей, входящих и выходящих из базы данных.

...