Привет!
Есть база, там клиенты, договора, платежи, и т.д т.п., нужно собирать инфу и записывать в файл, потом отправлять на сторонний сервер в CSV.
У меня получилось много классов (клиент, платеж, ... ) с ДТО для каждого, каждый наследуется от абстрактного класса в котором подготовка данных к нужным форматам, запись CSV, отправка на сторонний сервер....
В контроллер передается название класса который нужно экспортировать, по названию получаю данные и складываю в массив.
Все запускается через крон.
Задача:
1) При первом запуске тащим все, пишем и отсылаем - тут все ок
2) При последующих запусках нужно выявить изменившиеся данные и отправлять только их и/или добавленные записи (клиент, платеж, ... )
Вопрос: каким лучше способом выявлять изменившиеся данные?
Думаю пока так: в бд сделать табличку:
entity - экспортируемый класc;
entity_id - id записи в основной бд;
hash - собирать md5 из данных (клиент, платеж, ... )
При последующем запуске получать последний entity_id, и запрашивать из бд новые записи.
В нужный момент запрашивать все записи, вычислять hash, в случае его отличия, записывать в файлик ну и....
Вот!
P.S. Бд в которой все лежит MySql, api нет, софт лицензионный, сервак лицензионный требует csv
Как определять изменившиеся данные в БД
Re: Как определять изменившиеся данные в БД
Можно писать на каждое изменение событие в отдельную таблицу event(id: int, entity_name: string, entity_id : int, handled : bool), потом читать необработанные события (handled=false) и экспортировать каждую сущность по (entity_name, entity_id), после этого делать handled=true у каждого обработанного события. Еще можно с датой/времененем последнего изменения сущностей поиграться, но может получиться не очень надежно.
Регистрацию каждого изменения в отдельную таблицу легко сделать с помощью триггеров.
Регистрацию каждого изменения в отдельную таблицу легко сделать с помощью триггеров.
Да тут от API может и больше проблем было бы чем пользы, принимайте как данность)
Re: Как определять изменившиеся данные в БД
Спасибо! А если нет возможности создать триггер в основной бд? У меня получается 2 базы, одна для собственных нужд, вторая на удаленном серваке.
Re: Как определять изменившиеся данные в БД
А почему не получается? CREATE TRIGGER запрещен?
Тогда можно в коде приложения в одной транзакции с каждым запросом на добавление/изменение записей делать запросы на вставку событий