Jak działają transakcje ACID i bazy danych?

161

Jaka jest zależność między ACID a transakcją w bazie danych?

Czy ACID podaje transakcję w bazie danych, czy to to samo?

Mógłby ktoś oświecić ten temat.

Never_had_a_name
źródło

Odpowiedzi:

320

ACID to zestaw właściwości, które chcesz zastosować podczas modyfikowania bazy danych.

  • Atomowość
  • Konsystencja
  • Izolacja
  • Trwałość

Transakcja to zestaw powiązanych zmian, który jest używany do uzyskania niektórych właściwości ACID. Transakcje to narzędzia do osiągnięcia właściwości ACID.

Niepodzielność oznacza, że ​​możesz zagwarantować, że nastąpi cała transakcja lub żadna z nich się nie wydarzy; możesz wykonywać złożone operacje jako jedna jednostka, wszystko albo nic, a awaria, awaria zasilania, błąd lub cokolwiek innego nie pozwoli ci być w stanie, w którym nastąpiły tylko niektóre z powiązanych zmian.

Spójność oznacza, że ​​gwarantujesz, że Twoje dane będą spójne; żadne z Twoich ograniczeń dotyczących powiązanych danych nigdy nie zostanie naruszone.

Izolacja oznacza, że ​​jedna transakcja nie może odczytać danych z innej transakcji, która nie została jeszcze zakończona. Jeśli dwie transakcje są wykonywane jednocześnie, każda z nich będzie postrzegać świat tak, jakby wykonywała się po kolei, a jeśli trzeba będzie odczytać dane zapisane przez inną, będzie musiała poczekać, aż druga zostanie zakończona.

Trwałość oznacza, że ​​po zakończeniu transakcji gwarantuje się, że wszystkie zmiany zostały zapisane na trwałym nośniku (takim jak dysk twardy), a fakt zakończenia transakcji jest również odnotowany.

Zatem transakcje są mechanizmem gwarantującym te właściwości; są one sposobem grupowania powiązanych działań razem w taki sposób, że jako całość grupa operacji może być niepodzielna, dawać spójne wyniki, być odizolowana od innych operacji i trwale rejestrowana.

Brian Campbell
źródło
6
Mówisz: „Spójność oznacza, że ​​gwarantujesz, że Twoje dane będą spójne; żadne z ograniczeń, które masz w odniesieniu do powiązanych danych, nigdy nie zostanie naruszone”. Jeżeli przez ograniczenia rozumiesz te zdefiniowane w bazie danych (np. Ograniczenia sprawdzające), co ma wspólnego zarządzanie transakcjami z zapobieganiem ich naruszaniu? Czy nie zawsze obowiązują? Wydaje mi się, że C w ACID musi mieć inne znaczenie.
Marc Rochkind
20
@MarcRochkind Transakcja pozwala na zastosowanie kontroli spójności, nawet jeśli poszczególne operacje w ramach transakcji naruszałyby ograniczenia spójności. Na przykład, jeśli aktualizujesz system księgowości podwójnego zapisu, może być konieczne obciążenie kilku rachunków i uznanie ich na kilka kont jednocześnie. Bez transakcji sprawdzałbyś ograniczenia po każdej instrukcji i zakończyłoby się niepowodzeniem, ponieważ poszczególne instrukcje nie zachowują spójności. W przypadku transakcji, mimo że poszczególne wyciągi nie zachowują spójności, zachowuje się tak transakcja jako całość.
Brian Campbell
1
a jeśli ktoś potrzebuje odczytać dane, które są napisane przez innego, będzie musiał poczekać, aż skończy się ten drugi ” - nie jest do końca prawdą. Pierwsza transakcja może (i będzie) odczytać te dane i zobaczy stan taki, jaki był przed rozpoczęciem drugiej transakcji.
a_horse_with_no_name
1
@BrianCampbell 1) Spójność to zarówno „ograniczenia sprawdzające”, takie jak UNIKALNY, OBCY KLUCZ, jak również stan prawidłowy (zgodnie z logiką biznesową / wymaganiami aplikacji) na koniec transakcji? 2) Czy sama atomowość i / lub izolacja nie zapewniają spójności? Czy powinniśmy wyraźnie wspomnieć o spójności jako o wymaganej właściwości?
user104309
1
@a_horse_with_no_name mówisz o OCC (optymistyczna kontrola współbieżności) v / s PCC (pesymistyczna). Oba można zaimplementować w systemie bazy danych zgodnym z ACID, w zależności od tego, czy chcesz zachować spójność, czy wysoką dostępność.
Siddhartha
37

ACID są pożądanymi właściwościami dowolnego mechanizmu przetwarzania transakcji.

DBMS jest (jeśli jest dobry) szczególnym rodzajem silnika przetwarzania transakcji, który zwykle w bardzo dużym stopniu, ale nie do końca, udostępnia te właściwości.

Ale istnieją inne silniki, które również mogą ujawniać te właściwości. Przykładem jest rodzaj oprogramowania, które kiedyś nazywane było „monitorami TP” (obecnie odpowiednikiem są głównie serwery WWW).

Takie monitory TP mają dostęp do zasobów innych niż DBMS (np. Drukarka) i nadal zapewniają ACID swoim użytkownikom. Jako przykład tego, co ACID może oznaczać, gdy drukarka bierze udział w transakcji:

  • Atomowość: drukowany jest cały dokument lub nie ma go wcale
  • Spójność: po zakończeniu transakcji podajnik papieru jest umieszczany na górze strony
  • Izolacja: żadne dwa dokumenty nie mieszają się podczas drukowania
  • Trwałość: drukarka może zagwarantować, że nie „drukuje” z pustymi wkładami.
Erwin Smout
źródło
3
świetne, zwięzłe przykłady drukarek.
lakesare
2
Dobry przykład. Nie rozumiem jednak części „Spójność”. Moim zdaniem lepszym przykładem jest „Drukarka nie akceptuje papieru większego niż 10 cali”.
skeller88
EDYCJA - „papier szerszy niż 10 cali”.
skeller88
1
Przyznaję, że to trochę naciągane. Trudno jednak znaleźć lepsze przykłady, ponieważ „spójność” dotyczy danych, a drukarka nie jest dokładnie urządzeniem do przetwarzania danych.
Erwin Smout
1
W takim razie drukarka ma funkcję, która zapobiega rozpoczęciu drukowania, jeśli liczba stron dokumentu jest wyższa niż liczba arkuszy, o których obecnie wiadomo, że znajdują się w zasobniku papieru. Widzisz, na tym polega problem wielu komentujących tutaj ludzi. Wspominasz o „drukarce”, a oni widzą tylko to głupie urządzenie do transmisji szeregowej, które mają na biurku w domu, a nie wysokiej klasy profesjonalne urządzenie, które wypełniłoby cały ich salon (i które często ma takie funkcje, o których wspomniałem).
Erwin Smout
21

Lekko zmodyfikowałem przykład drukarki, aby był bardziej zrozumiały

Do drukarki został wysłany 1 dokument o zawartości 2 stron

Transakcja - dokument wysłany do drukarki

  • atomowość - drukarka drukuje 2 strony dokumentu lub nic
  • spójność - drukarka drukuje pół strony i strona blokuje się. Drukarka uruchomi się ponownie i wydrukuje 2 strony z całą zawartością
  • izolacja - podczas gdy było zbyt wiele wydruków w toku - drukarka drukuje właściwą treść dokumentu
  • trwałość - podczas drukowania nastąpiła przerwa w zasilaniu - drukarka ponownie drukuje dokumenty bez błędów

Mam nadzieję, że to pomoże komuś zrozumieć koncepcję KWASU

Manish Singh
źródło
Nie jestem pewien, co oznacza „podczas gdy w toku było zbyt wiele wydruków” - jest to po prostu „wiele”, a nie „zbyt wiele”?
icc97
17

Jaka jest zależność między ACID a transakcją w bazie danych?

W relacyjnej bazie danych każda instrukcja SQL musi być wykonywana w ramach transakcji.

Bez jawnego definiowania granic transakcji baza danych użyje niejawnej transakcji, która będzie otaczać każdą indywidualną instrukcję.

Niejawna transakcja rozpoczyna się przed wykonaniem instrukcji i kończy (zatwierdzenie lub wycofanie) po wykonaniu instrukcji. Niejawny tryb transakcji jest powszechnie znany jako automatyczne zatwierdzanie.

Jak wyjaśniono w tym artykule , transakcja jest zbiorem operacji odczytu / zapisu, które kończą się pomyślnie tylko wtedy, gdy wszystkie zawarte w niej operacje zakończą się pomyślnie.

Atomowość

Nieodłącznie transakcja charakteryzuje się czterema właściwościami (powszechnie określanymi jako ACID):

  • Atomowość
  • Konsystencja
  • Izolacja
  • Trwałość

Czy ACID podaje transakcję w bazie danych, czy to to samo?

W przypadku systemu relacyjnej bazy danych jest to prawdą, ponieważ standard SQL określa, że ​​transakcja powinna zapewniać gwarancje ACID:

Atomowość

Atomowość bierze poszczególne operacje i zamienia je w jednostkę pracy typu wszystko albo nic, która kończy się sukcesem wtedy i tylko wtedy, gdy wszystkie zawarte operacje zakończą się powodzeniem.

Transakcja może zawierać zmianę stanu (chyba że jest to transakcja tylko do odczytu). Transakcja musi zawsze pozostawać system w spójnym stanie, bez względu na to, ile współbieżnych transakcji jest przeplatanych w danym momencie.

Konsystencja

Spójność oznacza, że ​​ograniczenia są egzekwowane dla każdej zatwierdzonej transakcji. Oznacza to, że wszystkie klucze, typy danych, sprawdzenia i wyzwalacze są pomyślne i nie jest wyzwalane żadne naruszenie ograniczenia.

Izolacja

Transakcje wymagają mechanizmów kontroli współbieżności i gwarantują poprawność, nawet gdy są przeplatane. Izolacja przynosi nam korzyść w postaci ukrycia niezatwierdzonych zmian stanu przed światem zewnętrznym, ponieważ nieudane transakcje nie powinny nigdy uszkodzić stanu systemu. Izolację osiąga się poprzez kontrolę współbieżności przy użyciu pesymistycznych lub optymistycznych mechanizmów blokujących.

Trwałość

Pomyślna transakcja musi trwale zmienić stan systemu, a przed jej zakończeniem zmiany stanu są rejestrowane w utrwalonym dzienniku transakcji. Jeśli na nasz system nagle wpłynie awaria systemu lub awaria zasilania, wszystkie niedokończone zatwierdzone transakcje mogą zostać odtworzone.

wprowadź opis obrazu tutaj

Aby uzyskać więcej informacji na temat trwałości i dziennika powtórzeń, zapoznaj się z tym artykułem .

Vlad Mihalcea
źródło
Dla „spójności” - w wielu miejscach widzę „poprawność logiczną specyficzną dla aplikacji” jako wyjaśnienie. Załóżmy, że w takim przypadku DB nie może znać logiki aplikacji. Zatem „spójność” nie może być nieodłączną właściwością bazy danych. Czy więc aplikacja do zaimplementowania poprawności (lub „spójności”) nie wystarczy?
user104309
1
Spójność w ACID oznacza ograniczenia integralności bazy danych: PK, FK, ograniczenia UNIQUE. ACID jest ważny, ale Twoja aplikacja może potrzebować czegoś więcej, na przykład zapobiegania utracie aktualizacji podczas długich rozmów, które wymagają optymistycznego blokowania na poziomie aplikacji.
Vlad Mihalcea
Daj mi spojrzeć. Ale wcześniej potrzebuję podstawowego wyjaśnienia. Komentarz Brain Campbella w zaakceptowanej odpowiedzi: „W przypadku transakcji, chociaż poszczególne zestawienia nie zachowują spójności, tak jest z całą transakcją”. Jak to jest możliwe ? A jak wiele obciążeń i kredytów wiąże się ze spójnością?
user104309
Zapoznaj się z rozdziałem Transakcje w mojej książce High-Performance Java Persistence, aby uzyskać szczegółową odpowiedź na wszystkie te pytania.
Vlad Mihalcea
12

Właściwości ACID to bardzo stara i ważna koncepcja teorii baz danych. Wiem, że można znaleźć wiele postów na ten temat, ale mimo to chciałbym podzielić się odpowiedzią na ten temat, ponieważ jest to bardzo ważny temat RDBMS.

System bazy danych gra z wieloma różnymi typami transakcji, w których każda transakcja ma określoną charakterystykę. Ta cecha to znane właściwości ACID. ACID Properties ma grantee dla wszystkich transakcji bazy danych w celu wykonania wszystkich zadań.

Atomowość: albo popełnij wszystko albo nic.

Spójność: Stwórz spójny zapis pod względem walidacji wszystkich reguł i ograniczeń transakcji.

Izolacja: upewnij się, że dwie transakcje nie są sobie znane.

Trwałość: zaangażowane dane przechowywane na zawsze. Odniesienie zaczerpnięte z tego artykułu:

Anvesh
źródło
5

Cytując Wikipedię :

ACID (atomowość, spójność, izolacja, trwałość) to zestaw właściwości, które gwarantują niezawodne przetwarzanie transakcji w bazie danych.

DBMS obsługujący transakcje będzie starał się obsługiwać wszystkie te właściwości - każdy komercyjny DBMS (a także kilka systemów DBMS o otwartym kodzie źródłowym) zapewnia pełne wsparcie ACID - chociaż często jest to możliwe (na przykład przy różnych poziomach izolacji w MSSQL) zmniejszyć KWASOWOŚĆ - tym samym tracąc gwarancję w pełni transakcyjnego zachowania.

Will A
źródło
3

[Gray] wprowadził właściwości ACD do transakcji w 1981 r. W 1983 r. [Haerder] dodał właściwość Isolation. Moim zdaniem właściwości ACD miałyby bardziej przydatny zestaw właściwości do omówienia. Jedna interpretacja atomowości (że transakcja powinna być atomowa, jak widać z dowolnego klienta w dowolnym momencie) faktycznie implikowałaby właściwość izolacji. Właściwość „isolation” jest przydatna, gdy transakcja nie jest izolowana; kiedy właściwość izolacji jest złagodzona. W języku ANSI SQL mów: jeśli poziom izolacji jest słabszy, to SERIALIZABLE. Ale gdy poziom izolacji jest SERIALIZOWALNY, właściwość izolacji nie jest tak naprawdę interesująca.

Więcej na ten temat pisałem w poście na blogu: „ACID nie ma sensu”.

http://blog.franslundberg.com/2013/12/acid-does-not-make-sense.html

[Gray] The Transaction Concept, Jim Gray, 1981. http://research.microsoft.com/en-us/um/people/gray/papers/theTransactionConcept.pdf

[Haerder] Principles of Transaction Oriented Database Recovery, Haerder and Reuter, 1983. http://www.stanford.edu/class/cs340v/papers/recovery.pdf

Frans Lundberg
źródło
1

Transakcję można zdefiniować jako zbiór zadań, które są uważane za minimalną jednostkę przetwarzania. Żadnej minimalnej jednostki przetwarzania nie można dalej podzielić.

Cała transakcja musi zawierać cztery właściwości, które są powszechnie znane jako właściwości ACID. czyli ACID to grupa właściwości dowolnej transakcji.

  • Atomowość:
  • Konsystencja
  • Izolacja
  • Trwałość
zrazy
źródło