Régi anyag: https://docs.google.com/presentation/d/1_nmA1F4ag_O-qlJAE4TfVuyfLgSruZLW/edit?usp=sharing&ouid=110539736176923279178&rtpof=true&sd=true

📊 Adatbázisok története és fejlődése

Relációs adatbázisoktól a NoSQL-en át a vektor adatbázisokig

1. Bevezetés

Az adatbázisok az informatikai rendszerek alapvető elemei, amelyek lehetővé teszik az adatok hatékony tárolását, visszakeresését, rendezését és módosítását. A modern világban hatalmas mennyiségű adat keletkezik másodpercenként, és ezek strukturált tárolása elengedhetetlen a döntéstámogatáshoz, automatizáláshoz és gépi tanuláshoz.

Miért van szükség adatbázisokra?

Példa: Egy webshopban több ezer termék, rendelés és felhasználói adat van. Ezek kereshető tárolása adatbázis nélkül gyakorlatilag lehetetlen lenne.

Adat vs. információ

Az adat tehát az alap, amiből – megfelelő feldolgozással – információt nyerhetünk. Az adatbázis célja az adatok strukturált tárolása annak érdekében, hogy információvá alakíthassuk őket.

Strukturált, félstrukturált és strukturálatlan adatok

Az adatbázisok fejlődése szorosan összefügg azzal, hogyan és milyen típusú adatokat akarunk hatékonyan kezelni.

2. Relációs adatbázisok (RDBMS)

A relációs adatbázisok az egyik legelterjedtebb adatbázis-típusok közé tartoznak. Az adatok táblákban (relációkban) tárolódnak, ahol minden tábla sorokból (rekordokból) és oszlopokból (mezőkből) áll. A relációs modell megbízható és jól definiált struktúrát biztosít az adatok kezeléséhez.

Történet

Jellemzők

Mit jelent az ACID?

Betű Jelentés angolul Jelentés magyarul
A Atomicity Atomszerűség (oszthatatlanság)
C Consistency Konzisztencia (állapothelyesség)
I Isolation Elkülönítés (tranzakciós függetlenség)
D Durability Tartósság (állandóság)

A – Atomicity (Atomszerűség) Egy tranzakció vagy teljes egészében végrehajtódik, vagy semennyire. Ha a tranzakció közben hiba történik (pl. áramszünet), az adatbázis visszaállítja a korábbi állapotot.

C – Consistency (Konzisztencia) A tranzakció nem sértheti meg az adatbázis szabályait. Csak olyan állapot maradhat fenn, amely megfelel a megszorításoknak (kulcsok, ellenőrzések, hivatkozások).

I – Isolation (Elkülönítés) A párhuzamosan futó tranzakciók nem zavarhatják egymást. Egy felhasználó nem láthatja egy másik félkész változtatásait.

D – Durability (Tartósság) Ha egy tranzakció véglegesen befejeződik, annak hatása tartósan megmarad – még rendszerleállás után is.

További előnyök

Hátrányok

Népszerű relációs adatbázis-kezelő rendszerek (RDBMS-ek)

Példa: Egyszerű SQL tábla és lekérdezés

Tábla: `diakok`

id nev szuletesi_ev
1 Kovács Anna 2003
2 Nagy Péter 2002

SQL lekérdezés:

SELECT nev FROM diakok WHERE szuletesi_ev < 2003;

Ez a lekérdezés visszaadja azoknak a diákoknak a nevét, akik 2003 előtt születtek.

3. NoSQL adatbázisok

A NoSQL adatbázisok a relációs modellek alternatívájaként jelentek meg, amikor az internetes alkalmazások, a Big Data és a valós idejű feldolgozások új követelményeket támasztottak az adatkezeléssel szemben. A „NoSQL” nem feltétlenül jelenti azt, hogy nem használható benne SQL, hanem inkább azt, hogy nem relációs modell alapján működik.

Miért jelentek meg?

Jellemzők

NoSQL típusok és példák

Előnyök

Hátrányok

Példa: MongoDB dokumentum

Egy MongoDB kollekcióban tárolt dokumentum példája:

{
  "_id": "u123",
  "nev": "Kiss János",
  "eletkor": 29,
  "cim": {
    "varos": "Budapest",
    "iranyitoszam": "1111"
  }
}

Egy lekérdezés: azokat a felhasználókat kérdezzük le, akik életkora nagyobb mint 25:

db.felhasznalok.find({ "eletkor": { "$gt": 25 } })

4. NewSQL adatbázisok

A NewSQL adatbázisok a relációs adatbázisok továbbfejlesztett változatai, amelyek célja, hogy megtartsák a klasszikus RDBMS rendszerek előnyeit (pl. SQL, ACID), ugyanakkor képesek legyenek a modern alkalmazások által megkövetelt horizontális skálázásra és magas teljesítményre, mint a NoSQL rendszerek.

Miért jöttek létre?

Jellemzők

Előnyök

Hátrányok

Példák

Példa: CockroachDB SQL lekérdezés

CREATE TABLE felhasznalok (
  id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  nev TEXT NOT NULL,
  regisztralt TIMESTAMP DEFAULT now()
);
 
SELECT * FROM felhasznalok WHERE nev LIKE 'K%';

A fenti példa egy CockroachDB tábla létrehozását és egyszerű lekérdezését mutatja be, PostgreSQL-kompatibilis SQL nyelven.

5. Vektor adatbázisok

A vektor adatbázisok új generációs adatbázis-rendszerek, amelyek a mesterséges intelligencia és a gépi tanulás elterjedésével váltak népszerűvé. Céljuk nem strukturált adatok – például szövegek, képek, hangok – jelentés szerinti keresése, amelyet az ún. *embedding* (beágyazott vektorreprezentáció) segítségével valósítanak meg.

Miért van rájuk szükség?

Hogyan működik?

Jellemzők

Előnyök

Hátrányok

Népszerű vektor adatbázisok

Példa: vektoros keresés szövegek között

1. Szöveg → embedding: `“Milyen magas a Mount Everest?”` → `[0.12, -0.45, …, 0.33]` 2. A vektoradatbázisban tárolt több ezer dokumentum embeddingje közül kiválasztjuk a legközelebbit:

query_vector = model.encode("Milyen magas a Mount Everest?")
results = vector_db.search(query_vector, top_k=5)

3. Eredmény: olyan dokumentumokat kapunk, amelyek tartalmilag legközelebb állnak a kérdéshez – még akkor is, ha szó szerint nem egyeznek meg.

6. Tendenciák és jövőkép

7. Összefoglaló táblázat

Típus Terméknevek Előnyök Hátrányok
Relációs (RDBMS) MySQL, PostgreSQL, Oracle Stabil, jól definiált séma, SQL támogatás, ACID garancia Nehezen skálázható, rugalmatlan struktúra
NoSQL MongoDB, Redis, Cassandra, Neo4j Rugalmas séma, jól skálázható, gyors lekérdezések Gyenge konzisztencia, nincs egységes lekérdezőnyelv
NewSQL CockroachDB, Google Spanner, VoltDB ACID + skálázhatóság, SQL-kompatibilitás Bonyolultabb architektúra, kisebb ökoszisztéma
Vektor FAISS, Milvus, Weaviate, Pinecone, Chroma Jelentésalapú keresés, AI integráció, gyors k-NN keresés Nem klasszikus lekérdezések, nehezebb magyarázhatóság

8. Példa

Az alábbi példák bemutatják, hogyan tér el az adatok kezelése a különböző adatbázistípusokban. A példák egyszerűek, mégis jól szemléltetik az eltérő adatmodelleket és lekérdezési módokat.

1. Relációs adatbázis: SQL példa (PostgreSQL)

Tábla létrehozása:

CREATE TABLE diakok (
  id SERIAL PRIMARY KEY,
  nev TEXT NOT NULL,
  szuletesi_ev INTEGER
);

Adatok beszúrása:

INSERT INTO diakok (nev, szuletesi_ev)
VALUES ('Kiss Anna', 2002), ('Nagy Péter', 2001);

Lekérdezés: ki született 2001 előtt?

SELECT nev FROM diakok WHERE szuletesi_ev < 2001;

2. NoSQL példa: MongoDB dokumentum és lekérdezés

Dokumentum beillesztése:

db.diakok.insertOne({
  nev: "Kiss Anna",
  szuletesi_ev: 2002
});

Lekérdezés: azok a diákok, akik 2001 előtt születtek:

db.diakok.find({ szuletesi_ev: { $lt: 2001 } });

3. Vektor adatbázis példa: FAISS keresés (Python)

Tegyük fel, hogy szövegeket átalakítunk vektorokká egy nyelvi modell (pl. `sentence-transformers`) segítségével, majd ezekben keresünk.

Embedding előállítás (példa):

from sentence_transformers import SentenceTransformer
import faiss
import numpy as np
 
model = SentenceTransformer('all-MiniLM-L6-v2')
dokumentumok = ["A kutya ugat.", "A macska nyávog.", "Az autó gyors."]
 
vektorok = model.encode(dokumentumok)
index = faiss.IndexFlatL2(vektorok.shape[1])
index.add(np.array(vektorok))

Keresés hasonló szöveg alapján:

kerdes = "Melyik állat nyávog?"
kerdes_vektor = model.encode([kerdes])
_, eredmenyek = index.search(np.array(kerdes_vektor), k=1)
 
print("Legjobban illeszkedő dokumentum:", dokumentumok[eredmenyek[0][0]])

Eredmény: Legjobban illeszkedő dokumentum: A macska nyávog.

Ellenőrző kérdések

1. Mi a relációs adatbázis egyik alapvető jellemzője?

2. Mi biztosítja az adatintegritást egy relációs adatbázisban?

3. Melyik adatbázis típus ideális gyakran változó adatszerkezetekhez?

4. Mit jelent az ACID mozaikszó „A” betűje az adatbázis tranzakciók esetében?

5. Melyik adatbázis típusban használunk embeddingeket és k-NN keresést?

6. Melyik állítás igaz a MongoDB-re?

7. Mi a referenciális integritás szerepe egy adatbázisban?

8. Melyik igaz a NewSQL adatbázisokra?

9. Melyik nem vektor adatbázis?

10. Mi a BASE modell egyik jellemzője NoSQL rendszereknél?