Az ACID (az angol atomitás, konzisztencia, izoláció, tartósság szóból ) egy olyan tranzakciós rendszer követelményrendszere, amely a legmegbízhatóbb és kiszámíthatóbb működését biztosítja - atomitás , konzisztencia , izoláció , stabilitás ; az 1970-es évek végén fogalmazta meg Jim Gray [1] .
A követelményrendszer a nagy megbízhatóságú rendszerek, elsősorban a relációs DBMS -ek de facto szabványának tekinthető , míg a 2000-es évek közepén az elosztott DBMS-ek felépítésénél az ACID-követelmények egy részét fel kell hagyni (ami a CAP használatával indokolt). tétel , a PACELC tétel ) vagy a követelmények súlyosságának csökkentése ( BASE ) .
Az Atomicity biztosítja, hogy egyetlen tranzakció se legyen részlegesen lekötve a rendszerben. Vagy az összes részművelet végrehajtásra kerül, vagy egyik sem. Mivel a gyakorlatban lehetetlen egy tranzakción belül egyidejűleg és atomosan végrehajtani a teljes műveletsort, ezért bevezetik a „visszagörgetés” ( rollback ) fogalmát: ha a tranzakciót nem lehet teljesen befejezni, akkor az összes eddig végrehajtott művelet eredménye törlésre kerül, és a rendszer visszatér a „külsőleg kezdeti” állapotba - kívülről úgy tűnik, hogy nem történt tranzakció (természetesen a számlálók, indexek és egyéb belső struktúrák változhatnak, de ha a DBMS hiba nélkül van programozva, ez nem befolyásolja külső viselkedését).
Az a tranzakció, amely eléri a tranzakció normál végét (EOT), és ezáltal véglegesíti az eredményeit, megőrzi az adatbázis konzisztenciáját. Más szóval, minden sikeres tranzakció értelemszerűen csak érvényes eredményeket köt. Ez a feltétel szükséges a negyedik ingatlan támogatásához.
A következetesség tágabb fogalom. Például a bankrendszerben előírás lehet, hogy az egyik számláról terhelt összeg egyenlő legyen a másik számlán jóváírt összeggel. Ez egy üzleti szabály, és nem garantálható önmagában az integritás ellenőrzésével, ezt a programozóknak be kell tartaniuk a tranzakciós kód írásakor. Ha bármely tranzakció megterhel, de nem jóváír, a rendszer hibás állapotban marad, és a konzisztencia tulajdonság megsérül.
Végül még egy megjegyzés arra vonatkozik, hogy a tranzakció végrehajtása során nincs szükség következetességre . Példánkban a terhelés és a jóváírás nagy valószínűséggel két különböző részművelet lesz, és a tranzakción belüli végrehajtásuk között a rendszer inkonzisztens állapota lesz látható. Nem szabad azonban megfeledkezni arról, hogy ha az elkülönítési követelmény (lásd alább) teljesül, akkor ez az inkonzisztencia más tranzakcióknál nem lesz látható. Az atomcity pedig garantálja, hogy a tranzakció vagy teljesen befejeződik, vagy a tranzakció egyetlen művelete sem kerül végrehajtásra. Így ez a köztes következetlenség el van rejtve.
Egy tranzakció végrehajtása során a párhuzamos tranzakciók nem befolyásolhatják annak eredményét. Az elkülönítés költséges követelmény, ezért a valós adatbázisokban vannak olyan módok, amelyek nem különítik el teljesen a tranzakciót ( a fantomolvasást lehetővé tevő elkülönítési szintek és alacsonyabbak).
Az alacsonyabb szintű problémáktól függetlenül (például a rendszer áramkimaradása vagy a hardver meghibásodása) a sikeresen végrehajtott tranzakciók által végrehajtott változtatásokat mentve kell maradni, miután a rendszer újra működik. Vagyis ha a felhasználó visszaigazolást kapott a rendszertől, hogy a tranzakció megtörtént, biztos lehet benne, hogy az általa végzett változtatások nem törlődnek valamilyen hiba miatt.
Adatbázis | |
---|---|
Fogalmak |
|
Objektumok |
|
Kulcsok | |
SQL |
|
Alkatrészek |