Как сделать обновление страницы по событию в MySQL?

Дано:

Приложение, которое умеет писать только в mySQL

MySQL Server 5.1

Web-сервер (apache+nginx+php) + memcached



Приложение активно пишет в mySQL данные, вставляет до 3 записей в секунду.



Mysql через триггер складывает обновленные данные в mecache, где они хранятся за последние 24 часа.



Необходимо, чтобы при обновлении записи в таблице — обновленная запись отображалась на странице.



Как инициировать передачу данных от Web-сервера клиенту(ам) понимаение имеется — это или comet или модуль nginx или самописанный скрипт php



Вопрос: как из Mysql или memcache записать данные в канал или уведомить вебсервер о том, что данные в таблице добавились/изменились?
  • Вопрос задан
  • 6619 просмотров
Решения вопроса 1
@pharod
1) Q4M
2) MySQL Proxy
3) Мониторинг бинлогов

Не?
Ответ написан
Пригласить эксперта
Ответы на вопрос 5
@vimvim
Возможно, что Вам поможет вот такое решение:

— Нужно написать UDF функцию для MySQL.
Функция пишется на C и может быть вызвана из триггера:
dev.mysql.com/doc/refman/5.5/en/adding-udf.html
dev.mysql.com/doc/refman/5.0/en/faqs-triggers.html#qandaitem-B-5-1-10
Условно назовем ее push_messasge(...)
Функцию нужно будет вызывать из MySQL триггера

— Нужно реализовать очередь сообщений с использованием shared memory механизма
Функция push_messasge будет писать туда сообщение.
Обратите внимание что реализацию нужно делать lock free, чтобы не вызвать падения производительности
mysql

— Нужно реализовать внешнюю программу которая будет читать сообщения из shared memory очереди и писать их
в push сервер. В качестве push сервера можно взять dklab.ru/lib/dklab_realplexor/
Программа может быть написана на python ( у dklab_realplexor реализован pythin api:
github.com/DmitryKoterov/dklab_realplexor/tree/master/api/python

— Push сервер в свою очередь будет передавать сообщения JS клиентам в браузере.
Ответ написан
Комментировать
Тут лучше всего использовать nginx_http_push_module. Почитайте про этот модуль — там всё понятно.

Самописные php-скрипты с longpooling лучше не использовать, т.к. наблюдаются проблемы с сессиями.
Ответ написан
Genome_X
@Genome_X
А разве нельзя в функцию. которая ложит запись в базу, добавить вызов всех данных из этой базы, и с помощью Ajax-а подгружать на страницу?
Получится следующая схема:

— проверяем возможность записи в БД
— если ОК, ложим запись в БД и тут же делаем запрос нужных нам данных из БД
— полученные данные ложим в переменную, с помощью Ajax-а подгружаем на необходимую нам страницу

получится реалтайм отслеживание состояния БД. Можно дополнительно прикрутить обработчик, который будет что-то делать если возможности записи в БД не будет (ошибка какая-нибудь, серв упал и т.д.).
Ответ написан
@Vampiro
Погуглите lib_mysqludf_sys, должно помочь.
Ответ написан
megahertz
@megahertz
full stack разработчик
Можно, как было сказано выше, написать UDF или взять готовую www.mysqludf.org/lib_mysqludf_sys/index.php и с помощью нее вызывать внешнюю программу/скрипт по триггеру
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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