+11 голос |
Еще один пост в этой серии посвящяется технике Changed Data Capture, или сокращенно CDC. Встречается также иногда написание Change Data Capture. Суть CDC - выделение измененных или добавленных в СУБД данных за период времени. На жаргоне такие данные еще называют "дельтой".
Выделение "дельты" в транзакционных системах - обязательная задача при создании аналитических хранилищ данных, CRM, MDM-хабов, Это также часто встречающаяся задача в проектах по миграции с одной учетной системы на другую, когда есть период паралельной эксплуатации. При традиционном подходе, "дельта" данных определяется обычными запросами типа SELECT к СУБД.
Однако в случае большого количестве новых и измененных транзакционных данных такие запросы могут выполняться часами, при этом нередко значительно влияя на производительность системы из которой извлекаются данные. Если у транзакционных систем есть явный период сниженной нагрузки (например ночью) и этого периода хватает, чтобы выгрузить "дельту" всех необходимых данных без ущерба для основной деятельности системы - то использование прямых запросов к СУБД это приемлемый вариант. А что делать, если периода сниженной нагрузки нет, или выделенного окна загрузки не хватает, чтобы полностью выгрузить всю "дельту"?
В этих случаях целесообразно попробовать использовать CDC-решения. Принцип их работы достаточно прост - выявление новых и измененных данных за период происходит непосредственно по логам СУБД, минуя движок выполнения запросов СУБД. У такого подхода есть существенные преимущества:
- Практически нулевая нагрузка на систему источник, так как CDC-агент, сканирующий логи достаточно нетребователен к аппаратным ресурсам. Это значит что выгрузка данных может проходить в любое время работы приложения.
- Возможность сканировать логи в реал-тайме. Благодаря этому отпадает необходимость иметь ночное окно выгрузки - фактически "дельта" данных будет готова сразу на момент закрытия дня.
- Полученная "дельта" данных при необходимости сразу может быть сохранена в СУБД другого типа, или же экспортирована в текстовый файл.
- Простота выявления изменений, сделанных "задним числом", что нередко представляет собой проблему при построении аналитических хранилищ данных или в проектах по миграции.
Некоторые CDC-агенты могут хорошо вписываться в сервис-ориентированную архитектуру, так как могут подсоединяться к шине обмена сообщениями (service bus) и отправлять сообщения с измененным данным в он-лайн режиме. Некоторые CDC-агенты позволяют на лету делать простенькие преобразования данных - например, сложить два поля, или выполнить конкатенацию полей.
Кстати, еще один пример, когда полезно использовать CDC - это когда необходимо получить аналитический отчет совмещающий исторические данные из хранилища данных и оперативные данные "на сейчас" из оперативной учетной системы.
Ready, set, buy! Посібник для початківців - як придбати Copilot для Microsoft 365
+11 голос |
Что такое "логи СУБД"? Лог транзакций? Если да, то "Практически нулевая нагрузка на систему" мягко говоря не верно. Как правило в ОЛТП дисковая подсистема лога нагружена не менее дисковой подсистемы хранилища.
Хотя, конечно, возможны варианты.
Детальной технической информацией я поделиться не могу - я не DBA. В тех вариантах, которые я знаю используются redo-логи.
Речь идет о дополнительной нагрузке - она как правило сравнительно небольшая.
Варианты возможны всегда - читайте, разбирайтесь, пробуйте ;)