Итак, из вопроса я приму:
- есть два приложения
A
и B
- есть таблица клиента - назовем ее
table X
A
читает и кэширует данные из table X
B
записывает данные в table X
A
необходимо знать, когда B
записал в table X
, чтобы A
мог обновить свои кэшированные данные.
вариант 1
Если вы управляете A
и B
, вы можете расширить поведение - когда B
пишет в базу данных и запись успешна, B
запускает событие в A
(например, вызывает конечную точку REST) и A
будет знать, как обновить свой кэш.
вариант 2
Если вы не можете контролировать B
, но вы можете контролировать A
и DB
, вы можете использовать DB
в качестве точки интеграции - это обычный подход для устаревших приложений - DB
единственное место, где приложения могут интегрироваться.
Итак, снова вы можете применить ту же концепцию B
, которая запускает событие в A
, но на этот раз событие (инициируемое триггером) сохраняется в таблице в DB
и вызов REST выполняется из самой БД с использованием внутренней процедуры.
Прямой подход:
B
записывает данные в table X
- есть
insert trigger
для table X
, который выполняет один оператор INSERT в таблице хранения событий (назовем его UPDATE_CACHE_EVENT
)
Ваш "update_cache_event" теперь запущен (например, сохранен в этой таблице), и с этого момента у вас есть больше возможностей:
A
может отслеживать эту таблицу каждую секунду и запускать обновление кеша при записи нового события
A
предоставляет API REST, который вызывается из DB
- например, на сервере SQL напишите процедуру, которая контролирует таблицу UPDATE_CACHE_EVENT
и вызывает REST API A
.
Некоторые мысли:
- не используйте сам триггер для вызова внешнего API, используйте для этого специальную процедуру
- триггер имеет снижение производительности (например, каждая запись в
table X
вызовет другую вставку в таблицу событий), поэтому вы должны учитывать это при разработке вашего решения.