Просмотр таблицы изменений в 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 сделают трюк!