Proč rozlišovat relační a nerelační databáze
Databázové systémy tvoří základ většiny informačních aplikací. Relační databáze (RDBMS) stavějí na tabulkách, relacích a deklarativním dotazování pomocí SQL, zatímco nerelační databáze (NoSQL) nabízejí alternativní datové modely – klíč–hodnota, dokumentový, sloupcově orientovaný či grafový – s důrazem na horizontální škálování, flexibilní schéma a specifické přístupové vzory. Správná volba ovlivňuje konzistenci dat, výkon, náklady i rychlost vývoje.
Relační model: tabulky, relace a integritní omezení
- Relační schéma – data jsou organizována do tabulek (relací) s pevně definovanými sloupci a datovými typy.
- Klíče – primární klíč (jedinečná identifikace řádku) a cizí klíč (odkaz na jinou tabulku) vynucují referenční integritu.
- Integritní omezení – NOT NULL, UNIQUE, CHECK a TRIGGERY zajišťují konzistenci na úrovni databáze.
- SQL – standardizovaný deklarativní jazyk (DDL/DML/DCL/TCL) pro definici, manipulaci s daty a řízení přístupu i transakcí.
Normalizace a návrh schématu
Cílem normalizace je odstranění redundance a anomálií při vkládání, aktualizaci a mazání. Běžně používané formy:
- 1NF – atomické hodnoty ve sloupcích, žádné opakující se skupiny.
- 2NF – žádná parciální závislost na části složeného klíče.
- 3NF – žádné tranzitivní závislosti neklíčových atributů.
- BCNF – posílená 3NF, každý determinant je kandidátským klíčem.
V praxi se normalizace často kombinuje s denormalizací pro zvýšení výkonu (méně operací JOIN) za cenu řízené redundance.
Transakce, ACID a izolace
- ACID – atomicita, konzistence, izolace a trvalost (Durability) definují spolehlivé provádění transakcí.
- Úrovně izolace – READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ, SERIALIZABLE; jejich volba ovlivňuje jevy jako dirty read, non-repeatable read či phantom read.
- MVCC – vícenásobné verzování řádků (snapshoty) umožňuje vysokou souběžnost s minimálním počtem zámků.
Fyzická organizace, indexy a optimalizace dotazů (RDBMS)
- Úložiště – stránky/bloky, heap/clustered organizace tabulek, write-ahead log (WAL) pro obnovu po havárii.
- Indexy – B-stromy (rozsahové dotazy), hashovací indexy (rovnostní dotazy), bitmapové indexy (nízká kardinalita), covering indexy, indexy pro dělení na oddíly.
- Optimalizátor – volí plán vykonávání (hash join, vnořené smyčky, merge join) a používá statistiky selektivity a nákladový model.
- Materializované pohledy – předpočítané agregace/denormalizace pro OLAP; správa obnovy (on commit/on demand).
Nerelační modely: přehled a principy
- Klíč–hodnota – mimořádně jednoduchý model pro přímý přístup podle klíče; velmi rychlé operace PUT/GET, často s daty uloženými v paměti.
- Dokumentové – ukládání polostrukturovaných dokumentů (např. JSON) s možností dotazů nad vnořenými strukturami a sekundárními indexy.
- Sloupcově orientované (wide-column) – data organizovaná do sloupců či rodin sloupců; efektivní pro rozsáhlé škálování a časové řady.
- Grafové – uzly a hrany s vlastnostmi pro domény s bohatými vztahy (cesty, centralita, vzory podgrafů).
- Časové řady – optimalizace pro sekvenční vkládání, kompresi a zmenšování rozlišení metrik.
BASE a modely konzistence v NoSQL
- BASE – Basically Available, Soft-state, Eventually consistent; upřednostňuje dostupnost a škálovatelnost.
- Konzistence – silná, eventual, read-your-writes, monotonic reads, causal; lze ji nastavit pro jednotlivé operace či klienty.
- Replikace – synchronní vs. asynchronní; leader–followers, bez vůdce (kvóra R/W), anti-entropy a řešení konfliktů.
CAP a PACELC: limity distribuovaných databází
CAP naznačuje, že při síťové partici nelze současně garantovat plnou konzistenci a dostupnost. Model PACELC rozšiřuje úvahu i na situace bez poruch: Partition → volba mezi C/A; Else (bez poruchy) volba mezi Latency a Consistency. V praxi jde o nastavení kompromisu podle konkrétního případu použití.
Škálování: vertikální vs. horizontální, dělení na oddíly a replikace
- Vertikální škálování – více CPU/RAM/IO; jednoduché, ale s omezeními a vyššími náklady na hardware.
- Horizontální škálování – přidávání uzlů; vyžaduje dělení na oddíly (sharding: hash, rozsah, seznam) a strategii převyvažování.
- Replikace – vysoká dostupnost a škálovatelnost čtení; důraz na členství v clusteru, převzetí služeb při selhání, split brain a kvórum.
Dotazování a transakce v NoSQL
- Model „query-shapes“ – schéma se často navrhuje podle typických dotazů (přístupových vzorů), nikoli výhradně podle entit.
- Indexace – sekundární indexy, řídké indexy, složené klíče; dopad na zápis a údržbu.
- Transakce – některé systémy nabízejí transakce multi-document, jiné pouze atomicitu v rámci single-partition.
OLTP vs. OLAP a HTAP
- OLTP (operativa) – mnoho krátkých transakcí, nízká latence, vysoká souběžnost, normalizovaná schémata.
- OLAP (analytika) – rozsáhlé skenování a agregace, sloupcové formáty, komprese, modely star/snowflake.
- HTAP – hybridní zpracování transakcí i analytiky nad jedním úložištěm; vyžaduje řešení izolace a více replik s různou optimalizací.
Bezpečnost, audit a správa dat
- Řízení přístupu – RBAC/ABAC, zabezpečení na úrovni řádků a sloupců, maskování a šifrování (TDE, KMS).
- Audit a dohled – zaznamenávání přístupů, změn schématu a DML; korelace se systémem SIEM.
- Životní cyklus dat – doba uchovávání, archivace, time-to-live, právní požadavky a GDPR.
Zálohování, obnova a odolnost
- Zálohy – úplné, přírůstkové, založené na protokolech; testování obnovy a obnova k určitému okamžiku.
- Geografická replikace – scénáře obnovy po havárii s cíli RPO/RTO; topologie aktivní–aktivní vs. aktivní–pasivní.
- Migrace schématu – změny za provozu, postupné upgrady, kompatibilita verzí klientů.
Návrhové vzory v dokumentových databázích a databázích klíč–hodnota
- Agregát jako hranice konzistence – zapouzdření dat, která se mění společně.
- Předřazené spojení (denormalizace) – vložení relevantních poddokumentů pro čtení bez operace JOIN.
- Vytváření segmentů a prefixy klíčů – rovnoměrné rozložení shardů, minimalizace přetížených uzlů.
- Event sourcing/CQRS – oddělení zápisového a čtecího modelu, projekce pro dotazy.
Grafové databáze: procházení grafu a algoritmy
- Dotazy – vyhledávání podle vzorů (Cypher, Gremlin), vícekrokové procházení grafu s nízkou latencí.
- Algoritmy – nejkratší cesty, PageRank, komunity; vhodné pro doporučování, detekci podvodů a síťové analýzy.
Ladění výkonu: metriky a úzká hrdla
- Metriky – latence p50/p95/p99, propustnost, míra zásahů do cache, využití IO/CPU, čekání na zámky, délka front.
- Diagnostika – plán vysvětlení dotazu, profily dotazů, teplotní mapy indexů, soupeření o prostředky na přetížených oddílech.
- Optimalizace – vhodné indexy, dávkové zpracování, připravené příkazy, sdružování připojení, komprese a správné datové typy.
Ekonomika provozu: licencování a TCO
- Licence – komerční vs. open-source, podle jader/uzlů/funkcí; cloudové spravované služby s modelem platby podle skutečného využití.
- TCO – náklady na hardware/IO, provoz (zálohování, monitoring), škálování, repliky a přenosy dat.
Srovnání modelů – shrnutí
| Kritérium | Relační DB | Nerelační DB |
|---|---|---|
| Schéma | Pevné, silně typované | Flexibilní (často „schema-on-read“) |
| Dotazování | SQL, složité JOIN a agregace | Specifická API/jazyky, optimalizace pro vzory dotazů |
| Transakce | Silné ACID, víceřádkové/více tabulek | Různorodé – od single-key po multi-dokument |
| Škálování | Především vertikální, dělení na oddíly je možné | Především horizontální (sharding) a replikace |
| Případy použití | OLTP, účetnictví, ERP, reporting | Vysoká propustnost, katalogy, logy, grafy, cache |
| Konzistence | Silná ve výchozím nastavení | Nastavitelná (od silné po eventual) |
Rozhodovací rámec: jak vybrat vhodný přístup
- Definujte přístupové vzory (čtení vs. zápis, latence, objemy, potřeba JOIN/analytiky).
- Určete požadavky na konzistenci a transakce (ACID vs. eventual/causal).
- Zvažte škálování – růst objemu dat a provozu, geografickou distribuci, více datových center.
- Vyhodnoťte schéma – jeho stabilitu, četnost změn a přítomnost polostrukturovaných dat.
- Odhadněte TCO – provoz, správu, kompetence týmu, závislost na dodavateli.
Časté chyby a jak se jim vyhnout
- Přenášení on-prem modelů do distribuovaného prostředí – ignorování latencí a jevů souvisejících s dělením sítě.
- Nedostatečná indexace – neoptimalizované dotazy, úplné skenování, vysoké nároky na IO.
- Nekonzistentní denormalizace – nekontrolované duplikování dat bez procesů pro jejich obnovu.
- Přehnaný přístup „one-size-fits-all“ – volba jediné technologie pro všechny domény.
- Nedostatečná správa dat – chybějící standardy pro datové typy, názvosloví, přístupy a dobu uchovávání.
Závěr: komplementarita místo ideologie
Relační databáze vynikají v transakční integritě, standardizovaném dotazování a složitých agregacích. Nerelační přístupy přinášejí škálovatelnost, flexibilitu schématu a optimalizaci pro specifické vzory dotazů. Moderní architektury často kombinují oba světy: relační system of record s garancemi integrity a nerelační úložiště pro služby s vysokým podílem čtení, cache, logy, grafy či analytiku v reálném čase. Klíčem je přesná znalost domény, přístupových vzorů a nedogmatická práce s kompromisy CAP/PACELC.
