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 wyniki są generowane przez współbieżne operacje. Te wyniki również muszą zostać osiągnięte w odpowiednim czasie. Kontrola współbieżności jest bardzo często spotykana w bazach danych, w których istnieje pamięć podręczna informacji, które użytkownicy mogą przeszukiwać.

Programiści starają się zaprojektować bazę danych w taki sposób, aby wpływ ważnych transakcji na współdzielone dane był szeregowo równoważny. Oznacza to, że dane, które stykają się z zestawami transakcji, byłyby w pewnym stanie, w którym wyniki są możliwe do uzyskania, jeśli wszystkie transakcje są wykonywane seryjnie iw określonej kolejności. Czasami dane te są nieważne, ponieważ są modyfikowane przez dwie transakcje jednocześnie.

Istnieje wiele sposobów zapewnienia, że ​​transakcje są wykonywane jedna po drugiej, w tym wykorzystanie wzajemnego wykluczania, a także tworzenie zasobu decydującego o tym, które transakcje mają dostęp. Jest to jednak przesada i nie pozwoli programiście na czerpanie korzyści z kontroli współbieżności w systemie rozproszonym. Kontrola współbieżności umożliwia jednoczesne wykonywanie wielu transakcji przy jednoczesnym trzymaniu tych transakcji z dala od siebie, zapewniając linearyzację. Jednym ze sposobów implementacji kontroli współbieżności jest użycie blokady na wyłączność określonego zasobu w celu wykonania transakcji seryjnych, które współużytkują zasoby. Transakcje zablokują obiekt, który ma być użyty, a jeśli jakaś inna transakcja wysyła żądanie do obiektu, który jest zablokowany, transakcja ta musi czekać na odblokowanie obiektu.

Implementacja tej metody w systemach rozproszonych obejmuje menedżerów blokad — serwerów, które wydają blokady zasobów. Jest to bardzo podobne do serwerów dla scentralizowanych wzajemnych wykluczeń, gdzie klienci mogą żądać blokad i wysyłać wiadomości w celu zwolnienia blokad dla określonego zasobu. Zachowanie wykonywania seryjnego jest jednak nadal konieczne do kontroli współbieżności. Jeśli dwie oddzielne 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 dwufazowe blokowanie, co oznacza, że ​​transakcje nie mogą tworzyć nowych blokad po zwolnieniu oddzielnej blokady.

W blokowaniu dwufazowym w celu kontroli współbieżności, jego początkowa faza jest uważana za fazę wzrostu, w której transakcja uzyskuje potrzebną blokadę. Kolejna faza jest uważana za fazę kurczenia się, w której transakcja zostaje zwolniona z blokad. Z tego typu blokowaniem są problemy. Jeśli transakcje zostaną przerwane, inne transakcje mogą wykorzystywać dane z obiektów zmodyfikowanych i odblokowanych przez przerwane transakcje. Spowodowałoby to przerwanie innych transakcji.