Podział tabeli bez Big Bang: jak rozdzielić jeden model na dwa
Podział tabeli bez Big Bang: jak rozdzielić jeden model na dwa
Załóżmy, że przez lata tabela Customer urosła do kilkudziesięciu kolumn.
Część danych adresowych chcemy przenieść do osobnej tabeli.
Nowa tabela
| |
Krok 1 — nowa struktura bez usuwania starej
Stare kolumny nadal istnieją. Nowa tabela jest rozszerzeniem modelu.
Krok 2 — backfill
| |
Na dużych tabelach proces wykonujemy w batchach i zapisujemy checkpoint.
Krok 3 — synchronizacja
W okresie przejściowym zmiana adresu musi trafić do obu modeli albo do jednego źródła prawdy z synchronizacją do drugiego.
Krok 4 — przełączenie odczytu
Najpierw mała część ruchu, potem coraz większa.
Shadow read pozwala porównać stary i nowy wynik.
Krok 5 — usunięcie starych kolumn
To ostatni etap, nie część pierwszego wdrożenia.
Przed Contract sprawdź:
- raporty,
- integracje,
- ETL,
- procedury,
- dynamiczny SQL,
- eksporty,
- narzędzia BI.
Ryzyko semantyczne
Podział tabeli często zmienia nie tylko fizyczny schemat, ale również znaczenie danych.
Jeden adres może stać się wieloma adresami. Wtedy rollback do starego modelu może być stratny.
Podsumowanie
Podział tabeli jest bezpieczny wtedy, gdy najpierw dodajemy nową reprezentację, potem przenosimy ruch, a dopiero na końcu usuwamy starą.