Создайте согласованный snapshot в отдельной версии таблицы, затем догоните изменения через CDC и атомарно переключите читателей на готовую копию. Загрузка частями не должна делать частичные данные видимыми.
Задача: есть два микросервиса, нужно перенести большую таблицу (3+ млн записей) из одного в другой (сделать локальную копию). Как бы вы это реализовали, учитывая, что данные могут часто меняться и нужна транзакционность (либо всё, либо ничего)?
Создайте согласованный snapshot в отдельной версии таблицы, затем догоните изменения через CDC и атомарно переключите читателей на готовую копию. Загрузка частями не должна делать частичные данные видимыми.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Создайте согласованный snapshot в отдельной версии таблицы, затем догоните изменения через CDC и атомарно переключите читателей на готовую копию. Загрузка частями не должна делать частичные данные видимыми.
Нужна согласованная точка snapshot и журнала изменений, включая удаления, порядок и идемпотентное применение. Проверяйте полноту по диапазонам ключей и контрольным итогам. В целевой БД можно переключить указатель активной версии одной транзакцией, сохранив старую для отката. Это даёт атомарную видимость копии, но не общую транзакцию двух микросервисов: для строго единого момента потребуется согласованный barrier, временная остановка записей либо иной распределённый протокол.