Ugrás a fő tartalomra

SQL és NoSQL összehasonlítása

 SQL és NoSQL összehasonlítása


A NoSQL és az SQL adatbázisok közötti választás kulcsfontosságú döntés, amely az alkalmazás skálázhatóságát, teljesítményét és fejlesztési rugalmasságát befolyásolja. Nézzük meg részletesen a különbségeket, és vezessünk végig konkrét példákon!



1. Mi az SQL és a NoSQL?

SQL (Structured Query Language) adatbázisok

Az SQL-adatbázisok (Relációs Adatbázis Kezelő Rendszerek – RDBMS) strukturált adatok tárolására szolgálnak, amelyek előre meghatározott séma szerint szerveződnek táblázatokba.

Jellemzők:

  • Adatok táblázatos formában vannak tárolva sorokkal és oszlopokkal.
  • Fix séma: Az adatok struktúrája előre meghatározott és fix.
  • Relációk: Az adatok összekapcsolhatók más táblák adataival (idegen kulcsok).
  • Tranzakciókezelés: ACID (Atomicity, Consistency, Isolation, Durability) garantált.

📌 Példa SQL-adatbázisra:
Egy webshop esetén egy tipikus SQL-sémában lehet egy Customers (Vásárlók) tábla:

CustomerIDNameEmailAge
1Kovács Bélabela@example.com30
2Nagy Annaanna@example.com25

NoSQL (Not Only SQL) adatbázisok

A NoSQL-adatbázisok strukturálatlan vagy félig strukturált adatokat tárolnak, és nem követelnek meg előre meghatározott sémát.

Jellemzők:

  • Rugalmas séma: Az adatok változó formában tárolhatók.
  • Nagy skálázhatóság: Könnyen méretezhető horizontálisan.
  • Nincs reláció: Az adatok gyakran egy dokumentumban vagy kulcs-érték párban tárolódnak.
  • BASE-modell: Nem garantálja az ACID-tranzakciókat, de végül konzisztens.

📌 Példa NoSQL-adatbázisra (Dokumentumalapú, pl. MongoDB)
Egy webshopban az ügyfelek JSON formátumban így tárolhatók:

---json

{ "CustomerID": 1, "Name": "Kovács Béla", "Email": "bela@example.com", "Orders": [ {"OrderID": 101, "Total": 5000}, {"OrderID": 102, "Total": 15000} ] }

2. Főbb különbségek az SQL és NoSQL között

KategóriaSQLNoSQL
AdatmodellTáblázatos, sorok és oszlopokKulcs-érték, dokumentum, gráf vagy oszlopalapú
SémaFix séma, előre definiált oszlopokRugalmas séma, különböző struktúrák lehetnek
SkálázhatóságVertikális (nagyobb szerverek)Horizontális (több szerver, sharding)
TranzakciókACID (Adatintegritás garantált)BASE (Végső konzisztencia)
LekérdezésekSQL (pl. SELECT, JOIN)API vagy saját lekérdezőnyelv (pl. MongoDB Query Language)
TeljesítményLassabb nagy mennyiségű olvasásnálGyorsabb írás- és olvasásintenzív feladatoknál
Legjobb felhasználási módokBanki rendszerek, CRM, ERPNagy adatbázisok, IoT, közösségi média, Big Data

3. Részletes példák az SQL és NoSQL működésére

Példa 1: Adatok beszúrása

📌 SQL (MySQL):

---sql

INSERT INTO Customers (CustomerID, Name, Email, Age) VALUES (1, 'Kovács Béla', 'bela@example.com', 30);

📌 NoSQL (MongoDB – JSON formátumban):

--- json

db.customers.insertOne({ "CustomerID": 1, "Name": "Kovács Béla", "Email": "bela@example.com", "Age": 30 })

Példa 2: Adatok lekérdezése

📌 SQL (MySQL):

---sql

SELECT * FROM Customers WHERE Age > 25;

📌 NoSQL (MongoDB):

---json

db.customers.find({ "Age": { "$gt": 25 } })

Példa 3: Relációs lekérdezések vs. beágyazott adatok

📌 SQL (MySQL) – JOIN használata a rendelések lekérdezésére

---sql

SELECT Customers.Name, Orders.OrderID, Orders.Total FROM Customers JOIN Orders ON Customers.CustomerID = Orders.CustomerID;

📌 NoSQL (MongoDB) – Beágyazott dokumentumokkal

---json

db.customers.find( { "CustomerID": 1 }, { "Orders": 1 } )

Itt az Orders már eleve az ügyfél dokumentumán belül van, ezért nincs szükség JOIN-ra.


4. Mikor érdemes SQL-t és mikor NoSQL-t használni?

Mikor válassz SQL-t?

✅ Ha erős adatintegritásra van szükség (pl. bankok, vállalati rendszerek).
✅ Ha bonyolult relációk vannak az adatok között.
✅ Ha struktúrált adatokat kell kezelni és az ACID-tranzakciók fontosak.

Mikor válassz NoSQL-t?

✅ Ha nagy mennyiségű adatra és gyors olvasási-írási műveletekre van szükség (pl. közösségi média).
✅ Ha strukturálatlan vagy változó adatokat kell kezelni (pl. JSON, XML).
✅ Ha horizontálisan skálázható rendszer kell (pl. Big Data, IoT).


5. Táblázatos Összegzés: SQL vs. NoSQL

JellemzőSQLNoSQL
AdatmodellTáblázatosDokumentum, kulcs-érték, gráf, oszlopalapú
TranzakciókezelésACIDBASE (Eventually Consistent)
SémaFix sémaDinamikus séma
RelációkTámogatott (JOIN)Nem támogatott vagy alternatív megoldások
SkálázhatóságVertikális (nagyobb szerverek)Horizontális (sharding, replikáció)
FelhasználásPénzügy, vállalati rendszerekKözösségi média, IoT, Big Data
TeljesítményJobb komplex lekérdezéseknélJobb írás- és olvasásintenzív feladatoknál

Összegzés

  • SQL kiválóan alkalmas strukturált adatok és üzleti alkalmazások kezelésére.
  • NoSQL akkor jó választás, ha nagy skálázhatóságra és rugalmas adatszerkezetre van szükség.



SQL specializáció és NoSQL


1. SQL és NoSQL XML/JSON támogatása

📌 SQL adatbázisok XML és JSON támogatással

Az újabb SQL adatbázisok már fél-strukturált adatokat is képesek kezelni speciális adattípusok segítségével, például:

  • XML típusok és lekérdezések:
    • Oracle XML DB: XMLType, XMLQuery(), XMLTable(), XQuery()
    • SQL Server: FOR XML, OPENXML()
    • PostgreSQL: xml típus

  • JSON típusok és lekérdezések:
    • PostgreSQL: json, jsonb (bináris JSON)
    • MySQL: JSON adattípus
    • SQL Server: FOR JSON, OPENJSON()
    • Oracle: JSON_OBJECT(), JSON_TABLE()

Az SQL adatbázisok így már nemcsak táblázatos formában, hanem hierarchikus, beágyazott adatokkal is tudnak dolgozni.


📌 NoSQL adatbázisok XML és JSON kezelésre

A NoSQL rendszerek alapvetően fél-strukturált adatokra lettek tervezve, és már eleve natívan támogatják ezeket:

  • Dokumentumalapú adatbázisok (MongoDB, CouchDB, Firebase)
    • JSON-alapú tárolás, egyszerű beágyazás, rugalmas szerkezet
  • Gráf-adatbázisok (Neo4j, ArangoDB)
    • XML/JSON formátumok is könnyen kezelhetők gráfstruktúrában
  • Oszlop-alapú adatbázisok (Cassandra, HBase)
    • JSON-bejegyzések egyes oszlopokban is tárolhatók
  • XML-natív adatbázisok (BaseX, eXistDB, MarkLogic)
    • XML dokumentumokat natívan tárolnak és dolgoznak fel

2. Részletes összehasonlítás: SQL vs. NoSQL XML/JSON támogatással

JellemzőSQL (XML/JSON támogatással)NoSQL (natív XML/JSON támogatás)
AdatszerkezetTáblázatos + XML/JSON típusok (pl. CLOB, JSON, XMLType)Dokumentumalapú (JSON/XML natívan)
AdatlekérdezésSQL + XML/JSON-specifikus kiegészítések (XMLQuery(), JSON_TABLE())JSON-alapú API-k, NoSQL natív query nyelvek
AdatintegritásACID (tranzakciókezelés, adatkonzisztencia)BASE (végső konzisztencia, gyors elérés)
Séma rugalmasságaFix sémával, de XML/JSON támogatás miatt lazábbTeljesen rugalmas séma, nincs előre meghatározott szerkezet
TeljesítményLassabb nagy JSON/XML objektumokkal (indexelés és keresés bonyolultabb)Gyors JSON/XML feldolgozás (nincs átalakítás, natívan kezeli)
Indexelés és keresésKorlátozott indexelés XML/JSON oszlopok esetén (pl. Oracle JSON_INDEX)Jobb indexelés és gyorsabb keresés JSON/XML dokumentumokban
Kapcsolatok és relációkJobb relációkezelés (SQL JOIN, idegen kulcsok)Nincs vagy minimális relációs támogatás
Tranzakciók és adatbiztonságErős ACID-tranzakciókezelésGyors, de nincs erős ACID támogatás
SkálázhatóságVertikális skálázás (nagyobb szerverek)Horizontális skálázás (sharding, replikáció)

3. Gyakorlati példák SQL és NoSQL adatbázisokban

📌 Példa 1: JSON kezelés SQL és NoSQL rendszerekben

SQL adatbázisban (PostgreSQL JSON támogatás):

---sql

SELECT jsonb_pretty(data) FROM customers WHERE data->>'CustomerID' = '1';
  • PostgreSQL jsonb típusát használja a hatékony JSON keresésre.
  • Hátrány: Nem natív JSON-kezelés, némi teljesítményveszteség.

NoSQL adatbázisban (MongoDB lekérdezés JSON-ben):

---json

db.customers.find({ "CustomerID": 1 })
  • MongoDB natív JSON struktúrával dolgozik, gyorsabb keresést biztosít.

📌 Példa 2: XML kezelés SQL és NoSQL rendszerekben

SQL adatbázisban (Oracle XML kezelés):

---sql

SELECT EXTRACTVALUE(xml_data, '/Customer/Name') FROM customers WHERE XMLExists('/Customer[CustomerID="1"]' PASSING xml_data);
  • Hátrány: XMLQuery bonyolultabb, nagyobb erőforrás-igény.

NoSQL adatbázisban (BaseX XML kezelés):

--- xquery

for $x in doc("customers.xml")//Customer[CustomerID="1"] return $x/Name
  • Előny: Egyszerűbb és gyorsabb XML keresés NoSQL-ben.

4. Összegzés: SQL vagy NoSQL XML/JSON kezelésre?

📌 Mikor válassz SQL-t XML/JSON támogatással?

Erős adatintegritás kell (pl. banki, pénzügyi rendszerek).
SQL és relációs lekérdezések mellett szeretnéd használni XML/JSON-t.
Tranzakciókezelés fontos.

📌 Mikor válassz NoSQL-t XML/JSON kezelésre?

Nagy mennyiségű XML/JSON adat esetén (pl. Big Data, IoT, közösségi média).
Gyors keresés és horizontális skálázhatóság szükséges.
Teljes rugalmasság kell a séma nélkül.


5. Végső összehasonlító táblázat

JellemzőSQL XML/JSON támogatássalNoSQL natív XML/JSON
Relációk✔ Erős támogatás✖ Nincs vagy minimális
ACID✔ Teljes támogatás✖ Gyengébb (BASE)
Séma✔ Részben rugalmas✔ Teljesen rugalmas
Teljesítmény❌ Lassabb nagy JSON/XML struktúráknál✔ Gyors JSON/XML feldolgozás
Skálázhatóság❌ Korlátozott (vertikális)✔ Kiváló (horizontális)

👉 Ha strukturált relációs adatokat kell kezelned, SQL a jobb.
👉 Ha nagy mennyiségű JSON/XML adattal dolgozol, NoSQL jobb választás.



Tesztelési lehetőség NoSQL próbára


Ha szeretnéd gyakorlatban is kipróbálni a NoSQL működését, több ingyenes és egyszerű mód is rendelkezésre áll. Az alábbiakban bemutatok néhány lehetőséget, attól függően, hogy milyen típusú NoSQL adatbázist szeretnél tesztelni.


1. Online Ingyenes NoSQL Tesztkörnyezetek (Telepítés Nélkül)

Ha nem szeretnél semmit telepíteni, akkor az alábbi böngészőben futtatható online eszközök tökéletesek lehetnek:

AdatbázisLinkLeírás
MongoDB (JSON-alapú)MongoDB PlaygroundInteraktív online MongoDB tesztkörnyezet. JSON dokumentumokat lehet benne kezelni, lekérdezni.
CouchDB (JSON-alapú, REST API)IBM Cloud CouchDBIngyenes regisztráció után használható. REST API-val tesztelhető.
Firebase Realtime Database (JSON-alapú)Firebase ConsoleIngyenes Firebase adatbázis kezelése Google fiókkal.
Redis (kulcs-érték alapú)Redis Labs Try RedisOnline interaktív Redis környezet CLI-alapú felülettel.

Ha MongoDB-t szeretnél kipróbálni telepítés nélkül, akkor a MongoDB Playground ajánlott, mert egyszerű és azonnal használható.


2. NoSQL Telepítése Saját Gépeden

Ha hosszabb távon kísérleteznél, érdemes telepíteni egy NoSQL adatbázist.

📌 MongoDB telepítése (JSON-alapú NoSQL)

A MongoDB az egyik legnépszerűbb NoSQL adatbázis, és könnyen telepíthető.

Telepítési lépések:

  1. Letöltés: MongoDB Community Server
  2. Telepítés: Windows/macOS/Linux esetén az egyszerű telepítővel.
  3. Indítás:
    • Parancssorban: mongod (MongoDB szerver indítása)
    • mongo (MongoDB shell elindítása)
  4. Adatbázis létrehozása és tesztelése:
    ---json

    use testDB db.users.insertOne({"name": "Kovács Béla", "age": 30}) db.users.find()

🔹 Ha nem akarsz telepíteni, használhatod a MongoDB Atlas-t (mongodb.com/cloud/atlas), ahol ingyenes felhő alapú adatbázist kapsz.


📌 Redis telepítése (Kulcs-Érték NoSQL)

  1. Letöltés: Redis.io letöltés
  2. Telepítés Windows/Linux/macOS rendszerre
  3. Indítás:
    ---sh

    redis-server
  4. Tesztelés:
    ---sh

    redis-cli SET name "Kovács Béla" GET name

🔹 Redis szupergyors, és remek választás, ha gyors kereséseket szeretnél végezni.


📌 Cassandra telepítése (Oszlop-alapú NoSQL)

A Cassandra a Big Data és elosztott rendszerek egyik legnépszerűbb NoSQL adatbázisa.
Telepítési lépések:

  1. Letöltés: Apache Cassandra
  2. Indítás:
    ---sh

    cassandra -f
  3. Tesztelés (CQL parancsokkal):
    ---sql

    CREATE KEYSPACE test WITH replication = {'class': 'SimpleStrategy', 'replication_factor' : 1}; USE test; CREATE TABLE users (id UUID PRIMARY KEY, name text);

🔹 Cassandra nagy skálázhatóságot biztosít, ezért elosztott rendszerekben kiváló.


3. Felhőalapú NoSQL Szolgáltatások

Ha nem akarsz semmit telepíteni, de szeretnéd éles környezetben kipróbálni a NoSQL-t, akkor érdemes a felhőmegoldásokat használni:

AdatbázisPlatformLink
MongoDB AtlasAWS / Azure / GCPMongoDB Atlas
Google FirestoreGoogle CloudFirestore
Amazon DynamoDBAWSDynamoDB
Azure Cosmos DBMicrosoft AzureCosmos DB

🔹 Előnyök:

  • Ingyenes csomagokkal tesztelhetők.
  • Könnyű skálázás és valós környezetben kipróbálható NoSQL.

4. NoSQL Működésének Kipróbálása Kóddal (Python, Node.js)

Ha már telepítettél egy NoSQL adatbázist, akkor Python vagy JavaScript (Node.js) segítségével is kipróbálhatod.

📌 Példa MongoDB használatára Pythonban

--- python

from pymongo import MongoClient # Csatlakozás az adatbázishoz client = MongoClient("mongodb://localhost:27017/") db = client["testDB"] collection = db["users"] # Adat beszúrása collection.insert_one({"name": "Kovács Béla", "age": 30}) # Adat lekérdezése for user in collection.find(): print(user)

🔹 Telepítéshez:

---sh

pip install pymongo

Ezután már Pythonból is dolgozhatsz NoSQL adatbázisokkal! 🚀


Összegzés

Ha csak gyorsan ki akarod próbálni:

  • MongoDB Playground vagy Try Redis böngészőben.

Ha saját gépen akarod használni:

  • MongoDB vagy Redis könnyen telepíthető.
  • Cassandra és Firebase is érdekes lehet.

Ha felhőben próbálnád ki:

  • MongoDB Atlas és Google Firestore ingyenes csomagokkal.

🔹 Kezdőknek ajánlott MongoDB, mert JSON-alapú, könnyen tanulható, és sok ingyenes eszköz áll rendelkezésre!



MongoDB alapfogalmak / MongoDB Logikai felépítése

Egy MongoDB-alapú adatbázis rendszer legfelső rétege az ún. klaszter, ebbe szervezzük a szervereket. Mi klaszterekkel ebben a tárgyban nem foglalkozunk, azok a skálázás eszközei. A második szint a szerver szintje (a mongod processz), ami alatt az adatbázis foglal helyet. Egy szerver/klaszter több adatbázist tárolhat. Az adatbázisok pedig gyűjteményekből (collection) épülnek fel. Ha a relációs adatbázisokkal meg akarjuk feleltetni, akkor a gyűjtemények a táblák megfelelői, ezen belül a sorok/rekordok pedig a gyűjteményben tárolt dokumentumok lesznek.


Megjegyzések