tanszek:oktatas:muszaki_informatika:adattarolas_adatbazisok
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
tanszek:oktatas:muszaki_informatika:adattarolas_adatbazisok [2025/05/07 06:49] – [1. Bevezetés] knehez | tanszek:oktatas:muszaki_informatika:adattarolas_adatbazisok [2025/05/08 07:01] (current) – [D – Durability (Tartósság)] knehez | ||
---|---|---|---|
Line 1: | Line 1: | ||
+ | ~~NOTOC~~ | ||
Régi anyag: https:// | Régi anyag: https:// | ||
Line 11: | Line 12: | ||
* Az adatok szervezett tárolása lehetővé teszi azok gyors visszakeresését és elemzését. | * 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). | * 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**. | + | * 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, |
* Az adatok rendszeres **mentése és visszaállítása** egyszerűbbé válik. | * Az adatok rendszeres **mentése és visszaállítása** egyszerűbbé válik. | ||
* Automatizált folyamatokhoz (pl. webalkalmazások, | * Automatizált folyamatokhoz (pl. webalkalmazások, | ||
Line 31: | Line 32: | ||
* Példa: SQL adatbázisok, | * Példa: SQL adatbázisok, | ||
* Jellemző: gyors kereshetőség, | * Jellemző: gyors kereshetőség, | ||
- | | + | |
* **Félstrukturált adat**: | * **Félstrukturált adat**: | ||
* Nincs fix sémája, de tartalmaz címkéket vagy metaadatokat. | * Nincs fix sémája, de tartalmaz címkéket vagy metaadatokat. | ||
Line 45: | Line 46: | ||
===== 2. Relációs adatbázisok (RDBMS) ===== | ===== 2. Relációs adatbázisok (RDBMS) ===== | ||
- | * **Történet**: | + | |
- | | + | 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, |
- | * SQL szabványosítása (1970-es, 1980-as évek) | + | |
- | * **Jellemzők**: | + | ==== Történet |
- | | + | |
- | * Szigorú séma (schema-on-write) | + | * A modell |
- | * ACID tranzakciók: Atomicity, Consistency, | + | * A ’70-es, ’80-as években megjelentek az első RDBMS rendszerek: IBM System R, Ingres, Oracle. |
- | * **Példák**: MySQL, PostgreSQL, Oracle, Microsoft SQL Server | + | * A **SQL (Structured Query Language)** nyelv szabványosítása nagyban hozzájárult az elterjedéséhez. |
- | * **Előnyök**: Adatintegritás, stabilitás | + | |
- | * **Hátrányok**: | + | ==== Jellemzők |
+ | | ||
+ | * **Szigorú séma**: minden táblának előre meghatározott szerkezete van (mezőtípusok, | ||
+ | * **Kapcsolatok**: | ||
+ | * **ACID tulajdonságok**: Az ACID tulajdonságok biztosítják, | ||
+ | |||
+ | **Mit jelent az ACID?** | ||
+ | |||
+ | ^ Betű ^ Jelentés angolul ^ Jelentés magyarul | ||
+ | | A | Atomicity | ||
+ | | C | Consistency | ||
+ | | I | Isolation | ||
+ | | D | Durability | ||
+ | **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), | ||
+ | |||
+ | * Példa: Ha egy banki utalás során először levonjuk a pénzt A számláról, | ||
+ | |||
+ | **C – Consistency | ||
+ | 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, | ||
+ | |||
+ | * 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 ==== | ||
+ | | ||
+ | * **Lekérdezhetőség**: a SQL nyelv rendkívül erős és kifejező eszköztárat ad. | ||
+ | * **Stabilitás és érettség**: | ||
+ | * **Többfelhasználós működé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**: | ||
+ | * **Strukturálatlan | ||
+ | |||
+ | ==== Népszerű relációs adatbázis-kezelő rendszerek (RDBMS-ek) ==== | ||
+ | * **MySQL** – nyílt forráskódú, | ||
+ | * **PostgreSQL** – fejlett funkciók, szabványos SQL támogatás, | ||
+ | * **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, | ||
+ | |||
+ | ==== 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 | ||
+ | |||
+ | SQL lekérdezés: | ||
+ | <code sql> | ||
+ | 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 ===== | ===== 3. NoSQL adatbázisok ===== | ||
- | * **Megjelenés oka**: | ||
- | * Big Data, Web 2.0, gyorsan változó struktúrák | ||
- | * Horizontális skálázás igénye | ||
- | * **Típusai**: | ||
- | * Dokumentum-orientált (pl. MongoDB) | ||
- | * Kulcs-érték tárolók (pl. Redis, DynamoDB) | ||
- | * Oszlop-orientált (pl. Cassandra) | ||
- | * Gráf adatbázisok (pl. Neo4j) | ||
- | * **Jellemzők**: | ||
- | * Séma nélküli (schema-on-read) | ||
- | * BASE modell: Basically Available, Soft state, Eventually consistent | ||
- | * Nagy teljesítmény, | ||
+ | A NoSQL adatbázisok a relációs modellek alternatívájaként jelentek meg, amikor az internetes alkalmazások, | ||
+ | |||
+ | ==== 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ó**: | ||
+ | * **Nagy teljesítmény**: | ||
+ | |||
+ | ==== 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**, | ||
+ | |||
+ | * **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**, | ||
+ | |||
+ | * **Gráf adatbázisok** | ||
+ | * Adatok és azok kapcsolatai gráfként ábrázolva (csomópontok és élek). | ||
+ | * Nagyon hasznos hálózati elemzésekhez, | ||
+ | * Példa: **Neo4j**, ArangoDB | ||
+ | |||
+ | ==== Előnyök ==== | ||
+ | * Nagy teljesítmény, | ||
+ | * 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ó, | ||
+ | |||
+ | ==== 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: | ||
+ | <code json> | ||
+ | { | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | Egy lekérdezés: | ||
+ | <code javascript> | ||
+ | db.felhasznalok.find({ " | ||
+ | </ | ||
===== 4. NewSQL adatbázisok ===== | ===== 4. NewSQL adatbázisok ===== | ||
- | | + | |
- | * **Jellemzők**: | + | A NewSQL adatbázisok a relációs adatbázisok továbbfejlesztett változatai, |
- | * ACID + elosztott | + | |
- | * **Példák**: | + | ==== Miért jöttek létre? ==== |
- | * Google Spanner | + | * A vállalatok továbbra is igénylik a **strukturált, |
- | * CockroachDB | + | * Ugyanakkor szükség van a **modern skálázhatóságra**, |
- | * VoltDB | + | * 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**: | ||
+ | * **Magas rendelkezésre állás**: beépített replikáció, | ||
+ | |||
+ | ==== 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, | ||
+ | * Még viszonylag fiatal technológia – kisebb ökoszisztéma, | ||
+ | * Néhány megoldás zárt forráskódú, | ||
+ | |||
+ | ==== Példák ==== | ||
+ | * **Google Spanner** | ||
+ | | ||
+ | * Világszintű szinkronizációval garantálja a konzisztenciát. | ||
+ | |||
+ | * **CockroachDB** | ||
+ | | ||
+ | * 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 ==== | ||
+ | <code sql> | ||
+ | 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 ' | ||
+ | </ | ||
+ | |||
+ | 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 ===== | ===== 5. Vektor adatbázisok ===== | ||
- | | + | |
- | * Gépi tanulás, jelentés szerinti keresés | + | A vektor adatbázisok új generációs adatbázis-rendszerek, |
- | * Embeddingek | + | |
- | * **Működés**: | + | ==== Miért van rájuk szükség? ==== |
- | * Objektum → Vektor | + | |
- | * Közelségi | + | |
- | * **Példák**: | + | |
- | | + | |
- | * Milvus | + | ==== Hogyan működik? ==== |
- | * Weaviate | + | |
- | * Pinecone | + | * Az így kapott vektorokat egy vektoradatbázis tárolja. |
- | | + | |
- | * **Alkalmazások**: | + | * A hasonlóságot általában **koszinusz-hasonlóság**, |
- | * Dokumentumkeresés | + | |
- | * Képkeresés | + | ==== Jellemzők ==== |
- | * Ajánlórendszerek | + | * Nincs klasszikus SQL – speciális API vagy Python/REST kliensek használatosak. |
+ | * Beépített **indexelési módszerek** a gyors kereséshez | ||
+ | * Gyors és hatékony **nagy dimenziójú adatok** keresése. | ||
+ | |||
+ | ==== Előnyök ==== | ||
+ | * Jelentésalapú | ||
+ | * Ideális LLM-alapú rendszerekhez, | ||
+ | * 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? | ||
+ | * A pontosság függ az embedding minőségétől és a választott metrikától | ||
+ | |||
+ | ==== Népszerű vektor adatbázisok ==== | ||
+ | | ||
+ | * **Milvus** – nyílt forráskódú, | ||
+ | * **Weaviate** – REST API + GraphQL támogatás, | ||
+ | * **Pinecone** – felhőalapú, | ||
+ | * **Chroma** – egyszerű integráció LangChain/ | ||
+ | |||
+ | ==== Példa: vektoros keresés szövegek között ==== | ||
+ | 1. Szöveg → embedding: `" | ||
+ | 2. A vektoradatbázisban tárolt több ezer dokumentum embeddingje közül kiválasztjuk a legközelebbit: | ||
+ | <code python> | ||
+ | query_vector = model.encode(" | ||
+ | results = vector_db.search(query_vector, | ||
+ | </ | ||
+ | |||
+ | 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 ===== | ===== 6. Tendenciák és jövőkép ===== | ||
Line 103: | Line 297: | ||
===== 7. Összefoglaló táblázat ===== | ===== 7. Összefoglaló táblázat ===== | ||
- | ^ Típus | ||
- | | Relációs | ||
- | | NoSQL | MongoDB | ||
- | | NewSQL | ||
- | | Vektor | ||
- | ===== 8. Demó ===== | + | ^ Típus |
- | | + | | Relációs (RDBMS) | MySQL, PostgreSQL, Oracle | Stabil, jól definiált séma, SQL támogatás, |
- | | + | | NoSQL | MongoDB, Redis, Cassandra, Neo4j | Rugalmas séma, jól skálázható, |
+ | | NewSQL | ||
+ | | Vektor | ||
+ | |||
+ | |||
+ | ===== 8. Példa | ||
+ | |||
+ | Az alábbi példák bemutatják, | ||
+ | |||
+ | ==== 1. Relációs adatbázis: | ||
+ | Tábla létrehozása: | ||
+ | <code sql> | ||
+ | CREATE TABLE diakok ( | ||
+ | id SERIAL PRIMARY KEY, | ||
+ | nev TEXT NOT NULL, | ||
+ | szuletesi_ev INTEGER | ||
+ | ); | ||
+ | </ | ||
+ | |||
+ | Adatok beszúrása: | ||
+ | <code sql> | ||
+ | INSERT INTO diakok (nev, szuletesi_ev) | ||
+ | VALUES ('Kiss Anna', 2002), ('Nagy Péter', | ||
+ | </ | ||
+ | |||
+ | Lekérdezés: | ||
+ | <code sql> | ||
+ | SELECT nev FROM diakok WHERE szuletesi_ev < 2001; | ||
+ | </ | ||
+ | |||
+ | ==== 2. NoSQL példa: | ||
+ | Dokumentum beillesztése: | ||
+ | <code javascript> | ||
+ | db.diakok.insertOne({ | ||
+ | | ||
+ | szuletesi_ev: | ||
+ | }); | ||
+ | </ | ||
+ | |||
+ | Lekérdezés: | ||
+ | <code javascript> | ||
+ | db.diakok.find({ szuletesi_ev: | ||
+ | </ | ||
+ | |||
+ | ==== 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, | ||
+ | |||
+ | Embedding előállítás (példa): | ||
+ | <code python> | ||
+ | from sentence_transformers import SentenceTransformer | ||
+ | import faiss | ||
+ | import numpy as np | ||
+ | |||
+ | model = SentenceTransformer(' | ||
+ | dokumentumok = ["A kutya ugat.", | ||
+ | |||
+ | vektorok = model.encode(dokumentumok) | ||
+ | index = faiss.IndexFlatL2(vektorok.shape[1]) | ||
+ | index.add(np.array(vektorok)) | ||
+ | </ | ||
+ | |||
+ | Keresés | ||
+ | <code python> | ||
+ | kerdes = " | ||
+ | kerdes_vektor = model.encode([kerdes]) | ||
+ | _, eredmenyek = index.search(np.array(kerdes_vektor), | ||
+ | |||
+ | print(" | ||
+ | </ | ||
+ | |||
+ | Eredmény: | ||
+ | '' | ||
+ | |||
+ | ===== 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 | ||
+ | * (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, | ||
+ | * ( ) 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.1746600548.txt.gz · Last modified: 2025/05/07 06:49 by knehez