Периодическое инкрементальное копирование
Такое копирование запускается через определенные интервалы времени. При нем в приемник попадают только те данные, которые были изменены в источнике с момента предыдущего копирования. Этот подход позволяет обновлять данные в приемнике с минимальными задержками и с низкой нагрузкой на источник данных, но не учитывает операции удаления данных в источнике. Это эффективнее, чем копировать таблицы целиком, но менее эффективно, чем использовать тип трансфера Копирование и репликация.
Примечание
Инкрементальное копирование можно настроить для источников PostgreSQL, ClickHouse® и Airbyte®.
Чтобы найти измененные данные, в таблице используется ключевая колонка, значения в которой меняются при каждом добавлении или обновлении данных. Для ключевой колонки рекомендуется построить индекс, чтобы каждый вызов не приводил к полному сканированию таблицы (fullscan). Если в таблицу только добавляются данные, в качестве ключевой колонки подходит столбец id
. Если в таблице могут изменяться существующие данные, в качестве ключевой колонки рекомендуется добавить столбец updated_at
с временным
В качестве ключевой колонки можно указывать столбцы таблиц с числовым
Чтобы периодическое инкрементальное копирование давало корректный результат, в таблице источника должны выполняться следующие условия:
- Значения ключевой колонки должны строго возрастать и не принимать значение
null
. - Значения в ключевой колонке должны изменяться при добавлении и изменении данных.
- Данные не должны удаляться. Если удаление необходимо, сохраняйте данные для удаления в другую таблицу и поставляйте отдельно.
Время ожидания завершения транзакций
Во время инкрементального копирования может возникнуть гонка транзакций. Это ситуация, когда транзакции завершаются не в том порядке, в котором начались, и поэтому более ранние изменения могут стать видны позже более поздних. При этом трансфер вычисляет значение в ключевой колонке по поздним изменениям, не учитывая более ранние.
Для решения этой проблемы используется время ожидания завершения транзакций. Это задержка между вычислением значения ключевой колонки и получением фактических данных. Благодаря этой задержке трансфер ждет заданное количество секунд, пока не будут завершены все транзакции, которые потенциально могут изменить данные в выгружаемом диапазоне, и только потом читает новые данные из таблицы.
Время ожидания завершения транзакций должно быть:
- Дольше, чем средняя транзакция вставки или изменения данных. В стандартных приложениях такие транзакции выполняются за несколько секунд.
- Значительно меньше периода между запусками трансфера, так как напрямую влияет на время выполнения трансфера.
Рекомендуемое значение и значение по умолчанию — 15
секунд.
ClickHouse® является зарегистрированным товарным знаком ClickHouse, Inc