Короткий ответ
Данные мигрируют поэтапно: сначала создают отдельную БД для нового сервиса и организуют синхронизацию со старой БД, затем постепенно переключают читателей и писателей на новый сервис, и только после полной проверки отключают старую таблицу.
Как это работает подробнее
Прямое одномоментное отключение общей таблицы рискованно, так как другие части монолита могут ещё обращаться к ней напрямую; поэтапный подход (strangler fig) позволяет держать обе стороны синхронизированными и откатиться на любом этапе.
Пример кода
Схема
Этап 1: backfill order_service_db.orders из monolith_db.orders
Этап 2: все новые записи дублируются в обе БД (dual write через outbox)
Этап 3: чтения переводятся на Order Service API
Этап 4: запись переводится на Order Service, monolith_db.orders становится read-only
Этап 5: после подтверждения — monolith_db.orders архивируется/удаляетсяЧто использовать на практике
- Практика. Типичные шаги: создать схему новой БД, настроить backfill и продолжающуюся синхронизацию, перевести чтения на новый сервис через API, перевести запись через Order Service, и только после подтверждения удалить старую таблицу.
Подводные камни
- Риск. Переключать и чтение, и запись одновременно без промежуточного этапа синхронизации; забывать про неизвестных потребителей старой таблицы (отчёты, BI-инструменты).