Мониторинг изменений в базах данных

74
17 марта 2022, 08:20

Нужен ваш совет.

Алгоритм определения изменений схемы данных.

Введение: В крупной системе, реализующей микросервисную архитектуру часто возникает необходимость синхронизации горячих данных между различными компонентами (исполняемыми модулями). Как правило единой точкой правды для всех компонентов является СУБД, а именно какая либо схема или набор объектов СУБД. Но частые обращения к этим объектам, в особенности запросы содержащие агрегатные или аналитические функции, негативно влияют на производительность СУБД в целом. Поэтому для разных ситуаций разрабатывают различные тактики определения разности состояний тех или иных объектов СУБД для синхронизации с приложением.

Что нужно сделать: Спроектировать алгоритм (функцию) определяющую есть ли изменения в СУБД или нет начиная с какого-либо времени или идентификатора. Вариации:

  • Вычисление изменение всей схемы целиком.
  • Вычисление изменений заданных объектов (таблиц, колонок).
  • Вычисление, реализованное только на JAVA без использования системных объектов СУБД.
  • (повышенной сложности) Вычисление, реализованное только на SQL на СУБД Postgres.
  • Вычисление допускает введение дополнительных сущностей в схему
    данных, либо рекомендации к проектированию схемы.

Критерии оценки: Код должен быть покрыт нагрузочными тестами, приведены оценки планов запроса.

Написано относительно сложно, суть, как я понимаю, необходимо написать на java какую-нибудь простую реализацию: класс, который будет отслеживать изменения данных.

Я гуглил-гуглил и так и этак. Кто-то предлагает на основе анализа журнала транзакций, использовать механизм триггеров. Вроде бы в MS Sql Server и в postgresql есть какие-то встроенные инструменты для этого, кто то предлагал делать это посредством контрольных сумм, в то же время чего-то простого доступного мне найти не удалось. Может быть есть возможность подсказать?

Answer 1

https://www.postgresql.org/docs/current/logicaldecoding-explanation.html Инфраструктура Logical Decoding.

Либо триггером пишете в pgq, ваше приложение вычитывает очередь pgq. Это сильно проще.

READ ALSO
java swing как добавить boxlayout

java swing как добавить boxlayout

пишу программу которая рассчитает сопротивление резисторов подключенных параллельно

221
Расположение JDialog в центре экрана

Расположение JDialog в центре экрана

Подскажите пожалуйста в приведенном коде левых верхний угол объекта JDialog помещен в центр экрана, мне необходимо, что бы в центре экрана был...

85
Задача: Написать интерфейс для пульта от кондиционера

Задача: Написать интерфейс для пульта от кондиционера

Прошу подсказать, не могу понять как как сделать реализацию интерфейса

56
Vertical timeline

Vertical timeline

Я прошу у вас совета, как правильно реализовать данный vertical timeline, такой как на картинке

245