Уважаемые форумчане, здравствуйте!
Нужен ваш совет.
Алгоритм определения изменений схемы данных.
Введение:
В крупной системе, реализующей минросервисную архитектуру часто возникает необходимость синхронизации горячих данных между различными компонентами (исполняемыми модулями). Как правило единой точкой правды для всех компонентов является СУБД, а именно какая либо схема или набор объектов СУБД. Но частые обращения к этим объектам, в особенности запросы содержащие агрегатные или аналитические функции, негативно влияют на производительность СУБД в целом. Поэтому для разных ситуаций разрабатывают различные тактики определения разности состояний тех или иных объектов СУБД для синхронизации с приложением.
Что нужно сделать:
Спроектировать алгоритм (фунцию) определяющую есть ли изменения в СУБД или нет начиная с какого-либо времени или идентификатора.
Вариации:
—Вычисление изменение всей схемы целиком.
—Вычисление изменений заданных объектов (таблиц, колонок).
—Вычисление, реализованное только на JAVA без использования системных объектов СУБД.
—(повышенной сложности) Вычисление, реализованное только на SQL на СУБД Postgres.
—Вычисление допускает введение дополнительных сущностей в схему данных, либо рекомендации к проектированию схемы.
Критерии оценки:
Код должен быть покрыт нагрузочными тестами, приведены оценки планов запроса.
Написано относительно сложно, суть, как я понимаю, необходимо написать на java какую-нибудь простую реализацию: класс, который будет отслеживать изменения данных.
Я гуглил-гуглил и так и этак. Кто-то предлагает на основе анализа журнала транзакций, использовать механизм триггеров. Вроде бы в MS Sql Server и в postgresql есть какие-то встроенные инструменты для этого, кто то предлагал делать это посредством контрольных сумм, в то же время чего-то простого доступного мне найти не удалось. Может быть есть возможность подсказать?
Никита
17 уровень
Мониторинг изменений в базах данных
Комментарии (1)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Сергеев ВикторMaster
29 января 2020, 20:40
таблицу с счетчиками изменений на каждый важный функционал.
Как только требуется проверить свежеть данных сначала проверить версию своих данных и в БД.
Отличается - запросить данные.
Каждый раз когда важные данные меняются увеличивать этот счетчик. Чтобы избежать дублирования, можно генерить uuid + timestamp
Можно сделать как в java коде, так и в plsql
+2