Здравствуйте, с недавнего времени знакомлюсь с С# и MySQL и столкнулся с задачей, которая как-то не освещается в интернетах, либо я подослеп и виноват. Но понять не могу.
Используется: VS 2015, Windows Forms + MySql.Data.MySqlClient
Задача: приложение-клиент отслеживает изменения таблице БД на сервере, и если произошли изменения (напр., добавлена запись), то происходит последовательность действий (напр., просто получение и вывод, ну в этом нет проблемы). Как при работе с MySQL базой реализуется такое отслеживание? К примеру, пока копал, нашел SqlDependency, через который подобное реализуется для MSSQL.
Первое, что приходит на ум - это самому описать поведение, чтобы клиент по таймеру бомбил БД запросом, допустим, предоставления последней записи и сравнивал со своей последней полученной записью (или сравнить TIMESTAMP или id и т.д.). Если идентичны - изменений не было, если отличаются - то загружаем. Но это не выглядит рационально. Это выглядит брутально).
Сейчас читаю про NET Connector на dev.mysql.com, но не могу подобного явно найти. Объясните, пожалуйста, есть ли какое-то стандартное решение?
Есть такой вариант:
1) Добавляем триггеры к таблицы, которые при INSERT, UPDATE, DELETE логируют изменения в отдельную таблицу.
CREATE TRIGGER articles_log_update AFTER update ON articles
FOR EACH ROW BEGIN
INSERT articles_logs (action, row_id, `date`) VALUES ("update", new.id, NOW());
END
CREATE TRIGGER articles_log_insert AFTER insert ON articles
FOR EACH ROW BEGIN
INSERT articles_logs (action, row_id, `date`) VALUES ("insert", new.id, NOW());
END
CREATE TRIGGER articles_log_delete AFTER delete ON articles
FOR EACH ROW BEGIN
INSERT articles_logs (action, row_id, `date`) VALUES ("delete", old.id, NOW());
END
2) Ставим задачу по крону, чтобы она запускалась каждый час (или день, неделю), дабы проверять таблицу логов и делать необходимые действия.
Однако сразу хочу сказать, что если это ваша база данных и вы ее проектируете, то не должны допускать, чтобы таблица в БД было связующим звеном между частям приложения. Взаимодействие между внутренними и внешними сервисами должно быть реализованно в рамках апишек и контрактов.
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости