Slovník pojmů
Databáze
Databáze drží dlouhodobá business data. Cache a vyhledávací index mohou čtení zrychlit, ale obvykle nejsou zdrojem pravdy pro objednávky nebo platby.
Stručná definice
Organizované ukládání dat s pravidly pro jejich změnu.
Databáze ukládá fakta aplikace tak, aby je více požadavků, uživatelů nebo služeb mohlo bezpečně číst a měnit. DBMS řeší fyzické uložení, dotazování, souběh, integritu a podle konfigurace také zálohování a obnovu. Aplikace nad ním vytváří business pravidla, ale důležité datové invarianty má často chránit i samotná databáze.
Databáze není nutně relační. Pro objednávky a platby je běžný relační zdroj pravdy, pro krátkodobé výsledky cache a pro fulltext samostatný vyhledávací index. Více úložišť má smysl jen při jasné roli, vlastníkovi dat a způsobu aktualizace odvozených kopií.
Jaký problém řeší
Data, která musejí přetrvat, sdílet se a kontrolovat
Databáze dává aplikaci trvalé místo pro údaje a pravidla, která se nesmějí rozpadnout při paralelní práci.
- produkty, varianty, ceny a skladové pohyby
- zákazníci, objednávky, položky, platby a vratky
- uživatelé, organizace, role a interní dokumenty
- idempotentní importy s unikátními externími identifikátory
- auditní údaje a stav integračních procesů
Praktický model
Rozdělení rolí jednotlivých úložišť
PostgreSQL drží objednávku a platbu jako konzistentní data. Redis může krátce uložit již sestavený produktový detail. Elasticsearch drží odvozený dokument pro fulltext nad katalogem. Žádná z odvozených kopií nesmí sama rozhodovat o tom, zda byla objednávka zaplacena.
Tento model umožní každé technologii dělat práci, pro kterou byla vybrána, a současně zachovat dohledatelný základ dat.
Jak funguje
Od business dat po odvozené kopie
E-shop může mít několik úložišť, ale každé musí mít jasnou roli.
- Určení faktů Aplikace rozliší produkty, zákazníky, objednávky, platby a sklad jako samostatné business údaje.
- Primární úložiště Relační databáze uloží vztahy a pravidla, například jedinečnost externí objednávky nebo vazbu položky na objednávku.
- Čtení a změna Aplikace pracuje s daty přes SQL, ORM nebo databázovou vrstvu a kritické lokální změny vymezí transakcí.
- Odvozené hodnoty Redis může držet cache produktového detailu a Elasticsearch dokument pro fulltextové vyhledávání.
- Obnova a dohled Zálohy, test obnovy a monitoring patří k provozu; samotná záloha není vysoká dostupnost.
Důležité pojmy
Úložiště, systém a zdroj pravdy nejsou stejná věc.
Dobrá architektura pojmenuje, co je hlavní záznam a co pouze jeho kopie.
DBMS a databázový server
DBMS je software pro správu dat, například PostgreSQL. Server je běžné označení pro běžící instanci; databáze jsou data a objekty, se kterými pracuje.
Data a metadata
Řádky objednávek jsou data. Názvy tabulek, typy sloupců, klíče a constrainty jsou metadata, která určují jejich povolený tvar.
Relační, dokumentové a key-value úložiště
Relační model pracuje s tabulkami a vztahy. Dokumentové nebo key-value úložiště volí jiný model; nejsou automaticky lepší ani horší.
Zdroj pravdy
Primární data se mění podle pravidel aplikace. Cache a vyhledávací index mohou být zastaralé a potřebují invalidaci či synchronizaci.
Záloha a obnova
Záloha je kopie pro obnovu po chybě nebo ztrátě dat. Musí se ověřovat i postup obnovy, ne jen existence souboru.
Vztah k podobným pojmům
Databáze je širší pojem než jedna tabulka nebo produkt.
Jednotlivé technologie řeší rozdílné vrstvy práce s daty.
- Relační databáze
- Konkrétní model založený na tabulkách, klíčích, vztazích a SQL.
- PostgreSQL
- Konkrétní relační databázový systém s vlastním SQL dialektem a rozšířeními.
- Redis a cache
- Rychlé dočasné úložiště, které nemá bez dalšího nahrazovat trvalý datový model.
- Elasticsearch
- Samostatný vyhledávací index nad dokumenty, vhodný pro jiný typ dotazů než relační zdroj pravdy.
Výhody a omezení
Uložení dat samo o sobě nestačí.
Přínosy
- trvalé uložení a vyhledávání strukturovaných dat
- řízení souběžného přístupu a transakčních změn
- možnost vynucovat integritu blízko uloženým datům
- zálohování a kontrolovaná obnova provozních dat
Časté chyby
- zaměnění databáze, tabulky a databázového serveru
- považování cache nebo vyhledávacího indexu za jediný zdroj pravdy
- předpoklad, že záloha automaticky znamená vysokou dostupnost
- přidávání dalších úložišť bez vlastnictví, synchronizace a monitoringu
- spoléhání na databázi místo promyšleného datového modelu
Praktický příklad
E-shop: primární data, cache a vyhledávání
Produkty, zákazníci, objednávky, platby a skladové pohyby mohou být v PostgreSQL. Při změně ceny se nejprve bezpečně změní primární záznam; potom se zneplatní cache a aktualizuje vyhledávací index. Výpadek cache proto nesmí změnit obchodní pravdu, jen dočasně prodloužit její načtení.
Neznamená to, že každá malá aplikace potřebuje tři úložiště. Dokud relační databáze a vhodné indexy řeší reálné potřeby, další systém by jen zvýšil provozní cenu.
Na co myslet
U každých dat určete jejich vlastníka a pravidla změny.
Rozdělení odpovědnosti je důležitější než počet použitých databází.
- pojmenovat zdroj pravdy pro každý důležitý business údaj
- chránit vztahy a jedinečnost databázovými pravidly i aplikační validací
- testovat obnovu záloh a rozumět limitům retenční politiky
- před přidáním cache nebo indexu změřit skutečný problém
- navrhnout synchronizaci odvozených dat jako samostatný provozní proces
Časté otázky
Databáze v běžné aplikaci
Je databáze totéž co databázový server?
Ne. Databáze jsou data a databázové objekty; databázový server nebo DBMS je software, který je spravuje.
Proč cache nenahrazuje databázi?
Cache může vypršet, být smazána nebo obsahovat starší hodnotu. Primární data proto musí mít vlastní trvalý a konzistentní zdroj.
Je záloha totéž co vysoká dostupnost?
Ne. Záloha pomáhá obnovit data po chybě. Vysoká dostupnost řeší pokračování služby při výpadku pomocí dalších mechanismů.
Potřebuje každá aplikace více databází?
Ne. Další úložiště se vyplatí až při konkrétní potřebě, například fulltextu nebo sdílené cache, a s jasnou odpovědností za data.
Jak tento princip používám v praxi
Datový model stavím kolem jasného zdroje pravdy.
V e-commerce a integračních aplikacích řeším návrh dat, transakce, importy i odvozené cache tak, aby byly důležité stavy dohledatelné.