SQL vs NoSQL: ktorú databázu by mala vaša aplikácia použiť?
SQL databázy (nazývané aj relačné databázy) ukladajú dáta v tabuľkách s definovanou štruktúrou — riadkoch a stĺpcoch — a prepájajú súvisiace tabuľky medzi sebou. Dotazujete ich jazykom SQL. Príkladom sú Postgres, MySQL a SQLite. NoSQL databázy ukladajú dáta inými spôsobmi — ako dokumenty, dvojice kľúč-hodnota, široké stĺpce alebo grafy — a zvyčajne umožňujú pružnejšiu štruktúru. Príkladom sú MongoDB, Redis, DynamoDB a Firestore. Pre väčšinu obchodných aplikácií je SQL databáza rozumná východisková voľba; NoSQL vyniká pri konkrétnych úlohách.
Prečo táto voľba záleží, keď stavate s AI
Databáza patrí medzi najťažšie časti aplikácie na neskoršiu zmenu. Obrazovky sa dajú prerobiť za popoludnie; presun rokov zákazníckych dát do iného typu databázy je projekt.
Keď AI tvorca aplikácií pridá úložisko dát za vás, vyberá si jednu z týchto možností. Vedieť rozdiel vám pomôže:
- Pochopiť, ako vyzerajú vaše dáta a či na ne dokážu odpovedať otázky, ktoré budete klásť neskôr („tržby podľa mesiacov podľa produktu“).
- Posúdiť voľbu platformy. Niektoré platformy stoja na dokumentovej databáze, iné na relačnej. Bežný príklad oboch nájdete v článku Supabase vs Firebase.
- Vyhnúť sa uviazaniu. SQL je spoločný štandard, takže relačné dáta sa zvyčajne ľahšie presúvajú medzi poskytovateľmi.
Každodenná analógia
SQL databáza je ako súbor starostlivo navrhnutých tabuliek s prísnymi stĺpcami: jeden hárok pre zákazníkov, jeden pre objednávky, a každý riadok objednávky ukazuje na riadok zákazníka pomocou ID. Každý riadok v hárku má rovnaké stĺpce. Chce to trochu plánovania, ale klásť otázky naprieč hárkami je ľahké a dáta zostávajú prehľadné.
NoSQL dokumentová databáza je ako kartotéka so zložkami. Zložka každého zákazníka môže obsahovať jeho údaje aj objednávky spolu a jedna zložka môže držať aj extra papiere, ktoré iné nemajú. Získať celý príbeh jedného zákazníka je rýchle. Odpovedať na otázku „čo si všetci objednali minulý mesiac?“ znamená otvárať veľa zložiek.
Skutočné rozdiely
| SQL (relačná) | NoSQL | |
|---|---|---|
| Tvar dát | Tabuľky s definovanými stĺpcami | Dokumenty, kľúč-hodnota, široké stĺpce alebo grafy |
| Štruktúra | Schéma definovaná vopred, mení sa migráciami | Často pružná; štruktúru vynucuje kód aplikácie, ak vôbec |
| Vzťahy | Zabudované: cudzie kľúče a spájanie | Zvyčajne riešené vnorením dát alebo kódom aplikácie |
| Dotazovací jazyk | SQL, spoločný štandard | Pri každom produkte iný |
| Konzistencia | Silné transakcie sú štandard | Závisí od produktu a nastavení; mnohé už transakcie ponúkajú |
| Škálovanie | Tradične sa škáluje nahor (väčší server); rozširovanie do šírky je možné, ale ťažšie | Mnohé sú navrhnuté na rozloženie na veľa serverov |
| Dobré na | Obchodné dáta, reporty, čokoľvek s mnohými vzťahmi | Veľmi veľké objemy jednoduchých záznamov, cache, pružný obsah |
| Príklady | Postgres, MySQL, SQLite, SQL Server | MongoDB, Redis, DynamoDB, Firestore, Cassandra, Neo4j |
„NoSQL“ nie je jedna vec. Hlavné druhy:
| Druh | Ako ukladá dáta | Typické použitie |
|---|---|---|
| Dokumentová (MongoDB, Firestore) | Dokumenty podobné JSON | Obsah, katalógy, aplikácie s rôznorodými záznamami |
| Kľúč-hodnota (Redis, DynamoDB) | Hodnota vyhľadaná podľa kľúča | Cache, relácie, počítadlá |
| Široké stĺpce (Cassandra) | Riadky s pružnými množinami stĺpcov | Obrovské dátové množiny s veľkým počtom zápisov |
| Grafová (Neo4j) | Uzly a spojenia | Sociálne siete, odporúčania |
Praktický príklad: rovnaké dáta obchodu, dvoma spôsobmi
Vezmime malý internetový obchod so zákazníčkou a jej objednávkami.
SQL (relačná): dáta sú rozdelené do tabuliek a prepojené cez ID.
-- customers: id=1, name='Lena Ortiz'
-- orders: id=101, customer_id=1, total=42.00
-- id=103, customer_id=1, total=25.00
SELECT c.name, SUM(o.total)
FROM customers c JOIN orders o ON o.customer_id = c.id
GROUP BY c.name;
Ak Lena zmení e-mail, zmení sa na jednom mieste. Otázka „celkové tržby na zákazníka tento mesiac“ je jeden dotaz.
NoSQL (dokument): jej objednávky môžu byť vnútri jej dokumentu.
{
"_id": "cust_1",
"name": "Lena Ortiz",
"email": "lena@example.com",
"orders": [
{ "id": 101, "total": 42.00, "items": ["Green tea"] },
{ "id": 103, "total": 25.00, "items": ["Teapot"] }
]
}
Načítanie Leninej profilovej stránky so všetkými objednávkami je jedno čítanie. Ale otázky, ktoré prechádzajú všetkými zákazníkmi — najpredávanejší produkt tento mesiac — vyžadujú viac práce, a ak sa rovnaké údaje o produkte kopírujú do mnohých objednávok, ich udržiavanie v synchronizácii sa stáva úlohou aplikácie.
Ani jedno nie je zlé. Otázka znie, ktorý vzor vaša aplikácia používa najčastejšie.
Ako vybrať
Relačná SQL databáza je zvyčajne správna východisková voľba, ak:
- Vaše dáta majú veľa vzťahov: používatelia, tímy, rezervácie, faktúry, produkty.
- Budete potrebovať reporty, filtre a súčty naprieč záznamami.
- Záleží na správnosti: peniaze, stav zásob, oprávnenia.
NoSQL databáza stojí za zváženie, ak:
- Potrebujete rýchlu cache alebo úložisko relácií — Redis je tu bežný, často spolu s SQL databázou.
- Vaše záznamy sú v obrovskom počte, jednoduché a nezávislé, ako logy udalostí alebo údaje zo senzorov.
- Ste na platforme postavenej na nej, napríklad na Firestore od Firebase, a jej funkcie v reálnom čase sú hlavným lákadlom.
Mnohé aplikácie používajú obe: SQL ako hlavný zdroj pravdy a NoSQL úložisko pre cache alebo konkrétnu funkciu.
Kľúčové pojmy
| Pojem | Význam |
|---|---|
| Relačná databáza | SQL databáza prepojených tabuliek. |
| Schéma | Definovaná štruktúra dát. |
| Join (spojenie) | Spojenie súvisiacich riadkov z dvoch tabuliek v jednom dotaze. |
| Dokument | Samostatný záznam podobný JSON v dokumentovej databáze. |
| Denormalizácia | Kopírovanie dát na viac miest kvôli rýchlejšiemu čítaniu. |
| ACID | Záruky spoľahlivých transakcií: všetko alebo nič, konzistencia, izolácia a trvalosť. |
| Horizontálne škálovanie | Rozloženie dát na veľa serverov namiesto jedného väčšieho. |
Časté omyly
- „NoSQL znamená bez schémy.“ Vaše dáta vždy majú nejaký tvar. Pri NoSQL ho databáza nemusí vynucovať, takže to musí robiť váš kód.
- „SQL sa nedá škálovať.“ Relačné databázy prevádzkujú veľmi veľké služby. Väčšina aplikácií sa ich limitov nikdy ani nepribližuje.
- „NoSQL je vždy rýchlejší.“ Len pri vzoroch, pre ktoré je navrhnutý. Reporty naprieč dátami môžu byť pomalšie.
- „Musíte si vybrať jednu navždy.“ Mnohé aplikácie kombinujú obe. A SQL databázy ako Postgres ukladajú aj JSON, takže pár pružných polí nevyžaduje NoSQL.
- „NoSQL znamená, že nemôžete používať SQL.“ Názov sa zvyčajne chápe ako „nielen SQL“ a niektoré NoSQL produkty ponúkajú dotazovacie jazyky podobné SQL.
Čo sa spýtať vášho AI tvorcu
- „Akú databázu táto aplikácia používa a prečo je vhodná pre moje dáta?“
- „Nakreslite tabuľky alebo kolekcie a ako sa navzájom spájajú.“
- „Aké reporty budem chcieť o šesť mesiacov? Dokáže ich táto databáza ľahko zodpovedať?“
- „Ak je niekoľko polí naozaj pružných, uložte ich ako JSON v Postgres namiesto pridávania druhej databázy.“
- „Pridajte cache, len ak máme zmerané problémy s rýchlosťou.“
Databázy v Mythex
Mythex dáva každému projektu, ktorý ju potrebuje, vyhradenú Postgres databázu — relačnú SQL databázu — pridanú vtedy, keď ju aplikácia potrebuje, buď na vyžiadanie v chate, alebo príkazom /database (Database). To sedí väčšine obchodných aplikácií: používatelia, rezervácie, objednávky a reporty. Ak potrebujete konkrétnu externú službu, napríklad hostovanú dokumentovú databázu, agent môže napísať kód, ktorý sa k nej pripojí pomocou kľúčov uložených ako tajomstvá projektu. Viac o samotnom jazyku sa dozviete v článku čo je SQL.
Otázky
Aký je hlavný rozdiel medzi SQL a NoSQL?
SQL databázy ukladajú dáta v tabuľkách s definovanou štruktúrou a prepájajú súvisiace tabuľky medzi sebou; dotazujete ich jazykom SQL. NoSQL databázy používajú iné modely — dokumenty, dvojice kľúč-hodnota, široké stĺpce alebo grafy — a zvyčajne umožňujú pružnejšiu štruktúru, pričom každý produkt má vlastný spôsob dotazovania.
Je NoSQL rýchlejší ako SQL?
Všeobecne nie. Každá je rýchla pri prístupových vzoroch, pre ktoré je navrhnutá. Úložisko kľúč-hodnota je veľmi rýchle pri načítaní jednej položky podľa kľúča; relačná databáza je silná pri filtrovaní, spájaní a sumarizácii súvisiacich dát. Návrh a indexovanie majú väčší význam než kategória.
Ktorá je lepšia pre startup alebo malú aplikáciu?
Pre väčšinu obchodných aplikácií — zákazníci, objednávky, rezervácie, používatelia a oprávnenia — je relačná SQL databáza ako Postgres bezpečnou východiskovou voľbou. NoSQL dáva zmysel pre konkrétne potreby, ako sú cache, synchronizácia v reálnom čase v niektorých platformách alebo veľmi veľké objemy jednoduchých, nezávislých záznamov.
Je MongoDB SQL alebo NoSQL?
MongoDB je NoSQL dokumentová databáza. Ukladá záznamy ako pružné dokumenty podobné JSON, a nie ako riadky v tabuľkách.
Dokáže SQL databáza ukladať JSON?
Áno. Postgres má typ jsonb na ukladanie a dotazovanie JSON, a MySQL aj SQLite tiež podporujú JSON. Vďaka tomu si mnohé aplikácie môžu ponechať relačné jadro s niekoľkými pružnými poľami bez samostatnej NoSQL databázy.