Notification from database?

Доброго времени суток


Хочу обратиться к вам с проблемой, посоветуйте решение.


Нужно получать нотификации от базы данных.


Подробно. Кто-то (третья сторона) делает insert-ы (много инсертов) в базу. Я же хочу получать сообщения о том, что кто-то чего-то «вставил».


Делать селекты каждую секунду (пол, четверть секунды) — это не спортивно.


Хочу спросить вас на что посмотреть, в какую сторону двигаться. База данных, что-то из популярно-свободных (Mysql, PostgreSQL)


Я уже смотрел на UDF в MySql и на NOTIFY в PostgreSQL. Первый вариант требует дополнительной разработки, но это не проблема, нужно быстрое получение данных.


Спасибо всем!
  • Вопрос задан
  • 3752 просмотра
Пригласить эксперта
Ответы на вопрос 3
subvillion
@subvillion
В PostgreSQL есть триггеры, сначала CREATE FUNCTION, а после CREATE TRIGGER. Реагируют на insert/update/create.
В mysql с этим вроде сложенее.
Ответ написан
Комментировать
lightsgoout
@lightsgoout
Если вам нужно получать уведомления на уровне приложения, то listen/notify в postgresql хорошо подходят. Начиная с 9.х версии можно еще и отправлять полезную нагрузку вместе с уведомлением.
Проблемы могут быть в библиотеках, через которые вы работаете с postgres'ом, например я использовал в java postgresql odbc, но там приходится делать select 1, чтобы клиент получил нотификейшены, а, например, в питоновском psycopg2 такой проблемы нет.

Если за пределы бд вылезать не нужно, то годятся триггеры, тем более что у постгреса есть мощные встроенные процедурные языки: plpgsql, plperl, там можно хоть через сендмейл почту слать на каждый инсерт.
Ответ написан
Комментировать
@1x1
UDF для MySql можно и так найти: преобразовать изменения в json и отправить в memcacheq/redis/mongo или простым udp пакетом. Триггеры на slave-е во избежании проблем при отмене транзакции.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы