Co to jest kontrola współbieżności?
W programowaniu zarządzania danymi kontrola współbieżności jest mechanizmem zaprojektowanym w celu zapewnienia, że dokładne operacje są generowane przez równoczesne operacje. Wyniki te należy również uzyskać w odpowiednim czasie. Kontrola współbieżności jest bardzo często obserwowana w bazach danych, w których dostępna jest pamięć podręczna z możliwością wyszukiwania informacji.
Programiści próbują zaprojektować bazę danych w taki sposób, aby wpływ ważnych transakcji na udostępniane dane był seryjnie równoważny. Oznacza to, że dane, które kontaktują się z zestawami transakcji, byłyby w pewnym stanie, w którym wyniki byłyby możliwe do uzyskania, gdyby wszystkie transakcje były wykonywane szeregowo i w określonej kolejności. Czasami dane te są nieważne w wyniku jednoczesnej modyfikacji dwóch transakcji.
Istnieje wiele sposobów zapewnienia, że transakcje są wykonywane jeden po drugim, w tym stosowanie wzajemnego wykluczania, a także tworzenie zasobu, który decyduje o tym, które transakcje mają dostęp. Jest to jednak przesada i nie pozwoli programiście korzystać z kontroli współbieżności w systemie rozproszonym. Kontrola współbieżności pozwala na jednoczesne wykonywanie wielu transakcji, jednocześnie utrzymując te transakcje z dala od siebie, zapewniając linearyzowalność. Jednym ze sposobów wdrożenia kontroli współbieżności jest użycie wyłącznej blokady określonego zasobu do wykonywania transakcji szeregowych, które współużytkują zasoby. Transakcje zablokują obiekt przeznaczony do użycia, a jeśli jakaś inna transakcja zażąda zablokowanego obiektu, transakcja musi poczekać na odblokowanie obiektu.
Implementacja tej metody w systemach rozproszonych obejmuje menedżerów blokad - serwery, które wydają blokady zasobów. Jest to bardzo podobne do serwerów scentralizowanych wzajemnych wykluczeń, w których klienci mogą żądać blokad i wysyłać wiadomości o zwolnieniu blokad w określonym zasobie. Zachowanie wykonania seryjnego jest jednak nadal konieczne do kontroli współbieżności. Jeśli dwie osobne transakcje uzyskują dostęp do podobnego zestawu obiektów, wyniki muszą być podobne i tak, jakby transakcje te były wykonywane w określonej kolejności. Aby zapewnić porządek w dostępie do zasobu, wprowadzono blokowanie dwufazowe, co oznacza, że transakcje nie są dozwolone nowe blokady po zwolnieniu oddzielnej blokady.
W blokowaniu dwufazowym do kontroli współbieżności jego fazę początkową uznaje się za fazę rosnącą, w której transakcja uzyskuje potrzebną blokadę. Kolejną fazę uważa się za fazę kurczącą się, w której transakcja zostaje zwolniona. Występują problemy z tego typu blokowaniem. W przypadku przerwania transakcji inne transakcje mogą wykorzystywać dane z obiektów zmodyfikowanych i odblokowanych przez przerwane transakcje. Spowodowałoby to przerwanie innych transakcji.