User Tools

Site Tools


tanszek:oktatas:muszaki_informatika:adattarolas_adatbazisok

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?

  • Az adatok szervezett tárolása lehetővé teszi azok gyors visszakeresését és elemzését.
  • Több felhasználó egyidejűleg dolgozhat ugyanazon adatokkal (konkurens hozzáférés).
  • Biztosítani lehet az adatintegritást és a hozzáférés-ellenőrzést. Az adatbázis képes megóvni az adatok helyességét, érvényességét és konzisztenciáját – vagyis azt, hogy az adatok ne legyenek hibásak, hiányosak, vagy egymásnak ellentmondóak.
  • Az adatok rendszeres mentése és visszaállítása egyszerűbbé válik.
  • Automatizált folyamatokhoz (pl. webalkalmazások, gépi tanulás) szükséges egy megbízható háttértároló.

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ó

  • Adat: nyers tények, mért vagy rögzített értékek, amelyek még nem feltétlenül bírnak jelentéssel.
    • Példa: `42`, `2025-05-07`, `„Piros”`
  • Információ: értelmezett adat, amely kontextusba helyezve új tudást jelent.
    • Példa: „42 éves a felhasználó”, vagy „A rendelés dátuma: 2025-05-07”

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

  • Strukturált adat:
    • Táblázatos formában rendezett, előre meghatározott sémával rendelkezik.
    • Példa: SQL adatbázisok, Excel-táblák, CRM rendszerek.
    • Jellemző: gyors kereshetőség, jól lekérdezhető.
  • Félstrukturált adat:
    • Nincs fix sémája, de tartalmaz címkéket vagy metaadatokat.
    • Példa: XML, JSON, YAML fájlok, logok.
    • Rugalmasabb, de nehezebb indexelni és lekérdezni.
  • Strukturálatlan adat:
    • Nincs formázása, nem egyértelmű a tartalma.
    • Példa: szövegfájlok, képek, videók, e-mailek, hangfelvételek.
    • Ezeket általában keresőmotorokkal vagy mesterséges intelligenciával lehet feldolgozni (pl. szöveg- vagy képelemzés).

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

  • A relációs modellt Edgar F. Codd matematikus javasolta 1970-ben.
  • A modell a halmazelméletre és a predikátumlogikára épül.
  • A ’70-es, ’80-as években megjelentek az első RDBMS rendszerek: IBM System R, Ingres, Oracle.
  • A SQL (Structured Query Language) nyelv szabványosítása nagyban hozzájárult az elterjedéséhez.

Jellemzők

  • Adatszerkezet: táblázatos (sorok és oszlopok).
  • Szigorú séma: minden táblának előre meghatározott szerkezete van (mezőtípusok, kulcsok stb.).
  • Kapcsolatok: táblák között idegen kulcsokon keresztül hozunk létre kapcsolatokat.
  • ACID tulajdonságok: Az ACID tulajdonságok biztosítják, hogy az adatbázisban végzett tranzakciók megbízhatóan és konzisztensen hajtódjanak végre, még hiba vagy rendszerleállás esetén is. Ezek különösen fontosak pénzügyi, vállalati vagy bármilyen más üzletkritikus rendszerekben.

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.

  • Példa: Ha egy banki utalás során először levonjuk a pénzt A számláról, majd jóváírjuk B számlán, akkor ezek vagy együtt történnek meg, vagy egyik sem.

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).

  • Példa: Egy megrendelés nem lehet úgy eltárolva, hogy nem tartozik hozzá létező vásárló.

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.

  • Példa: Ha két ügyintéző módosítja ugyanazt az ügyfélrekordot, a rendszer biztosítja, hogy ezek ne írják felül egymást hibásan.

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.

  • Példa: Ha egy utalás sikeresen lefutott, a pénzmozgás nem veszhet el újraindítás után sem.

További előnyök

  • Adatintegritás: kulcsok, megszorítások és szabályok segítségével biztosítható.
  • Lekérdezhetőség: a SQL nyelv rendkívül erős és kifejező eszköztárat ad.
  • Stabilitás és érettség: hosszú távon kipróbált, optimalizált rendszerek.
  • Többfelhasználós működés: jogosultságkezelés, tranzakciókezelés.

Hátrányok

  • Skálázhatóság: nagy adatmennyiség és sok párhuzamos felhasználó esetén nehezen osztható szét több gépre (horizontális skálázás).
  • Rugalmatlanság: séma módosítása bonyolult lehet, különösen ha az adatstruktúra gyakran változik.
  • Strukturálatlan adatok kezelése: szöveg, kép, videó típusú adatok kezelésére nem ideális.

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

  • MySQL – nyílt forráskódú, népszerű webalkalmazások körében (pl. WordPress).
  • PostgreSQL – fejlett funkciók, szabványos SQL támogatás, objektum-orientált kiegészítések.
  • Oracle Database – robusztus vállalati megoldás, fejlett biztonság és replikációs lehetőségek.
  • Microsoft SQL Server – integráció Microsoft-technológiákkal, könnyű használat.

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?

  • Az adatok mennyisége gyorsan növekedett (pl. közösségi média, szenzoradatok).
  • Az adatszerkezet egyre rugalmasabb lett – gyakran változó mezők, új attribútumok.
  • Szükség volt horizontális skálázásra – sok szerver párhuzamos futtatása.
  • Alkalmazásoknak nagy sebességre és alacsony késleltetésre volt szüksége.

Jellemzők

  • Sémanélküli modell: nincs előre rögzített mezőszerkezet.
  • BASE modell:
    • *Basically Available* – mindig elérhető adatbázis
    • *Soft state* – az adat idővel változhat
    • *Eventually consistent* – idővel elérhető a konzisztencia (nem garantált azonnal)
  • Horizontálisan skálázható: könnyen bővíthető több gépre.
  • Nagy teljesítmény: ideális valós idejű alkalmazásokhoz.

NoSQL típusok és példák

  • Dokumentum-orientált adatbázisok
    • Minden rekord egy önálló dokumentum (pl. JSON formátumban).
    • Rugalmas szerkezet, ideális REST API-khoz.
    • Példa: MongoDB, CouchDB
  • Kulcs-érték tárolók
    • Egyszerű szerkezet: kulcs → érték (mint egy szótár).
    • Nagyon gyors, kiváló gyorsítótárazásra.
    • Példa: Redis, Amazon DynamoDB
  • Oszlop-orientált adatbázisok
    • Az adatok nem sorokban, hanem oszlopokban tárolódnak.
    • Hatékony analitikai feldolgozás nagy adattáblákon.
    • Példa: Apache Cassandra, HBase
  • Gráf adatbázisok
    • Adatok és azok kapcsolatai gráfként ábrázolva (csomópontok és élek).
    • Nagyon hasznos hálózati elemzésekhez, pl. közösségi hálók, útvonalkeresés.
    • Példa: Neo4j, ArangoDB

Előnyök

  • Nagy teljesítmény, alacsony válaszidő.
  • Könnyen skálázható horizontálisan.
  • Rugalmas adatszerkezet – ideális gyorsan változó alkalmazásokhoz.
  • Néhány esetben beépített replikáció, sharding, elosztott feldolgozás.

Hátrányok

  • Nincs szabványos nyelv (mint az SQL).
  • Az adatintegritás és konzisztencia nem mindig garantált.
  • Alkalmazásfejlesztéskor a logika egy része az adatbázis helyett a kódban jelenik meg.
  • Komplex lekérdezések megvalósítása nehézkes lehet.

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?

  • A vállalatok továbbra is igénylik a strukturált, relációs adatsémát és az ACID garanciákat.
  • Ugyanakkor szükség van a modern skálázhatóságra, amit a NoSQL rendszerek nyújtanak.
  • A cél: „legyen meg a torta és együk is meg” – relációs modell + felhőbarát architektúra.

Jellemzők

  • Relációs modell: táblák, kulcsok, SQL nyelv
  • ACID tranzakciók: konzisztencia és megbízhatóság
  • Elosztott architektúra: több szerveren futó adatbázis
  • Skálázhatóság: automatikus sharding, load balancing
  • Magas rendelkezésre állás: beépített replikáció, hibatűrés

Előnyök

  • Kombinálja a relációs adatbázisok előnyeit a NoSQL skálázhatóságával
  • Alkalmas nagy forgalmú, üzletkritikus alkalmazásokhoz
  • Használható ismerős SQL nyelvvel, nem igényel új tanulási görbét

Hátrányok

  • Bonyolultabb architektúra és üzemeltetés, mint egy egyszerű SQL adatbázisnál
  • Még viszonylag fiatal technológia – kisebb ökoszisztéma, kevesebb szakember
  • Néhány megoldás zárt forráskódú, kereskedelmi licenc alatt áll

Példák

  • Google Spanner
    • A Google saját globálisan elosztott relációs adatbázisa.
    • Világszintű szinkronizációval garantálja a konzisztenciát.
  • CockroachDB
  • Nyílt forráskódú, elosztott relációs adatbázis.
  • Automatikus skálázás és replikáció.
  • PostgreSQL-kompatibilis SQL interfész.
  • VoltDB
    • Főként valós idejű analitikára és tranzakciókra specializált.
    • Nagy sebesség, memóriabeli működés.

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?

  • A hagyományos adatbázisok nem alkalmasak jelentésalapú keresésre.
  • Az LLM-ek, képfeldolgozók, hangfelismerők vektorokat állítanak elő, amelyek geometriailag összehasonlíthatók.
  • Példa: „melyik másik dokumentum tartalmilag hasonlít ehhez a kérdéshez?”

Hogyan működik?

  • Az objektumokat (pl. szöveg, kép) embedding-gé alakítjuk egy neurális háló segítségével.
  • Az így kapott vektorokat egy vektoradatbázis tárolja.
  • Keresés során szintén vektort képezünk, majd megkeressük a legközelebbi (használatos: k-NN – *k Nearest Neighbors*) vektorokat.
  • A hasonlóságot általában koszinusz-hasonlóság, euklideszi távolság vagy más metrika alapján számítják.

Jellemzők

  • Nincs klasszikus SQL – speciális API vagy Python/REST kliensek használatosak.
  • Beépített indexelési módszerek a gyors kereséshez (pl. HNSW, IVF, PQ).
  • Gyors és hatékony nagy dimenziójú adatok keresése.

Előnyök

  • Jelentésalapú keresés – szöveg vagy kép jelentésének megértése
  • Ideális LLM-alapú rendszerekhez, mint pl. kérdés-válasz vagy dokumentumkeresés
  • Kiváló teljesítmény nagy adathalmazokon is

Hátrányok

  • Nem hagyományos adatmodell – nem tárol klasszikus táblákat, kapcsolatokkal
  • A „miért kaptuk ezt a találatot?” kérdésre nehezebb választ adni (black-box jelleg)
  • A pontosság függ az embedding minőségétől és a választott metrikától

Népszerű vektor adatbázisok

  • FAISS (Facebook AI Similarity Search) – nagy teljesítményű, Python-könyvtárként is elérhető
  • Milvus – nyílt forráskódú, skálázható, GPU-t is támogató vektor DB
  • Weaviate – REST API + GraphQL támogatás, integrált gépi tanulási pipeline
  • Pinecone – felhőalapú, egyszerűen használható szolgáltatás
  • Chroma – egyszerű integráció LangChain/RAG rendszerekhez

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

  • Multimodális adatbázisok (szöveg + kép + struktúrált adatok)
  • Hybrid keresés: SQL + vektoros keresés együtt
  • AI-native rendszerek: LLM + adatbázis integráció (pl. LangChain)

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?

  • ( ) Az adatok képek és hangfájlok formájában tárolódnak
  • (x) Az adatokat táblákban tároljuk sorok és oszlopok formájában
  • ( ) Az adatbázisok nem rendelkeznek előre meghatározott szerkezettel

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

  • ( ) A dokumentumalapú adattárolás
  • ( ) Az adatok titkosítása
  • (x) Az elsődleges kulcsok, idegen kulcsok és megszorítások

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

  • (x) NoSQL
  • ( ) Relációs (RDBMS)
  • ( ) CSV fájl

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

  • (x) Atomicity – oszthatatlanság
  • ( ) Availability – elérhetőség
  • ( ) Access – hozzáférhetőség

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

  • ( ) Relációs adatbázisban
  • ( ) Gráf adatbázisban
  • (x) Vektor adatbázisban

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

  • ( ) Táblák és relációk alapján tárol adatokat
  • (x) JSON-szerű dokumentumokban tárolja az adatokat
  • ( ) Kizárólag numerikus adatokat képes kezelni

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

  • (x) Biztosítja, hogy az idegen kulcs által hivatkozott rekord létezzen
  • ( ) Az adatokat titkosítja
  • ( ) Lehetővé teszi a képek tárolását

8. Melyik igaz a NewSQL adatbázisokra?

  • ( ) Nem támogatják az SQL nyelvet
  • (x) ACID tulajdonságokat nyújtanak skálázható módon
  • ( ) Strukturálatlan adatokat tárolnak kizárólag

9. Melyik nem vektor adatbázis?

  • (x) MySQL
  • ( ) FAISS
  • ( ) Milvus

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

  • (x) Eventually consistent – idővel konzisztenssé válik az adat
  • ( ) A lekérdezések mindig pontos, teljes adatot adnak vissza
  • ( ) Az adatok nem igényelnek tárolást
tanszek/oktatas/muszaki_informatika/adattarolas_adatbazisok.txt · Last modified: 2025/05/08 07:01 by knehez