Отследить появление строки в базе данных MySql [Java]

Мне нужно отследить появление строки с информацией в бд и затем брать из неё данные и выполнять какие-либо действия.


Ответы (1 шт):

Автор решения: Roman Konoval

К сожалению в mysql нет средств делать уведомления (как LISTEN/NOTIFY в postgres), или использовать языки типа python/javascript с их богатыми возможностями для сетевой коммуникации.

Пожалуй, самый лучший вариант, это если вы контролируете и вставку тоже, то делать такое отслеживание вне БД. И выполнять действие до изменения в БД. Этот способ не будет работать, если вы не контролируете изменения или вам нужна гарантия и действие только после того, как транзакция в БД зафиксирована (т.е. после commit-а).

Еще вариант - это регулярные запросы в БД. Скажем каждую секунду делаем запрос. Важно сделать, чтоб этот запрос был как можно более легковесным и делать его настолько редко, на сколько вы можете себе позволить. Чтоб сделать легковесным этот запрос, не делайте его к большой таблице, а создайте таблицу с одной записью, которая будет хранить флаг, есть изменения или нет. При вставке в оригинальную таблицу, нужно выставлять этот флаг (можно триггером, можно вручную - это уж как удобно).

Еще одни способ это пользовательская функция написанная на C. Нужно скомпилировать библиотеку с функцией и добавить ее к динамически подгружаемым библиотекам сервера. Вот есть пример, правда довольно старый и не очень ясно насколько совместимый с новыми версиями mysql.

Такая функция может отсылать уведомление по сети, например делать даже http запрос. А уже вами написаный слушатель будет реагировать и делать, что нужно.

→ Ссылка