Files
progcode/web/public/assets/editorial/2024/data-migrations-2024-expand-contract-timeline.svg
T
huncode b28d2c14cf
Build and deploy / deploy (push) Successful in 14s
revise April 2024 data migration articles
2026-07-31 15:46:48 +03:00

47 lines
5.2 KiB
XML

<svg xmlns="http://www.w3.org/2000/svg" width="1200" height="820" viewBox="0 0 1200 820" role="img" aria-labelledby="title desc">
<title id="title">Expand, migrate, switch and contract timeline</title>
<desc id="desc">Four-stage timeline for a safe data migration. The old representation remains through expand, migrate and switch. Contract happens only after compatibility evidence and an explicit recovery boundary.</desc>
<rect width="1200" height="820" fill="#f7fafc"/>
<rect x="48" y="42" width="1104" height="112" rx="22" fill="#102a43"/>
<text x="82" y="90" fill="#ffffff" font-family="Arial, sans-serif" font-size="32" font-weight="700">Миграция: старая форма живёт до contract</text>
<text x="82" y="128" fill="#cbd5e1" font-family="Arial, sans-serif" font-size="22">Expand → migrate → switch → contract: удалить старое можно только после отдельного evidence</text>
<line x1="146" y1="350" x2="1054" y2="350" stroke="#486581" stroke-width="8" stroke-linecap="round"/>
<path d="M1054 350 L1018 330 L1018 370 Z" fill="#486581"/>
<circle cx="190" cy="350" r="48" fill="#2f855a"/>
<circle cx="455" cy="350" r="48" fill="#2f855a"/>
<circle cx="720" cy="350" r="48" fill="#d69e2e"/>
<circle cx="985" cy="350" r="48" fill="#b83280"/>
<text x="165" y="360" fill="#ffffff" font-family="Arial, sans-serif" font-size="26" font-weight="700">1</text>
<text x="430" y="360" fill="#ffffff" font-family="Arial, sans-serif" font-size="26" font-weight="700">2</text>
<text x="695" y="360" fill="#ffffff" font-family="Arial, sans-serif" font-size="26" font-weight="700">3</text>
<text x="960" y="360" fill="#ffffff" font-family="Arial, sans-serif" font-size="26" font-weight="700">4</text>
<rect x="72" y="196" width="236" height="104" rx="18" fill="#e6fffa" stroke="#2f855a" stroke-width="3"/>
<text x="96" y="236" fill="#1a202c" font-family="Arial, sans-serif" font-size="28" font-weight="700">Expand</text>
<text x="96" y="270" fill="#334e68" font-family="Arial, sans-serif" font-size="21">Добавить new shape</text>
<text x="96" y="294" fill="#334e68" font-family="Arial, sans-serif" font-size="21">не ломая old writer</text>
<rect x="337" y="196" width="236" height="104" rx="18" fill="#e6fffa" stroke="#2f855a" stroke-width="3"/>
<text x="361" y="236" fill="#1a202c" font-family="Arial, sans-serif" font-size="28" font-weight="700">Migrate</text>
<text x="361" y="270" fill="#334e68" font-family="Arial, sans-serif" font-size="21">Bounded backfill</text>
<text x="361" y="294" fill="#334e68" font-family="Arial, sans-serif" font-size="21">и stop condition</text>
<rect x="602" y="196" width="236" height="104" rx="18" fill="#fffbeb" stroke="#d69e2e" stroke-width="3"/>
<text x="626" y="236" fill="#1a202c" font-family="Arial, sans-serif" font-size="28" font-weight="700">Switch</text>
<text x="626" y="270" fill="#334e68" font-family="Arial, sans-serif" font-size="21">Reader меняется</text>
<text x="626" y="294" fill="#334e68" font-family="Arial, sans-serif" font-size="21">по evidence</text>
<rect x="867" y="196" width="236" height="104" rx="18" fill="#fff5f7" stroke="#b83280" stroke-width="3"/>
<text x="891" y="236" fill="#1a202c" font-family="Arial, sans-serif" font-size="28" font-weight="700">Contract</text>
<text x="891" y="270" fill="#334e68" font-family="Arial, sans-serif" font-size="21">Удалить old path</text>
<text x="891" y="294" fill="#334e68" font-family="Arial, sans-serif" font-size="21">только отдельно</text>
<rect x="80" y="430" width="758" height="130" rx="18" fill="#ffffff" stroke="#829ab1" stroke-width="3"/>
<text x="108" y="474" fill="#102a43" font-family="Arial, sans-serif" font-size="27" font-weight="700">Совместимый период</text>
<text x="108" y="512" fill="#334e68" font-family="Arial, sans-serif" font-size="23">old reader/writer и new reader/writer имеют объявленную форму данных</text>
<text x="108" y="542" fill="#334e68" font-family="Arial, sans-serif" font-size="23">старое представление сохраняется, пока есть declared old consumer</text>
<rect x="872" y="430" width="248" height="130" rx="18" fill="#fff5f7" stroke="#b83280" stroke-width="3"/>
<text x="900" y="474" fill="#7a2846" font-family="Arial, sans-serif" font-size="25" font-weight="700">Не rollback</text>
<text x="900" y="510" fill="#7a2846" font-family="Arial, sans-serif" font-size="20">Удалённые данные</text>
<text x="900" y="536" fill="#7a2846" font-family="Arial, sans-serif" font-size="20">не вернёт binary</text>
<path d="M720 604 C720 688 520 688 520 626" fill="none" stroke="#2f855a" stroke-width="6" stroke-linecap="round"/>
<path d="M520 626 L540 652 L504 650 Z" fill="#2f855a"/>
<text x="252" y="714" fill="#1f7a4d" font-family="Arial, sans-serif" font-size="24" font-weight="700">До contract можно вернуться к совместимому code path</text>
<text x="92" y="774" fill="#486581" font-family="Arial, sans-serif" font-size="20">Это схема решений, не SQL-план и не обещание поведения конкретной СУБД.</text>
</svg>