SQL-адаптер
SQL-адаптер доставляет данные из реляционной базы заказчика в платформу: по расписанию выполняет запрос к базе-источнику, превращает каждую строку выборки в событие и передаёт его модулю Flow.
Задача
Типовая ситуация внедрения: события клиентов уже лежат в базе заказчика — транзакции, заявки, обращения, — но система-источник о платформе не знает и дорабатываться под неё не будет. Адаптер решает эту задачу со стороны платформы: сам ходит в базу по расписанию и забирает новое.
Читателю статьи адаптер нужен, когда источник данных — база Oracle, а событиям не требуется доставка в реальном времени: задержка определяется расписанием опроса. Для источников, которые сами отправляют данные, предназначены другие адаптеры Flow.
Что делает
- Читает базу-источник по расписанию в синтаксисе cron из шести полей, включая секунды. Таймзона расписания фиксирована — московская, настройке не подлежит.
- Подключается к источнику только на чтение: права на запись в базе заказчика адаптеру не нужны.
- Читает выборку потоково, без загрузки в память целиком — выборки на миллионы строк обрабатываются с буфером в 150 строк.
- Ведёт инкрементальное чтение: курсор — максимум выбранной колонки — хранится в Redis, каждая следующая выборка читает только новое. Глубина самой первой выборки задаётся начальным значением курсора.
- Превращает строку в событие по шаблону: идентификатор клиента, имя события и контекст собираются из колонок строки. Строки без имени события не отправляются.
- Сохраняет порядок событий одного клиента: маршрутизация по идентификатору гарантирует последовательную обработку в одном потоке.
- Дополнительно умеет подменять идентификатор клиента по справочнику аудиторий, ограничивать скорость чтения и параллельно записывать выборку в аналитическое хранилище PostgreSQL — таблицу-приёмник при этом заводит заказчик.
Чего не делает
- Не подключается к другим СУБД: поддерживаемый источник поставки — Oracle. Поддержка другой СУБД (PostgreSQL, MySQL, MSSQL и т.п.) добавляется по запросу — обратитесь к вашему менеджеру Accelera или в техническую поддержку.
- Не принимает данные снаружи: у адаптера нет входящих подписок и прикладного API, он управляется только собственным расписанием.
- Не пишет в базу-источник и не меняет её схему — только чтение.
- Не создаёт таблицы аналитического хранилища: миграций нет, таблицу-приёмник готовит заказчик.
- Не навёрстывает пропуски расписания: если предыдущая выборка ещё идёт, очередной запуск пропускается и повторно не выполняется.
- Не обслуживает несколько запросов одним процессом: один экземпляр — один запрос и один поток событий. Несколько источников — несколько экземпляров с разными именами.
Из чего состоит
Внутри адаптера пять частей: планировщик по расписанию, потоковое чтение источника, преобразователь строки в событие, публикация событий для Flow и хранение курсора в Redis. Дополнительно подключаются запись в аналитическое хранилище и сервер метрик с пробами готовности и живости.
Пошаговое развёртывание и полный перечень переменных — в статье Настройка SQL-адаптера.
Ключевые термины
- Адаптер — модуль, доставляющий данные из внешней системы в платформу в виде событий.
- Событие — единица данных для сценариев Flow: идентификатор клиента, имя события и контекст.
- Контекст события — набор полей события, собранный из колонок строки по заданному шаблону.
- Курсор инкремента — сохранённый максимум инкрементной колонки, от которого продолжается следующая выборка.
- Полная вычитка — режим без курсора: запрос выполняется как есть при каждом срабатывании расписания.