Просмотр таблицы изменений в MySQL?
Есть ли лучший способ наблюдать за новыми записями в таблице, кроме того, чтобы выбирать из них все n тиков времени или что-то в этом роде?
У меня есть таблица, что внешняя программа обновляется очень часто, и клиенты могут следить за этими новыми данными по мере их поступления, как я могу это сделать, не устанавливая фиксированный период повторяемых операторов выбора?
Ответы
Ответ 1
В MySQL нет лучшего способа опроса (вы создаете определенную таблицу для упрощения опроса), в других базах данных вы можете иметь триггеры, которые оказывают влияние за пределами базы данных. В MySQL triggers можно делать только вещи внутри самой базы данных (например, заполняя таблицу помощников).
Ответ 2
Вот что я делаю:
У меня есть триггеры, настроенные для таблицы (вставка, удаление, обновление), и эти триггеры увеличивают счетчик в другой таблице. Мой код доступа к БД хранит локальный счетчик и сравнивает его с возвращаемым значением, в конечном итоге отправляя bool обратно вызывающему абоненту, отвечая на вопрос IsDataCurrent().
Наши программы, которые используют этот код доступа к БД, либо опроса, либо проверяют его по запросу, а затем делают соответствующие звонки, чтобы поддерживать себя в актуальном состоянии.
Я уверен, что есть другие способы решить эту проблему. Тем не менее, это сработало для меня очень хорошо.
Ответ 3
Другим подобным подходом было бы добавить
add column Last_Modified TIMESTAMP ON UPDATE CURRENT_TIMESTAMP DEFAULT CURRENT_TIMESTAMP
для каждой таблицы и предисловие ваших выбранных запросов для сравнения последней даты/времени запроса с max (Last_Modified).
Базы данных обычно вытягивают источники, а не нажимают, поэтому вам все равно нужно программно исследовать изменения независимо от того, что.
Ответ 4
Можно вызвать поведение вне базы данных, если у вас есть контроль над хостом.
А)
Этот вопрос отвечает, пишущий в файл, используя "select in outfile", с каким-то системным процессом просматривайте этот файл для изменений (например, метод inotify, такой как node-inotify или даже Grunt-watch может быть достаточно)
B) Для храбрых:
Ответ на этот вопрос указывает, что если вы можете установить надстройки C/С++ на свой сервер базы данных, вы можете использовать функцию, определенную пользователем (UDF), для вызова sys_exec() и, таким образом, инициировать внешние процессы или, по-видимому, записывать фактический процесс непосредственно в UDF.
http://dev.mysql.com/doc/refman/5.0/en/faqs-triggers.html#qandaitem-B-5-1-11
(Я изучаю это на данный момент для приложения AWS RDS, поэтому, к сожалению, ни один из этих вариантов не подходит для меня.)
Ответ 5
Это лишь небольшое усовершенствование вашего метода. Напишите триггер в таблице (таблицах), которую вы смотрите, чтобы обновить таблицу Last_Changed.
Ответ 6
если вы знаете SQL достаточно... вы можете написать триггеры и сигналы тревоги.
Ответ 7
nodejs + websockets сделают трюк!