Смотря таблицу для изменения в MySQL? - PullRequest
18 голосов
/ 03 октября 2008

Есть ли лучший способ отслеживать новые записи в таблице, кроме выбора из нее каждые n тиков времени или что-то в этом роде?

У меня есть таблица, которую внешняя программа обновляет очень часто, и клиенты могут отслеживать эти новые данные по мере их поступления, как я могу это сделать, не устанавливая фиксированный период повторяющихся операторов выбора?

Ответы [ 7 ]

7 голосов
/ 03 октября 2008

Другой похожий подход - добавить

add column Last_Modified TIMESTAMP ON UPDATE CURRENT_TIMESTAMP DEFAULT CURRENT_TIMESTAMP 

к каждой таблице и предварите ваши выбранные запросы, чтобы сравнить дату / время последнего запроса с максимальным (Last_Modified).

Базы данных, как правило, источники , а не push , поэтому вам все равно придется программно проверять изменения, несмотря ни на что.

7 голосов
/ 03 октября 2008

В MySQL нет лучшего способа, чем опросить (хотя вы создаете определенную таблицу, чтобы упростить опрос), в других базах данных у вас могут быть триггеры, которые влияют вне базы данных. В MySQL триггеры могут делать вещи только внутри самой базы данных (например, заполняя таблицу помощников).

7 голосов
/ 03 октября 2008

Вот что я делаю: У меня есть несколько триггеров, настроенных для таблицы (вставка, удаление, обновление), и эти триггеры увеличивают счетчик в другой таблице. Мой код доступа к БД хранит локальный счетчик и сравнивает его с возвращенным значением, в конечном итоге отправляя bool обратно вызывающей стороне, отвечая на вопрос IsDataCurrent ().

Наши программы, использующие этот код доступа к БД, либо опрашивают, либо проверяют его по запросу, а затем совершают соответствующие вызовы, чтобы быть в курсе.

Я уверен, что есть и другие способы решить эту проблему. У меня все получилось довольно хорошо.

6 голосов
/ 30 мая 2014

возможно вызвать поведение вне базы данных, если у вас есть контроль над хостом.

A) Ответ на этот вопрос предполагает запись в файл с использованием 'select into outfile' с некоторыми системными процессами, отслеживающими этот файл на предмет изменений (например, подход на основе inotify, например node-inotify или даже часов Гранта может хватить)

Б) Для смелых: Ответ на этот вопрос указывает, что если вы можете установить дополнения C / C ++ на свой сервер базы данных, вы можете использовать пользовательскую функцию (UDF) для вызова sys_exec () и, таким образом, запускать внешние процессы, или предположительно напишите фактический процесс непосредственно в UDF.

http://dev.mysql.com/doc/refman/5.0/en/faqs-triggers.html#qandaitem-B-5-1-11

(Я сейчас изучаю это для приложения, размещенного на AWS RDS, поэтому, к сожалению, ни один из этих вариантов мне не подходит.)

1 голос
/ 03 октября 2008

Это всего лишь небольшое улучшение вашего метода. Напишите триггер для таблиц, которые вы наблюдаете, для обновления таблицы Last_Changed.

0 голосов
/ 25 октября 2012

nodejs + websockets добьются цели!

0 голосов
/ 03 октября 2008

если вы достаточно знаете SQL ... вы можете написать триггеры и аварийные сигналы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...