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
