Útmutatók

SQL vs NoSQL: melyik adatbázist használja az appod?

Az SQL-adatbázisok (más néven relációs adatbázisok) meghatározott szerkezetű táblákban – sorokban és oszlopokban – tárolják az adatokat, és a kapcsolódó táblákat összekötik. Lekérdezésükhöz az SQL nyelvet használod. Példák: Postgres, MySQL és SQLite. A NoSQL-adatbázisok más módokon tárolják az adatokat – dokumentumokban, kulcs-érték párokban, széles oszlopokban vagy gráfokban –, és általában rugalmasabb szerkezetet engednek. Példák: MongoDB, Redis, DynamoDB és Firestore. A legtöbb üzleti appnál az SQL-adatbázis az ésszerű alapértelmezés; a NoSQL konkrét feladatoknál jeleskedik.

Miért fontos ez a döntés MI-vel építkezve

Az adatbázis az appnak az egyik legnehezebben megváltoztatható része. A képernyőket egy délután alatt át lehet tervezni; évek ügyfél-adatainak másik típusú adatbázisba költöztetése viszont projekt.

Ha egy MI-appépítő neked ad adattárolást, ezek közül választ. Ha ismered a különbséget, segít abban, hogy:

  • megértsd, hogy néz ki az adatod, és hogy képes-e megválaszolni a később felmerülő kérdéseidet („bevétel havonta, termékenként”);
  • értékelni tudd a platformválasztásokat. Egyes platformok dokumentumadatbázisra épülnek, mások relációsra. Példáért lásd: Supabase vs Firebase, ahol mindkét típus szerepel;
  • elkerüld a szolgáltatóhoz kötődést. Az SQL közös szabvány, ezért a relációs adatok általában könnyebben átköltözhetők szolgáltatók között.

Hétköznapi hasonlat

Az SQL-adatbázis olyan, mint egy gondosan megtervezett táblázatkészlet szigorú oszlopokkal: egy lap az ügyfeleknek, egy a rendeléseknek, és minden rendelés-sor az ügyfél-sorra mutat az azonosítójával. Egy lap minden sorának ugyanazok az oszlopai. Kis tervezést igényel, de a lapok közötti kérdések könnyen feltehetők, és az adatok rendezettek maradnak.

A NoSQL dokumentumadatbázis olyan, mint egy mappákkal teli iratszekrény. Minden ügyfél mappájában benne lehet az adatai és a rendelései is, és egy mappában lehetnek olyan papírok, amelyek másokéban nincsenek. Egy ügyfél teljes történetét gyorsan elővehetjük. Arra a kérdésre, hogy „mit rendelt mindenki tavaly?”, viszont sok mappát kell kinyitni.

A valódi különbségek

SQL (relációs)NoSQL
AdatszerkezetMeghatározott oszlopokkal rendelkező táblákDokumentumok, kulcs-érték párok, széles oszlopok vagy gráfok
SzerkezetSéma előre definiálva, migrációkkal módosítvaGyakran rugalmas; a szerkezetet az appkód érvényesíti, ha egyáltalán
KapcsolatokBeépítve: idegen kulcsok és join-okÁltalában az adatok beágyazásával vagy az appkóddal kezelve
Lekérdezési nyelvSQL, közös szabványTermékenként eltérő
KonzisztenciaAz erős tranzakciók alapértelmezettekTerméktől és beállítástól függ; sok már kínál tranzakciókat
SkálázásHagyományosan felfelé skálázódik (nagyobb szerver); kifelé is lehetséges, de nehezebbSokat úgy terveztek, hogy sok szerveren oszoljon el
ErősségeÜzleti adatok, riportok, sok kapcsolatot tartalmazó dolgokNagyon nagy mennyiségű egyszerű rekord, gyorsítótárazás, rugalmas tartalom
PéldákPostgres, MySQL, SQLite, SQL ServerMongoDB, Redis, DynamoDB, Firestore, Cassandra, Neo4j

A „NoSQL” nem egy dolog. A főbb típusok:

TípusHogyan tárolTipikus használat
Dokumentum (MongoDB, Firestore)JSON-szerű dokumentumokTartalom, katalógusok, változatos rekordokat tartalmazó appok
Kulcs-érték (Redis, DynamoDB)Kulcs alapján kikeresett értékGyorsítótár, munkamenetek, számlálók
Széles oszlop (Cassandra)Rugalmas oszlophalmazú sorokNagy, írásigényes adathalmazok
Gráf (Neo4j)Csomópontok és kapcsolatokKözösségi hálózatok, ajánlórendszerek

Példa: ugyanaz a bolti adat, két módon

Vegyünk egy kis webshopot egy vásárlóval és a rendeléseivel.

SQL (relációs): az adatok táblákra oszlanak, és azonosítókkal kapcsolódnak.

-- 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;

Ha Lena megváltoztatja az e-mail-címét, az egy helyen módosul. A „vásárlónkénti összes eladás ebben a hónapban” kérdés egy lekérdezés.

NoSQL (dokumentum): a rendelései a saját dokumentumában élhetnek.

{
  "_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"] }
  ]
}

Lena profiloldalának betöltése a rendeléseivel egyetlen olvasás. Viszont az összes vásárlót érintő kérdések – a hónap legkelendőbb terméke – több munkát igényelnek, és ha ugyanazok a termékadatok sok rendelésbe másolódnak, azok szinkronban tartása az app feladata lesz.

Egyik sem rossz. A kérdés az, hogy az appod melyik mintát használja legtöbbet.

Hogyan válassz

A relációs SQL-adatbázis általában a jó alapértelmezés, ha:

  • az adataidban sok kapcsolat van: felhasználók, csapatok, foglalások, számlák, termékek;
  • riportokra, szűrőkre és összegekre lesz szükséged a rekordok között;
  • számít a pontosság: pénz, készletszintek, jogosultságok.

A NoSQL-adatbázis akkor érdemes, ha:

  • gyors gyorsítótárra vagy munkamenet-tárolóra van szükséged – a Redis erre gyakran használt, gyakran egy SQL-adatbázis mellett;
  • a rekordjaid száma nagy, egyszerűek és függetlenek, például eseménynaplók vagy szenzoradatok;
  • egy olyan platformot használsz, amely köré épült, például a Firebase Firestore-ját, és a valós idejű funkciói a fő vonzerő.

Sok app mindkettőt használja: az SQL az elsődleges forrás, a NoSQL pedig gyorsítótárazásra vagy egy konkrét funkcióra.

Kulcsfogalmak

FogalomJelentés
Relációs adatbázisÖsszekapcsolt táblákból álló SQL-adatbázis.
SémaAz adatok meghatározott szerkezete.
JoinKét tábla kapcsolódó soreinek összekapcsolása egy lekérdezésben.
DokumentumÖnálló, JSON-szerű rekord dokumentumadatbázisban.
DenormalizálásAdatok többhelyre másolása gyorsabb olvasáshoz.
ACIDA tranzakciók megbízhatóságának garanciái: mindent vagy semmit, konzisztens, elszigetelt és tartós.
Horizontális skálázásAz adatok sok szerverre osztása egyetlen nagyobb szerver helyett.

Gyakori tévhitek

  • „A NoSQL-ben nincs séma.” Az adatodnak mindig van alakja. NoSQL-nél az adatbázis nem biztos, hogy érvényesíti, tehát a kódodnak kell.
  • „Az SQL nem skálázódik.” A relációs adatbázisok nagyon nagy szolgáltatásokat futtatnak. A legtöbb app soha nem közelíti meg a határaikat.
  • „A NoSQL mindig gyorsabb.” Csak arra a mintára, amelyre tervezték. Egy keresztmetszeti riport lassabb lehet.
  • „Örökre egyet kell választanod.” Sok app mindkettőt kombinálja. A Postgres és más SQL-adatbázisok JSON-t is tárolnak, így néhány rugalmas mezőhöz nincs szükség NoSQL-re.
  • „A NoSQL azt jelenti, hogy nem használhatsz SQL-t.” A nevet általában úgy olvassák, hogy „nem csak SQL”, és egyes NoSQL-termékek SQL-szerű lekérdezési nyelvet kínálnak.

Mit kérdezz az MI-építődtől

  • „Milyen adatbázist használ ez az app, és miért illik az adataimhoz?”
  • „Rajzold fel a táblákat vagy gyűjteményeket és azok kapcsolatait.”
  • „Mely riportokat akarom majd hat hónap múlva? Könnyen meg tudja válaszolni ezt az adatbázis?”
  • „Ha néhány mező valóban rugalmas, JSON-ként tárold a Postgresben a külön adatbázis helyett.”
  • „Csak akkor adjunk gyorsítótárat, ha mért sebességproblémánk van.”

Adatbázisok a Mythexben

A Mythex minden olyan projektnek, amelynek szüksége van rá, saját dedikált Postgres-adatbázist ad – egy relációs SQL-adatbázist –, amelyet akkor adunk hozzá, amikor az app igényli, akár csevegésben kérve, akár a /database paranccsal (Adatbázis). Ez a legtöbb üzleti appnak megfelel: felhasználók, foglalások, rendelések és riportok. Ha valamilyen külső szolgáltatásra van szükséged, például egy hosztolt dokumentumadatbázisra, az ügynök olyan kódot írhat, amely a projekt titkos kulcsaiddal csatlakozik hozzá. A nyelv magáról, az SQL-ről a mi az SQL oldalon olvashatsz többet.

Kérdések

Mi a fő különbség az SQL és a NoSQL között?

Az SQL-adatbázisok meghatározott szerkezetű táblákban tárolják az adatokat, és a kapcsolódó táblákat összekötik; lekérdezésükhöz SQL-t használsz. A NoSQL-adatbázisok más modelleket használnak – dokumentumokat, kulcs-érték párokat, széles oszlopokat vagy gráfokat –, és általában rugalmasabb szerkezetet engednek, ahol minden terméknek saját lekérdezési módja van.

A NoSQL gyorsabb, mint az SQL?

Általában nem. Mindkettő gyors a számára tervezett hozzáférési mintákhoz. Egy kulcs-érték tároló nagyon gyorsan lekér egy elemet kulcs alapján; egy relációs adatbázis erős a szűrésben, az összekapcsolásban és a kapcsolódó adatok összegzésében. A tervezés és az indexelés fontosabb, mint a kategória.

Melyik jobb egy startupnak vagy kis appnak?

A legtöbb üzleti appnál – ügyfelek, rendelések, foglalások, felhasználók és jogosultságok – egy relációs SQL-adatbázis, például a Postgres, biztonságos alapértelmezés. A NoSQL konkrét igényekre éri meg, például gyorsítótárazásra, bizonyos platformok valós idejű szinkronjára, vagy nagyon nagy mennyiségű, egyszerű, önálló rekordra.

A MongoDB SQL vagy NoSQL?

A MongoDB egy NoSQL dokumentumadatbázis. A rekordokat rugalmas, JSON-szerű dokumentumokként tárolja, nem táblák soraiként.

Tud az SQL-adatbázis JSON-t tárolni?

Igen. A Postgresnek van jsonb típusa JSON tárolására és lekérdezésére, a MySQL és az SQLite is támogatja a JSON-t. Így sok app megtarthatja a relációs magot néhány rugalmas mezővel, külön NoSQL-adatbázis nélkül.

Mythex · Pricing · Építs bármit AI-val · Weboldal- és alkalmazássablonok · A Mythex összehasonlítva · AI-alapú alkalmazásépítési szószedet · Ingyenes eszközök AI-alapú alkalmazásépítéshez · English

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