Transakcja bazy danych - Database transaction

Transakcji bazy danych symbolizuje jednostkę pracy wykonywanej w ramach systemu zarządzania bazą danych (lub podobnego systemu) przeciwko bazy danych, i traktowane w sposób spójny i wiarygodny sposób niezależny od innych transakcji. Transakcja zazwyczaj reprezentuje każdą zmianę w bazie danych. Transakcje w środowisku bazy danych mają dwa główne cele:

  1. Zapewnienie niezawodnych jednostek pracy, które umożliwiają prawidłowe odzyskiwanie danych po awarii i zachowanie spójności bazy danych nawet w przypadku awarii systemu, gdy wykonywanie zostaje zatrzymane (całkowicie lub częściowo), a wiele operacji na bazie danych pozostaje nieukończonych z niejasnym statusem.
  2. Aby zapewnić izolację między programami uzyskującymi jednocześnie dostęp do bazy danych. Jeśli ta izolacja nie zostanie zapewniona, wyniki programów mogą być błędne.

W systemie zarządzania bazą danych transakcja to pojedyncza jednostka logiki lub pracy, czasami składająca się z wielu operacji. Wszelkie obliczenia logiczne wykonane w trybie spójnym w bazie danych nazywane są transakcją. Jednym z przykładów jest przelew z jednego konta bankowego na drugie: pełna transakcja wymaga odjęcia kwoty przelewu z jednego konta i dodania tej samej kwoty do drugiego.

Transakcja bazy danych z definicji musi być niepodzielna (musi być albo kompletna w całości lub nie wywierać żadnego wpływu), spójna (musi być zgodna z istniejącymi ograniczeniami w bazie danych), izolowana (nie może wpływać na inne transakcje) i trwała (musi zostać zapisany w pamięci trwałej). Praktycy baz danych często odwołują się do tych właściwości transakcji bazodanowych za pomocą akronimu ACID .

Cel, powód

Bazy danych i inne magazyny danych, dla których integralność danych jest najważniejsza, często obejmują możliwość obsługi transakcji w celu zachowania integralności danych. Pojedyncza transakcja składa się z jednej lub więcej niezależnych jednostek pracy, z których każda odczytuje i/lub zapisuje informacje w bazie danych lub innym magazynie danych. Kiedy tak się dzieje, często ważne jest, aby zapewnić, że całe takie przetwarzanie pozostawia bazę danych lub magazyn danych w spójnym stanie.

Przykłady z systemów księgowania podwójnego zapisu często ilustrują pojęcie transakcji. W rachunkowości podwójnego zapisu każde obciążenie wymaga zarejestrowania powiązanego kredytu. Jeśli ktoś wypisze czek na 100 USD na zakup artykułów spożywczych, transakcyjny system księgowy z podwójnym wpisem musi zarejestrować następujące dwa wpisy, aby objąć pojedynczą transakcję:

  1. Obciąż 100 USD na koncie wydatków na artykuły spożywcze
  2. Kredyt 100 USD na koncie czekowym

System transakcyjny sprawi, że oba wpisy zostaną zaliczone lub oba wpisy zakończą się niepowodzeniem. Traktując rejestrację wielu wpisów jako atomową transakcyjną jednostkę pracy, system zachowuje integralność zarejestrowanych danych. Innymi słowy, nikt nie kończy w sytuacji, w której rejestrowany jest debet, ale nie rejestrowany jest powiązany kredyt, lub odwrotnie.

Bazy danych transakcyjnych

Transakcyjna baza danych jest to DBMS , który zapewnia właściwości ACID Przez nawiasach zestawu operacji bazodanowych (begin-commit). Wszystkie operacje zapisu w ramach transakcji mają efekt „wszystko albo nic”, to znaczy albo transakcja się powiedzie i wszystkie zapisy zaczną obowiązywać, albo w przeciwnym razie baza danych zostanie doprowadzona do stanu, który nie zawiera żadnego z zapisów transakcji . Transakcje zapewniają również, że efekt równoczesnych transakcji spełnia określone gwarancje, znane jako poziom izolacji . Najwyższym poziomem izolacji jest serializability , który gwarantuje, że efekt współbieżnych transakcji jest równoważny ich seryjnemu (tzn. sekwencyjnemu) wykonywaniu.

Większość nowoczesnych systemów zarządzania relacyjnymi bazami danych należy do kategorii baz danych obsługujących transakcje. Magazyny danych NoSQL traktują priorytetowo skalowalność wraz z obsługą transakcji, aby zagwarantować spójność danych w przypadku równoczesnych aktualizacji i dostępu.

W systemie bazy danych transakcja może składać się z jednej lub więcej instrukcji manipulacji danymi i zapytań, z których każde czyta i/lub zapisuje informacje w bazie danych. Użytkownicy systemów bazodanowych uważają spójność i integralność danych za bardzo ważne. Prosta transakcja jest zwykle wysyłana do systemu bazy danych w języku takim jak SQL opakowany w transakcję, przy użyciu wzorca podobnego do następującego:

  1. Rozpocznij transakcję.
  2. Wykonaj zestaw manipulacji danymi i/lub zapytań.
  3. Jeśli nie wystąpi błąd, zatwierdź transakcję.
  4. Jeśli wystąpi błąd, wycofaj transakcję.

Operacja zatwierdzania transakcji utrwala w bazie danych wszystkie wyniki manipulacji danymi w zakresie transakcji. Operacja wycofania transakcji nie utrwala w bazie danych częściowych wyników manipulacji danymi w zakresie transakcji. W żadnym przypadku częściowa transakcja nie może zostać zatwierdzona w bazie danych, ponieważ spowoduje to pozostawienie bazy danych w niespójnym stanie.

Wewnętrznie bazy danych wielu użytkowników przechowują i przetwarzają transakcje, często przy użyciu identyfikatora transakcji lub XID.

Istnieje wiele różnych sposobów realizacji transakcji, innych niż prosty sposób opisany powyżej. Transakcje zagnieżdżone to na przykład transakcje, które zawierają w sobie zestawienia rozpoczynające nowe transakcje (tj. transakcje podrzędne). Transakcje wielopoziomowe to wariant transakcji zagnieżdżonych, w których pod-transakcje odbywają się na różnych poziomach warstwowej architektury systemu (np. jedna operacja na poziomie silnika bazy danych, jedna operacja na poziomie systemu operacyjnego). Innym rodzajem transakcji jest transakcja kompensacyjna .

W SQL

Transakcje są dostępne w większości implementacji baz danych SQL, ale z różnymi poziomami niezawodności. Na przykład MySQL zaczął obsługiwać transakcje od wczesnej wersji 3.23, ale silnik przechowywania InnoDB nie był domyślny przed wersją 5.5. Wcześniej dostępny silnik pamięci masowej MyISAM nie obsługuje transakcji.

Transakcja jest zwykle uruchamiana za pomocą polecenia BEGIN(chociaż standard SQL określa START TRANSACTION). Gdy system przetwarza COMMITwyciąg, transakcja kończy się pomyślnym zakończeniem. ROLLBACKOświadczenie może również zakończyć transakcję, odkręcając każdą pracę wykonywaną od BEGIN. Jeśli automatyczne zatwierdzanie zostało wyłączone na początku transakcji, automatyczne zatwierdzanie zostanie również ponownie włączone wraz z końcem transakcji.

Można ustawić poziom izolacji dla poszczególnych operacji transakcyjnych, jak również globalnie. Na najwyższym poziomie ( READ COMMITTED) wynik dowolnej operacji wykonanej po rozpoczęciu transakcji pozostanie niewidoczny dla innych użytkowników bazy danych do czasu zakończenia transakcji. Na najniższym poziomie ( READ UNCOMMITTED), który może być czasami używany do zapewnienia wysokiej współbieżności, takie zmiany będą widoczne od razu.

Obiektowe bazy danych

Relacyjne bazy danych tradycyjnie składają się z tabel z polami i rekordami o stałym rozmiarze. Obiektowe bazy danych zawierają obiekty typu blob o zmiennej wielkości , możliwe do serializacji lub zawierające typ MIME . Podstawowe podobieństwa między relacyjnymi i obiektowymi bazami danych to początek i zatwierdzenie lub wycofanie .

Po rozpoczęciu transakcji rekordy lub obiekty bazy danych są blokowane, albo tylko do odczytu, albo do odczytu i zapisu. Mogą wtedy wystąpić odczyty i zapisy. Gdy transakcja jest w pełni zdefiniowana, zmiany są zatwierdzane lub wycofywane niepodzielnie , tak że na końcu transakcji nie ma niespójności .

Transakcje rozproszone

Systemy bazodanowe implementują transakcje rozproszone jako transakcje uzyskujące dostęp do danych w wielu węzłach. Transakcja rozproszona wymusza właściwości ACID na wielu węzłach i może obejmować systemy, takie jak bazy danych, menedżery pamięci masowej, systemy plików, systemy przesyłania wiadomości i inne menedżery danych. W transakcji rozproszonej zazwyczaj istnieje podmiot koordynujący cały proces w celu zapewnienia, że ​​wszystkie części transakcji są stosowane we wszystkich odpowiednich systemach.

Transakcyjne systemy plików

System plików Namesys Reiser4 dla Linuksa obsługuje transakcje, a od Microsoft Windows Vista system plików Microsoft NTFS obsługuje transakcje rozproszone w sieciach. Trwają badania nad bardziej spójnymi dla danych systemami plików, takimi jak Warp Transactional Filesystem (WTF).

Zobacz też

Bibliografia

Dalsza lektura

Linki zewnętrzne