Как определять изменившиеся данные в БД

Обсуждаем, как правильно строить приложения
Ответить
nulled
Сообщения: 74
Зарегистрирован: 2018.10.30, 13:42

Как определять изменившиеся данные в БД

Сообщение nulled »

Привет!

Есть база, там клиенты, договора, платежи, и т.д т.п., нужно собирать инфу и записывать в файл, потом отправлять на сторонний сервер в CSV.

У меня получилось много классов (клиент, платеж, ... ) с ДТО для каждого, каждый наследуется от абстрактного класса в котором подготовка данных к нужным форматам, запись CSV, отправка на сторонний сервер....

В контроллер передается название класса который нужно экспортировать, по названию получаю данные и складываю в массив.

Все запускается через крон.


Задача:
1) При первом запуске тащим все, пишем и отсылаем - тут все ок
2) При последующих запусках нужно выявить изменившиеся данные и отправлять только их и/или добавленные записи (клиент, платеж, ... )

Вопрос: каким лучше способом выявлять изменившиеся данные?

Думаю пока так: в бд сделать табличку:
entity - экспортируемый класc;
entity_id - id записи в основной бд;
hash - собирать md5 из данных (клиент, платеж, ... )

При последующем запуске получать последний entity_id, и запрашивать из бд новые записи.
В нужный момент запрашивать все записи, вычислять hash, в случае его отличия, записывать в файлик ну и....

Вот! :shock:

P.S. Бд в которой все лежит MySql, api нет, софт лицензионный, сервак лицензионный требует csv
anton_z
Сообщения: 483
Зарегистрирован: 2017.01.15, 15:01

Re: Как определять изменившиеся данные в БД

Сообщение anton_z »

Можно писать на каждое изменение событие в отдельную таблицу event(id: int, entity_name: string, entity_id : int, handled : bool), потом читать необработанные события (handled=false) и экспортировать каждую сущность по (entity_name, entity_id), после этого делать handled=true у каждого обработанного события. Еще можно с датой/времененем последнего изменения сущностей поиграться, но может получиться не очень надежно.

Регистрацию каждого изменения в отдельную таблицу легко сделать с помощью триггеров.
nulled писал(а): 2020.01.22, 18:35
P.S. Бд в которой все лежит MySql, api нет, софт лицензионный, сервак лицензионный требует csv
Да тут от API может и больше проблем было бы чем пользы, принимайте как данность)
nulled
Сообщения: 74
Зарегистрирован: 2018.10.30, 13:42

Re: Как определять изменившиеся данные в БД

Сообщение nulled »

Спасибо! А если нет возможности создать триггер в основной бд? У меня получается 2 базы, одна для собственных нужд, вторая на удаленном серваке.
anton_z
Сообщения: 483
Зарегистрирован: 2017.01.15, 15:01

Re: Как определять изменившиеся данные в БД

Сообщение anton_z »

nulled писал(а): 2020.01.23, 08:34 Спасибо! А если нет возможности создать триггер в основной бд? У меня получается 2 базы, одна для собственных нужд, вторая на удаленном серваке.
А почему не получается? CREATE TRIGGER запрещен?
Тогда можно в коде приложения в одной транзакции с каждым запросом на добавление/изменение записей делать запросы на вставку событий
nulled
Сообщения: 74
Зарегистрирован: 2018.10.30, 13:42

Re: Как определять изменившиеся данные в БД

Сообщение nulled »

anton_z писал(а): 2020.01.23, 08:37
nulled писал(а): 2020.01.23, 08:34 Спасибо! А если нет возможности создать триггер в основной бд? У меня получается 2 базы, одна для собственных нужд, вторая на удаленном серваке.
А почему не получается? CREATE TRIGGER запрещен?
Тогда можно в коде приложения в одной транзакции с каждым запросом на добавление/изменение записей делать запросы на вставку событий
Могу только читать, в саму приложуху вообще доступа нету ((
anton_z
Сообщения: 483
Зарегистрирован: 2017.01.15, 15:01

Re: Как определять изменившиеся данные в БД

Сообщение anton_z »

nulled писал(а): 2020.01.23, 09:22 Могу только читать, в саму приложуху вообще доступа нету ((
Вы делаете экспорт в CSV данных стороннего приложения? Если нет доступа к коду и нет возможности сделать триггеры, тогда только полностью базу экспортировать каждый раз.
nulled
Сообщения: 74
Зарегистрирован: 2018.10.30, 13:42

Re: Как определять изменившиеся данные в БД

Сообщение nulled »

anton_z писал(а): 2020.01.24, 04:56
nulled писал(а): 2020.01.23, 09:22 Могу только читать, в саму приложуху вообще доступа нету ((
Вы делаете экспорт в CSV данных стороннего приложения?
Да, так и сделал, спасибо!
Ответить