Zmapuj każdego czytelnika i pisarza
Pracuj na odizolowanym schemacie z reprezentatywnymi zanonimizowanymi danymi. Potrzebujesz bieżącej i następnej wersji aplikacji, znajomości swojego frameworka migracji, zweryfikowanej strategii kopii zapasowych oraz wglądu w długie transakcje. Uwzględnij workery, zadania zaplanowane, raporty i starsze instancje aplikacji. API może aktualizować się szybko, podczas gdy długo działający worker wciąż zapisuje do starej kolumny.
Nasza ilustracyjna usługa raportowania przechowuje etykietę eksportu w label i chce display_name. To przykład projektowy, a nie uniwersalny wykonywalny SQL. Potwierdź dokładną wersję PostgreSQL i framework przed wyborem składni migracji lub ustawień blokad.
Rozszerzaj bez wycofywania starej reprezentacji
Najpierw wprowadź nowe pole nullable. Wdróż wersję zgodności, która zapisuje obie wartości w jednej transakcji i odczytuje z wymaganym fallbackiem, gdy dane są niekompletne. Zdefiniuj, co się dzieje, gdy klient edytuje rekord podczas uzupełniania danych. Ponowna próba nie może utworzyć drugiego logicznego eksportu.
PostgreSQL ALTER TABLE operacje pozyskują blokady, a poziom zależy od podkomendy. Niewielka zmiana może czekać za długą transakcją, a następnie blokować inne prace. Przejrzyj konkretną operację i obserwuj oczekiwania podczas próby; addytywne nie oznacza wolne od blokad.
Dokumentacja techniczna: PostgreSQL ALTER TABLE · PostgreSQL jawne blokowanie.
Uczyń granicę zgodności widoczną
| Schemat i pisarze | Zachowanie czytelnika | Decyzja o odzyskiwaniu |
|---|---|---|
| Istnieje tylko label | Obsługiwany stary kod | Najpierw dodaj nowe pole |
| Oba pola; pozostają pisarze tylko starego pola | Odczytuj label jako autorytatywny | Jeszcze nie przełączaj czytelników |
| Wszyscy pisarze zapisują podwójnie; zweryfikowane uzupełnienie danych | Nowe pole może stać się autorytatywne | Wycofaj tylko do zgodnego kodu podwójnego zapisu |
| Stare pole usunięte | Żaden kod nie może odwoływać się do label | Stary artefakt jest niezgodny |
Fallback dla brakujących wartości nie może wykryć niepustej, ale nieaktualnej nowej wartości. Przed przełączeniem czytelników wycofaj pisarzy zapisujących tylko stare pole i zweryfikuj spójność. Wycofanie do kodu obsługującego tylko stare pole po przełączeniu czytelników może ponownie stworzyć rozbieżność. Zamiast tego zachowaj wersję zgodności jako zweryfikowany artefakt odzyskiwania.
Uzupełnij dane w ograniczonych, wznawialnych partiach
Znajdź wiersze wymagające skopiowania bez nadpisywania nowszej edycji klienta. Użyj stabilnego porządkowania, warunku aktualizacji bezpiecznego dla współbieżności i partii dobranych do obciążenia. Utrwal postęp, aby awaria mogła wznowić od znanej granicy. Monitoruj wolumen zapisów, oczekiwania na blokady, opóźnienie żądań i replikację, jeśli występuje.
Żaden rozmiar partii nie jest bezpieczny dla każdej aplikacji. Podczas próby porównaj małą partię ze zwykłym ruchem, a następnie wybierz regułę pauzy lub zatrzymania. Jeśli partia zawiedzie, sprawdź, co zostało zatwierdzone przed ponowną próbą. Nieograniczona pętla ponownych prób może zamienić odwracalną niezgodność w trwałe obciążenie bazy danych.
Sprawdź semantykę, nie tylko wypełnione wiersze
Zweryfikuj brakujące wartości, reprezentatywne etykiety, nowe rekordy i aktualizacje istniejących eksportów. Zliczanie niepustych wierszy może wyglądać poprawnie, mimo że wartości skopiowano z niewłaściwego źródła. Przetestuj artefakt zgodności na częściowo wypełnionych danych i uruchom worker rozpoczęty przed wdrożeniem.
Zapisz wersję schematu, rewizję migracji, kryteria ukończenia i niezgodne kombinacje. Przed usunięciem któregokolwiek sprawdź użycie fallbacku i spójność. Jeśli kontrole zawiodą, zatrzymaj uzupełnianie danych lub promocję, zachowaj dowody i wybierz zgodny artefakt albo zweryfikowaną naprawę do przodu. Nie twierdź, że wycofanie aplikacji odtworzy zatwierdzone dane.
Wycofaj stare pole w innej zweryfikowanej wersji
Usuń stare odczyty i zapisy po spełnieniu kryteriów przez uzupełnienie danych i okres obserwacji. Sprawdź rzadkie zadania, a także trasy interaktywne. Usunięcie starego pola należy do późniejszej zmiany z własną decyzją o odzyskiwaniu, aby problem z wydaniem nie zmuszał do łączenia naprawy kodu z rekonstrukcją danych.
Jeśli po wycofaniu pojawią się złe dane, zatrzymaj dalsze szkody i użyj planu odzyskiwania lub zatwierdzonej naprawy. Nie stosuj destrukcyjnej migracji w dół tylko dlatego, że narzędzia udostępniają przycisk wycofania. Dołącz macierz do rekordu wydania i przećwicz odzyskiwanie danych przed zmianą produkcji. Użytecznym wynikiem jest wyraźna granica zgodności, a nie gwarancja zerowego przestoju.
Oficjalne odniesienia
Dokumentacja została zweryfikowana dla tego artykułu. Przykłady są ćwiczeniami planistycznymi, a nie poleceniami przetestowanymi na serwerze PrivacyNodes. Sprawdź dokumentację dla swojej zainstalowanej wersji.