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 4 Relációs adatbázis-kezelők Eredetileg üzleti célú alkalmazások háttereként Adatok relációs adatszerkezetben (RDBMS) Adatorientált lekérdező nyelv: SQL Elterjedt termékek: MySQL PostgreSQL Oracle MS SQL Server (2008 R2) IBM DB2 SyBase SQL 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 6 Házi feladat Relációs adatszerkezet Á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 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
7 8 Relációs algebra táblák sémával Relációs algebra táblák szorzata Vezetéknév Keresztnév Életkor 1 Kovács 2 Szabó 1 Géza 2 Béla 1 42 2 57 ID Szerző Cím 1 1 Könyv 1 2 1 Könyv 2 3 2 Könyv 3 Descartesszorzat R1 Vezetéknév Keresztnév Életkor Szelekció Projekció R2 Vezetéknév Keresztnév 1 Kovács Géza 2 Szabó Béla Reláció Vezetéknév Keresztnév Cím Kovács Géza Könyv 1 Kovács Géza Könyv 2 Szabó Béla Könyv 3 9 10 Táblák A tábla az adatbázis alapeleme (table) Séma: oszlopok (schema / column) Előre definiált Adattípus: szám, szöveg stb. Méret; szövegnél, bináris adatnál Adat: sorok (row) Tetszőleges számú Azonos formátumú Megkötések (constraints) Elsődleges kulcs (primary key) Táblán belül egyedi Egy vagy több oszlop kombinációja Idegen kulcs (foreign key) Másik táblában levő elsődleges kulcsra mutat Könyvek ID Szerző Cím 1 1 Könyv 1 2 1 Könyv 2 3 2 Könyv 3 11 12 Elsődleges kulcs, idegen kulcs ID int Vezetéknév nchar(50) Keresztnév nchar(50) Könyvek ID int SzerzőID int Cím nchar(250) 2
13 14 Az adatbázisok alapproblémái A háttértár mindig jóval lassabb, mint a központi memória és a CPU Indexelés A háttértár szekvenciálisan sokkal gyorsabban olvasható, mint random módon 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 Adatok tárolása az SQL szerverben 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. Fizikai egységek: 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 16 Lapok 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 Formátum a memóriában és a lemezen azonos Memória: page pool Több fajtája van Tábla adat Index, stb. (ld. később) Adatok logikai szervezése 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. Változó méretű típusok varchar(50), varbinary(250) stb. LOB, BLOB (binary large object) text, ntext, varbinary(max), image stb. maximum 2 GB 17 18 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 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
19 20 B fa és a B+ fa Sorba rendezett adatok tárolására Csomópont: d számú adatsor d+1 pointer A pointerek további csomópontokra mutatnak Ha egy csomópont betelik, akkor ketté osztjuk Elem megtalálása: o(log d n) A fa rekurzív algoritmussal az elemek sorrendjének megfelelően járható be Tábla klaszterezett indexszel A tábla B+ faként van tárolva A fa egy szintje egy lap Két fajta lapot igényel Index lap Sorokat tároló lap A lapokon pointerek a soron következő/előző lapokra A szekvenciális olvasást gyorsítja B+ fa: a közbenső szinteken csak a kulcsokat tároljuk, az adatokat csak a legalsó szinten 21 22 Mire jó a klaszterezett index Egy adott kulcsú sor gyorsan megtalálható SELECT * FROM t WHERE ID = 12 Egy adott kulcs tartomány gyorsan megtalálható SELECT * FROM t WHERE ID BETWEEN 12 AND 36 A tábla szekvenciálisan, a kulcs szerinti sorrendben (vagy visszafele) olvasható Ehhez nem kell újra sorba rendezni! SELECT * FROM t ORDER BY ID Speciális lapok Lap mérete: 8 kb Adat számára hasznos: 8000 bájt in-page adatok Túllógó adatok tárolására: row overflow page out-of-page adatok BLOB típusú adatokra: BLOB page varbinary(max), nvarchar(max) etc. 23 24 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 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 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 4
25 Ö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ó 5