`

СПЕЦИАЛЬНЫЕ
ПАРТНЕРЫ
ПРОЕКТА

Архив номеров

Как изменилось финансирование ИТ-направления в вашей организации?

Best CIO

Определение наиболее профессиональных ИТ-управленцев, лидеров и экспертов в своих отраслях

Человек года

Кто внес наибольший вклад в развитие украинского ИТ-рынка.

Продукт года

Награды «Продукт года» еженедельника «Компьютерное обозрение» за наиболее выдающиеся ИТ-товары

 

Дмитрий Гудков

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

+11
голос

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

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

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

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

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

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

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

+11
голос

Напечатать Отправить другу

Читайте также

Что такое "логи СУБД"? Лог транзакций? Если да, то "Практически нулевая нагрузка на систему" мягко говоря не верно. Как правило в ОЛТП дисковая подсистема лога нагружена не менее дисковой подсистемы хранилища.
Хотя, конечно, возможны варианты.

Детальной технической информацией я поделиться не могу - я не DBA. В тех вариантах, которые я знаю используются redo-логи.

Речь идет о дополнительной нагрузке - она как правило сравнительно небольшая.

Варианты возможны всегда - читайте, разбирайтесь, пробуйте ;)

 
 
IDC
Реклама

  •  Home  •  Рынок  •  ИТ-директор  •  CloudComputing  •  Hard  •  Soft  •  Сети  •  Безопасность  •  Наука  •  IoT