====== ACID ====== **ACID** je akronym pro čtyři základní vlastnosti: **A**tomicity (Atomicita), **C**onsistency (Konzistence), **I**solation (Izolace) a **D**urability (Trvanlivost). Pokud databázový systém splňuje tato pravidla, považujeme ho za "ACID-compliant", což znamená, že data zůstanou v pořádku i v případě chyb, výpadků proudu nebo náhlých pádů systému. ---- ====== Čtyři pilíře ACID ====== ===== A - Atomicity (Atomicita) ===== Vlastnost "všechno, nebo nic". Transakce se může skládat z mnoha kroků (např. odečíst peníze z účtu A a přičíst je na účet B). Pokud kterýkoliv krok selže, celá transakce se zruší (**rollback**) a databáze se vrátí do stavu před začátkem. Nikdy se nestane, že by se provedla jen polovina změn. ===== C - Consistency (Konzistence) ===== Zaručuje, že transakce převede databázi z jednoho platného stavu do druhého platného stavu. Databáze musí po dokončení transakce splňovat všechna definovaná pravidla (např. integritní omezení, cizí klíče, unikátní indexy). Pokud by transakce pravidla porušila, nebude provedena. ===== I - Isolation (Izolace) ===== Zajišťuje, že souběžně probíhající transakce se navzájem neovlivňují. Výsledek několika současně běžících transakcí musí být stejný, jako kdyby běžely jedna po druhé. To brání situacím, kdy by jedna transakce četla neúplná data, která právě mění jiná transakce. ===== D - Durability (Trvanlivost) ===== Jakmile je transakce jednou potvrzena (**commit**), její změny jsou trvale uloženy v paměti (na disku). Tato data nesmí být ztracena ani v případě následného výpadku napájení nebo pádu operačního systému. ---- ====== Příklad z praxe: Bankovní převod ====== Představte si převod 1000 Kč z účtu Petra na účet Jany: 1. Kontrola, zda má Petr na účtu dostatek peněz. 2. Odečtení 1000 Kč z účtu Petra. 3. Přičtení 1000 Kč na účet Jany. 4. Zápis do historie transakcí. **Bez ACID by mohl nastat problém:** Pokud by po kroku 2 vypadl proud, Petr by o peníze přišel, ale Jana by je nedostala. **S ACID** se buď provedou všechny kroky, nebo se v případě chyby vteřinu před koncem vše vrátí na začátek. ---- ====== ACID vs. BASE (NoSQL) ====== V distribuovaných systémech a NoSQL databázích se často ACID pravidla uvolňují ve prospěch výkonu a dostupnosti (viz [[cap_theorem|CAP teorém]]). Místo ACID se pak používá model **BASE**: * **BA** - Basically Available (Základní dostupnost). * **S** - Soft state (Proměnlivý stav). * **E** - Eventual consistency (Případná konzistence – data budou stejná až po nějaké době). ^ Vlastnost ^ ACID (SQL) ^ BASE (NoSQL) ^ | **Priorita** | Spolehlivost a přesnost. | Rychlost a škálovatelnost. | | **Kdy použít** | Finance, e-shopy, evidence. | Sociální sítě, analýza velkých dat (Big Data). | ---- //Související pojmy: RDBMS, SQL, CAP teorém, MySQL, CRUD, Transakce.//