2012.03.05.
1
2
Adatbáziskezelı-szerver • Általában dedikált szerver ▫ Optimalizált háttértár konfiguráció
• Csak OS + adatbázis-kezelő szoftver ▫ Teljes memória az adatbázisoké
• Fő funkciók: ▫ Adatok rendezett tárolása a háttértárolón ▫ Lekérdezések (query-k) gyors végrehajtása Optimalizált memória, I/O és processzor használat Adatok indexelve
▫ Adatmódosító műveletek ▫ Tranzakciók kezelése
Hosszú, konkurens műveletek atomizált végrehajtása
▫ Adatok konzisztenciájának megőrzése ▫ Adatbiztonsági funkciók
3
Relációs adatbázis-kezelık • • • •
SQL • • • • • • • • • • • •
Eredetileg üzleti célú alkalmazások háttereként Adatok relációs adatszerkezetben (RDBMS) Adatorientált lekérdező nyelv: SQL Elterjedt termékek: ▫ ▫ ▫ ▫ ▫ ▫
4
MySQL PostgreSQL Oracle MS SQL Server (2008 R2) IBM DB2 SyBase
DATABASE TABLE VIEW SELECT TOP FROM INNER JOIN CROSS JOIN WHERE GROUP BY HAVING ORDER BY
• • • • • • • • • • • • • •
INSERT, UPDATE, DELETE OUTER JOIN UNION, EXCEPT STORED PROCEDURE INDEX CLUSTERED INDEX READ UNCOMMITED SERIALIZABLE CURSOR FUNCTION CROSS APPLY FILE GROUP PARTITION FUNCTION JOIN HINT
5
Házi feladat • Átnézni az SQL nyelvről korábban tanultakat • Segítség: ▫ http://skyserver.sdss.org ▫ http://nve.elte.hu ▫ SQL Server Books Online http://msdn.microsoft.com/en-us/library/ms130214.aspx
6
Relációs adatszerkezet • Halmaz ▫ Egy tábla egyetlen oszlopa ▫ Több oszlop együtt (tuple)
• Műveletek: ▫ ▫ ▫ ▫
Descartes-szorzat Kiválasztás (szelekció) Vetítés (projekció) Unió, különbség
• Séma: Megkötés, hogy milyen halmazok milyen sorrendben szorozhatók össze • Reláció: Descartes-szorzat részhalmaza
1
2012.03.05.
7
Relációs algebra – táblák sémával Vezetéknév
Keresztnév
8
Relációs algebra – táblák szorzata
Életkor
1
Kovács
1
Géza
1
42
ID
Vezetéknév
Keresztnév
Életkor
ID
Szerző
Cím
2
Szabó
2
Béla
2
57
1
Kovács
Géza
42
1
1
Könyv 1
57
2
1
Könyv 2
3
2
Könyv 3
2
Descartesszorzat
Szabó
Béla
Szelekció R1
Vezetéknév
Keresztnév
Életkor
1
Kovács
Géza
42
2
Szabó
Béla
57
Reláció
Projekció
Vezetéknév
Keresztnév
Cím
Kovács
Géza
Könyv 1
R2
Vezetéknév
Keresztnév
Kovács
Géza
Könyv 2
1
Kovács
Géza
Szabó
Béla
Könyv 3
2
Szabó
Béla
9
Táblák
10
Megkötések (constraints) Emberek ID
Vezetéknév
Keresztnév
Életkor
1
Kovács
Géza
42
2
Szabó
Béla
57
• Elsődleges kulcs (primary key) ▫ Táblán belül egyedi ▫ Egy vagy több oszlop kombinációja
• A tábla az adatbázis alapeleme (table) • Séma: oszlopok (schema / column)
• Idegen kulcs (foreign key) ▫ Másik táblában levő elsődleges kulcsra mutat
▫ Előre definiált ▫ Adattípus: szám, szöveg stb. ▫ Méret; szövegnél, bináris adatnál
Könyvek
Emberek
• Adat: sorok (row) ▫ Tetszőleges számú ▫ Azonos formátumú
11
ID
Vezetéknév
Keresztnév
Életkor
ID
Szerző
Cím
1
Kovács
Géza
42
1
1
Könyv 1
2
Szabó
Béla
57
2
1
Könyv 2
3
2
Könyv 3
12
Elsıdleges kulcs, idegen kulcs Emberek
Könyvek
ID
int
ID
Vezetéknév
nchar(50)
SzerzőID
int int
Keresztnév
nchar(50)
Cím
nchar(250)
2
2012.03.05.
13
Az adatbázisok alapproblémái
14
Adatok tárolása az SQL szerverben
• A háttértár mindig jóval lassabb, mint a központi memória és a CPU
• Miért fontos ez? ▫ Az adatok fizikai szervezését meg kell érteni ahhoz, hogy lássuk hogyan kell a háttértárat és az adatbázist optimálisan konfigurálni. ▫ Sokszoros sebességnövekedés érhető el a naiv adatbázis szervezéshez képest.
▫ Indexelés
• A háttértár szekvenciálisan sokkal gyorsabban olvasható, mint random módon
• Fizikai egységek: ▫ ▫ ▫ ▫ ▫ ▫
▫ Sorok lapokba (page) szervezése ▫ Lapok megfelelő sorrendben tárolása
• A memória mérete mindig sokkal kisebb, mint az adatbázis mérete ▫ Ügyes algoritmusok ▫ Ne kelljen transzformálni a memória és a diszken levő formátum között
adatbázis, azon belül a file group, azon belül a file, azon belül az extent és azon belül a page (lap) tranzakciós napló (ld. később)
• A felhasználó a fájl szintig rendelkezik explicit beleszólással: ▫ Melyik könyvtárban legyen a fájl a lemezen ▫ Mekkora legyen a fájl ▫ Nőhessen-e automatikusan, ha új adat jön
15
Lapok
16
Adatok logikai szervezése
• Lap (page): tárolás alapegysége • Fix méret: 8kB • 8 lap = 1 extent (64kB) • Csak teljes extent írható/olvasható a lemezre/ről
• Az adattárolás logikai egysége a tábla, azon belül a sor • Adattípusok ▫ Fix méretű adattípusok int, bigint, real, float, char(20), binary(250) stb.
• Formátum a memóriában és a lemezen azonos • Memória: page pool
▫ Változó méretű típusok
• Több fajtája van
▫ LOB, BLOB (binary large object)
varchar(50), varbinary(250) stb. text, ntext, varbinary(max), image stb. maximum 2 GB
▫ Tábla adat ▫ Index, stb. (ld. később)
17
Heap tábla • Sorok nem meghatározott sorrendben tárolódnak • Sorok lapokon folytonosan • Lista a lapokról • Hátrány: ▫ Kereséskor az egész táblát végig kell olvasni
• Előny: ▫ Új sor beírása könnyű: az utolsó lap végére
18
Elsıdleges kulcs • Oszlop vagy oszlopok kombinációja • Egyedi • A rendezés jól definiált ▫ Sorrend oszloponként megadható ▫ Bármely kulcsot bármelyikkel egyértelműen össze tudunk hasonlítani: < > =
• Legegyszerűbb kulcs: egyedi integer azonosító
3
2012.03.05.
19
B fa és a B+ fa
20
Tábla klaszterezett indexszel
• Sorba rendezett adatok tárolására • Csomópont:
• A tábla B+ faként van tárolva • A fa egy szintje ≡ egy lap • Két fajta lapot igényel
▫ d számú adatsor ▫ d+1 pointer
▫ Index lap ▫ Sorokat tároló lap
• A pointerek további csomópontokra mutatnak
• A lapokon pointerek a soron következő/előző lapokra ▫ A szekvenciális olvasást gyorsítja
• Ha egy csomópont betelik, akkor ketté osztjuk • Elem megtalálása: o(logd n) • A fa rekurzív algoritmussal az elemek sorrendjének megfelelően járható be • B+ fa: a közbenső szinteken csak a kulcsokat tároljuk, az adatokat csak a legalsó szinten
21
Mire jó a klaszterezett index
22
Speciális lapok
• Egy adott kulcsú sor gyorsan megtalálható
• Lap mérete: 8 kB • Adat számára hasznos: 8000 bájt
▫ SELECT * FROM t WHERE ID = 12
▫ in-page adatok
• Egy adott kulcs tartomány gyorsan megtalálható ▫ SELECT * FROM t WHERE ID BETWEEN 12 AND 36
• Túllógó adatok tárolására: ▫ row overflow page ▫ out-of-page adatok
• A tábla szekvenciálisan, a kulcs szerinti sorrendben (vagy visszafele) olvasható ▫ Ehhez nem kell újra sorba rendezni! ▫ SELECT * FROM t ORDER BY ID
• BLOB típusú adatokra: BLOB page ▫ varbinary(max), nvarchar(max) etc.
23
File group • Több fájl gyűjteménye ▫ Lehetnek különböző méretűek ▫ Lehetnek külön lemezen is akár, sőt ▫ Párhuzamosítás: 1 programszál / fájl
• A táblák file grouphoz vannak rendelve ▫ Nem egyedi fájlhoz ▫ Fájlok feltöltése egyenletes a groupon belül
• Egy file group akárhány táblát, indexet tartalmazhat ▫ A táblák lapjai ekkor keveredhetnek
24
Particionált táblák • A tábla kulcsértékein tartományok definiálhatók • Egy adott tartomány: partíció • A partíciók külön-külön rendelhetők file grouphoz • A partíciók ki/be kapcsolhatók • Adatbetöltésnél lesz fontos
• Optimális eset: egyetlen tábla lapjai szekvenciálisan ▫ A BLOB oszlopok külön groupba tehetők ▫ Az indexek (ld. később) külön groupba tehetők
4
2012.03.05.
25
26
27
28
Összefoglalás • Amit ma tanultunk az a klasszikus, sor alapú SQL adatbázisok adattárolási modellje • Tábla ▫ heap vagy klaszterezett index ▫ file group-hoz rendelve
• Alapegység: lap (page) • Alapvető adatstruktúra: B+ fa • Fájl, file group, partíció
Nem klaszterezett indexek
Nem klaszterezett index
• Egy táblán csak egy klaszterezett index lehet
Klaszterezett index
Nem klaszterezett index
• Ha más oszlop szerint is keresni akarunk, nem klaszterezett indexeket használunk ▫ ▫ ▫ ▫ ▫
A tábla mellett megjelenő adatstruktúra Egy vagy több oszlopra építhető Előírt rendezési sorrenddel Csak az indexelt oszlopok értékeit tartalmazza Pointer az adatokra
▫ Megkövetelhető a kulcsok egyedisége
29
Indexek tulajdonságai • Előnyök: ▫ Adott oszlopok szerinti keresés gyors ▫ Az indexelt adatok az előírt sorrendben, szekvenciálisan olvashatóak
30
A következı órán… • Milyen fizikai műveleteket végez a szerver a queryk futtatásakor?
• Hátrányok: ▫ Több tárhelyet igényel (az indexelt oszlopok még egyszer tárolódnak) ▫ Beszúráskor, módosításkor, törléskor frissíteni kell
• Túl kevés index ▫ Kevés optimalizálási lehetőség ▫ A legtöbb query nem lesz optimális ▫ Tranzakciós problémák (dead-lock)
• Mi az egyes műveletek költsége? • Mit jelent a queryoptimalizálás? • Hogyan lehet queryt optimalizálni?
• Túl sok index ▫ Sok tárhelyet igényel ▫ Sok idő felépíteni az indexeket ▫ Az írási műveletek nagyon drágák lesznek
• Hogyan kell indexeket tervezni?
5