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

Дано:

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

MySQL Server 5.1

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


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


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

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


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


Вопрос: как из Mysql или memcache записать данные в канал или уведомить вебсервер о том, что данные в таблице добавились/изменились?
  • Вопрос задан
  • 6289 просмотров
Решения вопроса 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 и с помощью нее вызывать внешнюю программу/скрипт по триггеру
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
SaveTime Москва
от 140 000 до 200 000 руб.
от 180 000 до 200 000 руб.
от 240 000 до 260 000 руб.