Príručky

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átTabuľky s definovanými stĺpcamiDokumenty, kľúč-hodnota, široké stĺpce alebo grafy
ŠtruktúraSchéma definovaná vopred, mení sa migráciamiČasto pružná; štruktúru vynucuje kód aplikácie, ak vôbec
VzťahyZabudované: cudzie kľúče a spájanieZvyčajne riešené vnorením dát alebo kódom aplikácie
Dotazovací jazykSQL, spoločný štandardPri každom produkte iný
KonzistenciaSilné transakcie sú štandardZávisí od produktu a nastavení; mnohé už transakcie ponúkajú
ŠkálovanieTradične sa škáluje nahor (väčší server); rozširovanie do šírky je možné, ale ťažšieMnohé sú navrhnuté na rozloženie na veľa serverov
Dobré naObchodné dáta, reporty, čokoľvek s mnohými vzťahmiVeľmi veľké objemy jednoduchých záznamov, cache, pružný obsah
PríkladyPostgres, MySQL, SQLite, SQL ServerMongoDB, Redis, DynamoDB, Firestore, Cassandra, Neo4j

„NoSQL“ nie je jedna vec. Hlavné druhy:

DruhAko ukladá dátaTypické použitie
Dokumentová (MongoDB, Firestore)Dokumenty podobné JSONObsah, katalógy, aplikácie s rôznorodými záznamami
Kľúč-hodnota (Redis, DynamoDB)Hodnota vyhľadaná podľa kľúčaCache, relácie, počítadlá
Široké stĺpce (Cassandra)Riadky s pružnými množinami stĺpcovObrovské dátové množiny s veľkým počtom zápisov
Grafová (Neo4j)Uzly a spojeniaSociá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

PojemVýznam
Relačná databázaSQL databáza prepojených tabuliek.
SchémaDefinovaná štruktúra dát.
Join (spojenie)Spojenie súvisiacich riadkov z dvoch tabuliek v jednom dotaze.
DokumentSamostatný záznam podobný JSON v dokumentovej databáze.
DenormalizáciaKopírovanie dát na viac miest kvôli rýchlejšiemu čítaniu.
ACIDZáruky spoľahlivých transakcií: všetko alebo nič, konzistencia, izolácia a trvalosť.
Horizontálne škálovanieRozlož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.

Mythex · Pricing · Vytvorte čokoľvek s AI · Šablóny webov a aplikácií · Mythex v porovnaní · Slovník pojmov tvorby aplikácií s AI · Bezplatné nástroje na tvorbu aplikácií s AI · English

English አማርኛ العربية Български বাংলা Bosanski Català Čeština Dansk Deutsch Ελληνικά Español Español (España) Eesti فارسی Suomi Français Français (Canada) ગુજરાતી हिन्दी Hrvatski Magyar Հայերեն Bahasa Indonesia Íslenska Italiano 日本語 ქართული Қазақ тілі ಕನ್ನಡ 한국어 Lietuvių Latviešu Македонски മലയാളം Монгол मराठी Bahasa Melayu မြန်မာ Norsk bokmål Nederlands ਪੰਜਾਬੀ Polski Português (Brasil) Português (Portugal) Română Русский Slovenščina Soomaali Shqip Srpski Svenska Kiswahili தமிழ் తెలుగు ไทย Tagalog Türkçe Українська اردو Tiếng Việt 简体中文 繁體中文(香港) 繁體中文(台灣)