Еще один пост в этой серии посвящяется технике Changed Data Capture, или сокращенно CDC. Встречается также иногда написание Change Data Capture. Суть CDC - выделение измененных или добавленных в СУБД данных за период времени. На жаргоне такие данные еще называют "дельтой".
Выделение "дельты" в транзакционных системах - обязательная задача при создании аналитических хранилищ данных, CRM, MDM-хабов, Это также часто встречающаяся задача в проектах по миграции с одной учетной системы на другую, когда есть период паралельной эксплуатации. При традиционном подходе, "дельта" данных определяется обычными запросами типа SELECT к СУБД.
Однако в случае большого количестве новых и измененных транзакционных данных такие запросы могут выполняться часами, при этом нередко значительно влияя на производительность системы из которой извлекаются данные. Если у транзакционных систем есть явный период сниженной нагрузки (например ночью) и этого периода хватает, чтобы выгрузить "дельту" всех необходимых данных без ущерба для основной деятельности системы - то использование прямых запросов к СУБД это приемлемый вариант. А что делать, если периода сниженной нагрузки нет, или выделенного окна загрузки не хватает, чтобы полностью выгрузить всю "дельту"?
В этих случаях целесообразно попробовать использовать CDC-решения. Принцип их работы достаточно прост - выявление новых и измененных данных за период происходит непосредственно по логам СУБД, минуя движок выполнения запросов СУБД. У такого подхода есть существенные преимущества:
Некоторые CDC-агенты могут хорошо вписываться в сервис-ориентированную архитектуру, так как могут подсоединяться к шине обмена сообщениями (service bus) и отправлять сообщения с измененным данным в он-лайн режиме. Некоторые CDC-агенты позволяют на лету делать простенькие преобразования данных - например, сложить два поля, или выполнить конкатенацию полей.
Кстати, еще один пример, когда полезно использовать CDC - это когда необходимо получить аналитический отчет совмещающий исторические данные из хранилища данных и оперативные данные "на сейчас" из оперативной учетной системы.