BASE model vývoje databáze
Relační databáze jsou navrženy s důrazem na spolehlivost a konzistenci. Inženýři, kteří je vyvinuli, se zaměřili na transakční model, který zajišťuje splnění čtyř principů ACID model jsou vždy zachovány. Nástup nového modelu nestrukturované databáze však staví ACID na hlavu. Databázový model NoSQL se vyhýbá vysoce strukturovanému relačnímu modelu ve prospěch flexibilního přístupu k ukládání klíčů a hodnot. Tento nestrukturovaný přístup k datům vyžaduje alternativu k ACID modelu: BASE model.
Základní principy ACID modelu
Existují čtyři základní principy modelu ACID:
- The atomicita Transakcí zajišťuje, že každá databázová transakce je jedinou jednotkou, která při provádění přijímá přístup „vše nebo nic“. Pokud některý příkaz v transakci selže, celá transakce je vrácena zpět.
- Relační databáze také zajišťují konzistence každé transakce s obchodními pravidly databáze. Pokud by některý prvek atomické transakce narušil konzistenci databáze, celá transakce selže.
- Databázový stroj vynucuje izolace mezi více transakcemi probíhajícími ve stejnou dobu nebo téměř ve stejnou dobu. Každá transakce probíhá buď před nebo po každé další transakci a pohled na databázi to, co transakce vidí na svém začátku, je změněno pouze samotnou transakcí před jejím závěr. Žádná transakce by nikdy neměla vidět meziprodukt jiné transakce.
- Konečný princip ACID, trvanlivost, zajišťuje, že jakmile je transakce potvrzena do databáze, je trvale zachována pomocí záloh a transakčních protokolů. V případě selhání lze tyto mechanismy použít k obnovení potvrzených transakcí.
Základní principy BASE
NoSQL databázena druhou stranu zahrnují situace, kdy je ACID model přehnaný nebo by ve skutečnosti bránil provozu databáze. Namísto toho NoSQL spoléhá na měkčí model známý jako BASE model. Tento model vyhovuje flexibilitě, kterou nabízí NoSQL a podobné přístupy ke správě a správě nestrukturovaných dat. BASE se skládá ze tří principů:
- Základní dostupnost. Databázový přístup NoSQL se zaměřuje na dostupnost dat i v případě vícenásobných selhání. Dosahuje toho pomocí vysoce distribuovaného přístupu ke správě databází. Namísto udržování jednoho velkého úložiště dat a zaměření na odolnost tohoto úložiště proti chybám, databáze NoSQL šíří data napříč mnoha úložnými systémy s vysokým stupněm replikace. V nepravděpodobném případě, že selhání naruší přístup k segmentu dat, nemusí to nutně vést k úplnému výpadku databáze.
- Měkký stav. Databáze BASE téměř úplně opouštějí požadavky na konzistenci modelu ACID. Jedním ze základních konceptů BASE je, že konzistence dat je problémem vývojáře a neměla by být řešena v databázi.
- Případná konzistence. Jediným požadavkem, který mají databáze NoSQL ohledně konzistence, je požadavek, aby v určitém okamžiku v budoucnu data konvergovala do konzistentního stavu. Neexistují však žádné záruky ohledně toho, kdy k tomu dojde. To je úplný odklon od požadavku okamžité konzistence ACID, který transakci zakazuje od provedení až do dokončení předchozí transakce a konvergování databáze do konzistentního Stát.
V BASE může základní dostupnost znamenat, že nemáte pod kontrolou ani zdroje dat. V rámci svého úsilí můžete například odkazovat na veřejné datové sady.
Relativní případy použití
Model BASE není vhodný pro každou situaci, ale rozhodně je flexibilní alternativou k modelu ACID pro databáze, které nevyžadují striktní dodržování relačního modelu.
Optimální případy použití pro databáze využívající ACID závisí na vysoce strukturovaných datech s předvídatelnými vstupy a výstupy. Databáze lidských zdrojů, maloobchodní databáze a elektronické lékařské záznamy tak těží z robustní kontroly vnitřní konzistence, kterou ACID nabízí.
Řešení BASE jsou však lepší pro fuzzy předměty, jako je analýza sentimentu. Projekt se strukturou BASE by mohl například prohledat zdroj Twitteru a hledat slova, která na základě konkrétního hashtagu naznačují emoce. Zdroj Twitteru není dobře strukturovaný ani lokálně vytvořený, ale datový proud to nabízí informace, které jsou naprogramovány do dotazů, i když rozsah a povaha těchto dat nejsou čisté ohraničený.