Zkratka proNot Only SQLTakénon-relational database, NoSQL databasePokročilý
Definice
NoSQL je skupina databázových systémů, které neukládají data primárně jako relační tabulky s pevným schématem. Patří sem dokumentové, key-value, širokosloupcové a grafové databáze. NoSQL se používá hlavně tam, kde je důležitá pružná struktura dat, horizontální škálování, vysoký počet zápisů nebo nízká latence.
Proč NoSQL vzniklo mimo relační model
NoSQL databáze řeší situace, ve kterých je klasická tabulka s pevnými sloupci příliš těsná nebo provozně drahá. Typickým důvodem je rychle se měnící struktura dat, velký objem zápisů, globální distribuce nebo požadavek na velmi nízkou latenci. NoSQL neznamená zákaz SQL, ale odklon od jedné univerzální relační reprezentace.
Relační databáze staví na schématu, normalizaci, spojování tabulek a transakcích. NoSQL systémy často volí jiný kompromis: data uloží blíž tomu, jak je aplikace čte, a část práce přesunou do návrhu modelu. Výsledkem může být jednodušší horizontální škálování, ale také méně pohodlné dotazy napříč různými typy dat.
Hlavní rodiny NoSQL databází
Dokumentové databáze
Dokumentová databáze ukládá záznam jako samostatný dokument, často ve formátu podobném JSON. Produkt, uživatel nebo objednávka může mít v jednom dokumentu vnořené pole adres, položek nebo nastavení. MongoDB a Cloud Firestore patří mezi známé zástupce tohoto přístupu.
Key-value databáze
Key-value databáze pracuje s jednoduchou dvojicí klíč a hodnota. Redis se často používá pro cache, fronty, počítadla nebo rychlé ukládání dočasného stavu. Síla modelu je v rychlosti a jednoduchosti, slabina v omezených možnostech ad hoc dotazování.
Širokosloupcové a grafové modely
Širokosloupcové databáze organizují data podle rodin sloupců a hodí se pro rozsáhlé zápisy v distribuovaných systémech. Grafové databáze naopak zdůrazňují vztahy mezi uzly, například propojení uživatelů, doporučovací vazby nebo síťové topologie.
Kompromis mezi schématem, dotazy a konzistencí
NoSQL model vyžaduje návrh podle přístupových vzorů. Vývojář se ptá, jaká obrazovka nebo API endpoint data čte, kolik položek se bude zapisovat a které dotazy musí být rychlé. Univerzální normalizovaný model se často nahrazuje denormalizací, duplicitou a předpočítanými strukturami.
Konzistence není u NoSQL jedna vlastnost platná pro všechny produkty. Některé systémy podporují transakce a silnou konzistenci v omezeném rozsahu, jiné dávají přednost dostupnosti a rychlé replikaci. Rozhodnutí proto patří do architektury, ne až do fáze ladění výkonu.
Dva příklady z praxe
Produktový katalog s proměnlivými parametry
E-shop prodává notebooky, boty a kosmetiku, takže každá kategorie potřebuje jiné vlastnosti. Dokumentová databáze umožní uložit produkt s parametry, které dávají smysl pro konkrétní položku, bez přidávání desítek prázdných sloupců. Aplikace potom čte celý detail produktu jedním dotazem.
{
"name": "Notebook 14",
"category": "laptops",
"attributes": {
"ramGb": 16,
"ssdGb": 512,
"weightKg": 1.3
}
}Rychlé počítadlo zobrazení článku
Redakční web potřebuje zvýšit počet zobrazení při každém načtení článku. Key-value databáze zvládne atomicky přičíst hodnotu bez složitého SQL dotazu a bez zamykání celé tabulky statistik. Relační databáze může zůstat zdrojem pravdy pro článek, zatímco Redis obslouží horkou metriku.
INCR article:42:views
GET article:42:viewsKdy NoSQL není zkratka k jednodušší databázi
NoSQL může zjednodušit provoz konkrétního typu zátěže, ale nezbavuje tým datového modelování. Špatně zvolený klíč, chybějící index nebo nepromyšlená denormalizace vedou k drahým migracím. Relační databáze zůstává lepší volbou pro mnoho systémů s komplexními vazbami, silnými transakcemi a častými analytickými dotazy.
Příklady z praxe
Produktový katalog s proměnlivými parametry
E-shop prodává notebooky, boty a kosmetiku, takže každá kategorie potřebuje jiné vlastnosti. Dokumentová databáze umožní uložit produkt s parametry, které dávají smysl pro konkrétní položku, bez přidávání desítek prázdných sloupců. Aplikace potom čte celý detail produktu jedním dotazem.
{ "name": "Notebook 14", "category": "laptops", "attributes": { "ramGb": 16, "ssdGb": 512, "weightKg": 1.3 } }Rychlé počítadlo zobrazení článku
Redakční web potřebuje zvýšit počet zobrazení při každém načtení článku. Key-value databáze zvládne atomicky přičíst hodnotu bez složitého SQL dotazu a bez zamykání celé tabulky statistik. Relační databáze může zůstat zdrojem pravdy pro článek, zatímco Redis obslouží horkou metriku.
INCR article:42:views GET article:42:views
Časté omyly
- MýtusNoSQL je vždy rychlejší než SQL databáze.
- Ve skutečnostiNoSQL může být rychlejší pro konkrétní přístupový vzor, například čtení dokumentu podle klíče. Relační databáze může být naopak lepší pro složité dotazy, spojování tabulek a transakční konzistenci.
- MýtusNoSQL znamená, že se SQL vůbec nepoužívá.
- Ve skutečnostiNoSQL označuje širší nerelační přístup, ne zákaz dotazovacího jazyka SQL. Některé NoSQL systémy mají SQL-like dotazy nebo konektory, zatímco hlavní rozdíl leží v datovém modelu a škálovacích vlastnostech.
Časté dotazy
- Kdy zvolit NoSQL místo relační databáze?
- NoSQL dává smysl místo relační databáze hlavně tehdy, když aplikace pracuje s velmi proměnlivou strukturou dat, extrémním počtem jednoduchých čtení a zápisů nebo distribucí přes více regionů. NoSQL je také vhodné, když lze data modelovat podle konkrétních dotazů aplikace. Relační databáze bývá praktičtější pro složité vazby, transakční logiku, reporting a dotazy, které se často mění.
- Znamená NoSQL databáze, že data nemají žádné schéma?
- NoSQL databáze nemusí být automaticky bez schématu. Dokumentová databáze může přijímat různé tvary dokumentů, ale aplikace obvykle stejně vyžaduje pravidla, validaci a migrační strategii. Některé NoSQL produkty podporují validaci schématu nebo typované modely na úrovni klientské knihovny. Rozdíl je spíš v pružnosti a místě kontroly než v úplné absenci struktury.
- Umí NoSQL databáze transakce?
- NoSQL může podporovat transakce, ale rozsah a cena transakcí závisí na konkrétním systému a datovém modelu. Některé databáze nabízejí atomické operace nad jedním dokumentem nebo klíčem, jiné zvládnou i vícedokumentové transakce s omezeními. Návrh NoSQL aplikace proto často minimalizuje potřebu širokých transakcí a ukládá společně data, která se společně mění.
- Hodí se NoSQL pro mikroservisy?
- NoSQL může dobře posloužit mikroservisám, protože každá služba často vlastní svůj datový model a škáluje jiným způsobem. NoSQL ale není povinná volba pro mikroservisní architekturu. Služba s účetními záznamy může potřebovat relační databázi, zatímco služba relací uživatelů může používat key-value úložiště. Rozhodující je charakter dat, nikoli samotný styl architektury.
Zdroje
- MongoDB Documentation(otevře se v novém okně)
- Redis Docs(otevře se v novém okně)
- Firestore documentation(otevře se v novém okně)
- Azure Cosmos DB documentation(otevře se v novém okně)
- NoSQL(otevře se v novém okně)