Ликбез ИТ-архитектора: Changed Data Capture

15 июль, 2009 - 11:43Дмитрий Гудков

Еще один пост в этой серии посвящяется технике Changed Data Capture, или сокращенно CDC. Встречается также иногда написание Change Data Capture. Суть CDC - выделение измененных или добавленных в СУБД данных за период времени. На жаргоне такие данные еще называют "дельтой".

Выделение "дельты" в транзакционных системах - обязательная задача при создании аналитических хранилищ данных, CRM, MDM-хабов, Это также часто встречающаяся задача в проектах по миграции с одной учетной системы на другую, когда есть период паралельной эксплуатации. При традиционном подходе, "дельта" данных определяется обычными запросами типа SELECT к СУБД.

Однако в случае большого количестве новых и измененных транзакционных данных такие запросы могут выполняться часами, при этом нередко значительно влияя на производительность системы из которой извлекаются данные. Если у транзакционных систем есть явный период сниженной нагрузки (например ночью) и этого периода хватает, чтобы выгрузить "дельту" всех необходимых данных без ущерба для основной деятельности системы - то использование прямых запросов к СУБД это приемлемый вариант. А что делать, если периода сниженной нагрузки нет, или выделенного окна загрузки не хватает, чтобы полностью выгрузить всю "дельту"?

В этих случаях целесообразно попробовать использовать CDC-решения. Принцип их работы достаточно прост - выявление новых и измененных данных за период происходит непосредственно по логам СУБД, минуя движок выполнения запросов СУБД. У такого подхода есть существенные преимущества:

  • Практически нулевая нагрузка на систему источник, так как CDC-агент, сканирующий логи достаточно нетребователен к аппаратным ресурсам. Это значит что выгрузка данных может проходить в любое время работы приложения.
  • Возможность сканировать логи в реал-тайме. Благодаря этому отпадает необходимость иметь ночное окно выгрузки - фактически "дельта" данных будет готова сразу на момент закрытия дня.
  • Полученная "дельта" данных при необходимости сразу может быть сохранена в СУБД другого типа, или же экспортирована в текстовый файл.
  • Простота выявления изменений, сделанных "задним числом", что нередко представляет собой проблему при построении аналитических хранилищ данных или в проектах по миграции.

Некоторые CDC-агенты могут хорошо вписываться в сервис-ориентированную архитектуру, так как могут подсоединяться к шине обмена сообщениями (service bus) и отправлять сообщения с измененным данным в он-лайн режиме. Некоторые CDC-агенты позволяют на лету делать простенькие преобразования данных - например, сложить два поля, или выполнить конкатенацию полей.

Кстати, еще один пример, когда полезно использовать CDC - это когда необходимо получить аналитический отчет совмещающий исторические данные из хранилища данных и оперативные данные "на сейчас" из оперативной учетной системы.