Уважаемые хабрчане, здравствуйте.
Нужен ваш совет.
Алгоритм определения изменений схемы данных.
Введение:
В крупной системе, реализующей минросервисную архитектуру часто возникает необходимость синхронизации горячих данных между различными компонентами (исполняемыми модулями). Как правило единой точкой правды для всех компонентов является СУБД, а именно какая либо схема или набор объектов СУБД. Но частые обращения к этим объектам, в особенности запросы содержащие агрегатные или аналитические функции, негативно влияют на производительность СУБД в целом. Поэтому для разных ситуаций разрабатывают различные тактики определения разности состояний тех или иных объектов СУБД для синхронизации с приложением.
Что нужно сделать:
Спроектировать алгоритм (фунцию) определяющую есть ли изменения в СУБД или нет начиная с какого-либо времени или идентификатора.
Вариации:
- Вычисление изменение всей схемы целиком.
- Вычисление изменений заданных объектов (таблиц, колонок).
- Вычисление, реализованное только на JAVA без использования системных объектов СУБД.
- (повышенной сложности) Вычисление, реализованное только на SQL на СУБД Postgres.
- Вычисление допускает введение дополнительных сущностей в схему данных, либо рекомендации к проектированию схемы.
Критерии оценки:
Код должен быть покрыт нагрузочными тестами, приведены оценки планов запроса.
Написано относительно сложно, суть, как я понимаю, необходимо написать на java какую-нибудь простую реализацию: класс, который будет отслеживать изменения данных.
Я гуглил-гуглил и так и этак. Кто-то предлагает на основе анализа журнала транзакций, использовать механизм триггеров. Вроде бы в MS Sql Server и в postgresql есть какие-то встроенные инструменты для этого, кто то предлагал делать это посредством контрольных сумм, в то же время чего-то простого доступного мне найти не удалось. Может быть есть возможность подсказать?