Fai dual-write su vecchio e nuovo, fai backfill della storia in background, usa il CDC per recuperare la coda, verifica con shadow read, poi commuta le letture atomicamente — con un percorso di rollback a ogni passo. Non spegni mai l'app; fai girare entrambi i database in parallelo finché il nuovo non è dimostrabilmente identico, poi fai cutover.
Architettura
┌── write ──▶ OLD DB (source of truth) ──CDC (Debezium)──┐
App ───┤ ▼
└── write ──▶ NEW DB ◀──── backfill job (historical rows)
│
shadow reads (compare OLD vs NEW) ─▶ diff metrics ─▶ atomic cutover ─▶ NEW is truth
(flip flag; rollback = flip back)
