Spójność danych
Spójność danych odnosi się do tego, czy te same dane przechowywane w różnych miejscach są zgodne, czy też nie.
Spójność w czasie
Spójność w określonym momencie jest ważną właściwością plików kopii zapasowych i krytycznym celem oprogramowania tworzącego kopie zapasowe. Jest to również istotne przy projektowaniu systemów pamięci dyskowej, w szczególności w odniesieniu do tego, co dzieje się, gdy są one nieoczekiwanie zamykane.
Jako odpowiedni przykład kopii zapasowej rozważ witrynę internetową z bazą danych, taką jak internetowa encyklopedia Wikipedia , która musi działać przez całą dobę, ale musi być również regularnie tworzona kopia zapasowa w celu ochrony przed katastrofą. Porcje Wikipedii są stale aktualizowane co minutę każdego dnia, tymczasem baza danych Wikipedii jest przechowywana na serwerach w postaci jednego lub kilku bardzo dużych plików, których kopie zapasowe wymagają minut lub godzin.
Te duże pliki — jak każda baza danych — zawierają liczne struktury danych, które odwołują się do siebie według lokalizacji. Na przykład, niektóre struktury są indeksami , które pozwalają podsystemowi bazy danych na szybkie znalezienie wyników wyszukiwania. Jeśli struktury danych przestaną poprawnie odwoływać się do siebie nawzajem, można powiedzieć, że baza danych jest uszkodzona .
Przykład licznika
Znaczenie spójności punktu w czasie można zilustrować, co by się stało, gdyby kopia zapasowa została wykonana bez niej.
Załóżmy, że baza danych Wikipedii to ogromny plik, w którym ważny indeks znajduje się na 20% długości i zapisuje dane artykułów na poziomie 75%. Rozważmy scenariusz, w którym redaktor przychodzi i tworzy nowy artykuł w tym samym czasie, gdy wykonywana jest kopia zapasowa, która jest wykonywana jako prosta „kopia pliku”, która kopiuje od początku do końca dużego pliku (ów) i nie nie bierz pod uwagę spójności danych - aw momencie edycji artykułu jest on ukończony w 50%. Nowy artykuł jest dodawany do obszaru artykułów (przy znaku 75%) i dodawany jest odpowiedni wpis indeksu (przy znaku 20%).
Ponieważ kopia zapasowa jest już w połowie wykonana, a indeks już skopiowany, kopia zapasowa zostanie zapisana z obecnymi danymi artykułu, ale bez odniesienia do indeksu. W wyniku niespójności ten plik jest uważany za uszkodzony.
W prawdziwym życiu prawdziwa baza danych, taka jak Wikipedia, może być edytowana tysiące razy na godzinę, a odniesienia praktycznie zawsze są rozmieszczone w całym pliku i mogą liczyć miliony, miliardy lub więcej. Sekwencyjna kopia zapasowa zawierałaby dosłownie tak wiele małych uszkodzeń, że kopia zapasowa byłaby całkowicie bezużyteczna bez długiego procesu naprawy, który nie dawałby żadnej gwarancji co do kompletności tego, co zostało odzyskane.
Proces tworzenia kopii zapasowych, który odpowiednio uwzględnia spójność danych, zapewnia, że kopia zapasowa jest migawką tego, jak wyglądała cała baza danych w jednym momencie. W podanym przykładzie z Wikipedii zapewniłoby to, że kopia zapasowa została zapisana bez dodanego artykułu przy znaku 75%, tak aby dane artykułu były zgodne z wcześniej zapisanymi danymi indeksu.
Systemy pamięci podręcznej dysku
Spójność punktu w czasie jest również istotna dla podsystemów dysku komputera.
W szczególności systemy operacyjne i systemy plików są projektowane z założeniem, że system komputerowy, na którym działają, może w dowolnym momencie utracić zasilanie, ulec awarii, awarii lub w inny sposób przestać działać. Odpowiednio zaprojektowane zapewniają, że dane nie zostaną nieodwracalnie uszkodzone w przypadku utraty zasilania. Systemy operacyjne i systemy plików robią to, upewniając się, że dane są zapisywane na dysku twardym w określonej kolejności i polegają na tym w celu wykrywania i odzyskiwania po nieoczekiwanych wyłączeniach .
Z drugiej strony rygorystyczne zapisywanie danych na dysku w kolejności maksymalizującej integralność danych również wpływa na wydajność. Proces buforowania zapisu służy do konsolidacji i zmiany kolejności operacji zapisu, tak aby można je było wykonywać szybciej, minimalizując czas poświęcany na przesuwanie głowic dysków.
Problemy ze spójnością danych pojawiają się, gdy buforowanie zapisu zmienia kolejność wykonywania zapisów, ponieważ istnieje możliwość nieoczekiwanego zamknięcia, które narusza oczekiwania systemu operacyjnego, że wszystkie zapisy będą zatwierdzane sekwencyjnie.
Na przykład, aby zapisać typowy plik dokumentu lub obrazu, system operacyjny może zapisać na dysku następujące rekordy w następującej kolejności:
- Wpis w dzienniku mówiący, że plik XYZ ma zostać zapisany w sektorze 123.
- Rzeczywista zawartość pliku XYZ jest zapisywana w sektorze 123.
- Sektor 123 jest teraz oznaczony jako zajęty w rejestrze wolnej/używanej przestrzeni.
- Wpis w dzienniku odnotowujący, że plik został całkowicie zapisany, a jego nazwa to XYZ i znajduje się w sektorze 123.
System operacyjny opiera się na założeniu, że jeśli widzi, że element nr 1 jest obecny (mówiąc, że plik ma zostać zapisany), ale brakuje elementu nr 4 (potwierdzającego powodzenie), operacja zapisywania nie powiodła się i dlatego powinien cofnąć wszelkie niekompletne kroki już podjęte w celu zapisania go (np. oznaczenie sektora 123 jako wolnego, ponieważ nigdy nie był on prawidłowo wypełniony, oraz usunięcie wszelkich zapisów XYZ z katalogu plików). Polega na zapisaniu tych elementów na dysku w kolejności sekwencyjnej.
Załóżmy, że algorytm buforowania ustala, że najszybciej byłoby zapisać te elementy na dysku w kolejności 4-3-1-2 i zaczyna to robić, ale zasilanie zostaje wyłączone po zapisaniu 4, przed 3, 1 i 2, i więc te zapisy nigdy się nie pojawiają. Gdy komputer zostanie ponownie włączony, system plików pokaże, że zawiera plik o nazwie XYZ, który znajduje się w sektorze 123, ale ten sektor tak naprawdę nie zawiera pliku. (Zamiast tego sektor będzie zawierał śmieci, zera lub losową część jakiegoś starego pliku - i to będzie widoczne, jeśli plik zostanie otwarty).
Co więcej, mapa wolnego miejsca w systemie plików nie będzie zawierała żadnego wpisu wskazującego, że sektor 123 jest zajęty, więc później prawdopodobnie przypisze ten sektor do następnego pliku do zapisania, wierząc, że jest dostępny. System plików będzie miał wtedy dwa pliki, oba nieoczekiwanie zajmujące ten sam sektor (tzw. plik z łączami krzyżowymi ). W rezultacie zapis do jednego z plików spowoduje nadpisanie części drugiego pliku, niewidocznie go uszkadzając.
Podsystem pamięci podręcznej dysku, który zapewnia spójność punktu w czasie, gwarantuje, że w przypadku nieoczekiwanego zamknięcia cztery elementy zostaną zapisane na jeden z pięciu możliwych sposobów: całkowicie (1-2-3-4), częściowo (1, 1-2, 1-2-3), albo wcale.
Wysokiej klasy kontrolery dysków sprzętowych typu spotykanego w serwerach zawierają małą jednostkę rezerwową baterii w pamięci podręcznej, dzięki czemu mogą oferować wzrost wydajności buforowania zapisu, jednocześnie zmniejszając ryzyko niezamierzonych wyłączeń. Bateria podtrzymująca zapewnia zasilanie pamięci nawet podczas wyłączania, dzięki czemu po ponownym włączeniu komputera można szybko dokończyć wcześniej wykonane operacje zapisu. W przypadku takiego kontrolera system operacyjny może zażądać czterech zapisów (1-2-3-4) w tej kolejności, ale kontroler może zdecydować, że najszybszym sposobem ich zapisania jest 4-3-1-2. Kontroler zasadniczo oszukuje system operacyjny i informuje, że zapisy zostały zakończone w odpowiedniej kolejności (kłamstwo, które poprawia wydajność kosztem uszkodzenia danych w przypadku utraty zasilania), a zapasowa bateria zabezpiecza przed ryzykiem uszkodzenia danych, dając kontrolerowi sposób cichej naprawy wszelkich szkód, które mogą wystąpić w wyniku.
Jeśli zasilanie zostanie odłączone po zapisaniu elementu 4, pamięć podtrzymywana bateryjnie zawiera zapis zobowiązania dla pozostałych trzech elementów i zapewnia, że zostaną one zapisane („opróżnione”) na dysku przy najbliższej nadarzającej się okazji.
Spójność transakcji
Spójność (systemy baz danych) w dziedzinie rozproszonych systemów baz danych odnosi się do właściwości wielu baz danych ACID , które zapewniają, że wyniki transakcji bazy danych są widoczne dla wszystkich węzłów jednocześnie. Oznacza to, że po zatwierdzeniu transakcji wszystkie strony próbujące uzyskać dostęp do bazy danych mogą jednocześnie zobaczyć wyniki tej transakcji.
Dobrym przykładem znaczenia spójności transakcji jest baza danych obsługująca przelewy pieniężne. Załóżmy, że przelew pieniężny wymaga dwóch operacji: wystawienia debetu w jednym miejscu i uznania w innym. Jeśli system ulega awarii lub wyłącza się, gdy jedna operacja została zakończona, a druga nie, i nie ma nic, co mogłoby temu zaradzić, można powiedzieć, że w systemie brakuje spójności transakcji. W przypadku przelewu pieniężnego pożądane jest, aby albo cała transakcja została zakończona, albo żadna z nich nie została zakończona. Oba te scenariusze utrzymują równowagę w ryzach.
Spójność transakcji zapewnia właśnie to - że system jest zaprogramowany tak, aby mógł wykryć niekompletne transakcje po włączeniu i cofnąć (lub "cofnąć") część wszelkich znalezionych niekompletnych transakcji.
Spójność aplikacji
Spójność aplikacji, podobnie jak spójność transakcji, jest stosowana na większą skalę. Zamiast mieć zakres pojedynczej transakcji, dane muszą być spójne w ramach wielu różnych strumieni transakcji z jednej lub wielu aplikacji. Aplikacja może składać się z wielu różnych typów danych, różnych typów plików i źródeł danych z innych aplikacji. Spójność aplikacji to stan, w którym wszystkie powiązane pliki i bazy danych są zsynchronizowane, reprezentujący prawdziwy stan aplikacji.