Nap, mint nap rengeteg adattal dolgozunk, amiket általában valamilyen adatbázisban tárolnak a programjaink.
De mi is egy adatbázis? Erre a kérdésre számos jó válasz létezik, mivel igényektől függően igen eltérőek lehetnek az adatbázisok. Közös jellemzőjük azonban az, hogy azonos jellemzőkkel rendelkező, strukturált adatokat tárolnak. Ezen adatok kezeléséhez, módosításához, könnyű visszakereshetőségéhez biztosít funkciókat az adatbázis-kezelő szoftver.
Adatbázis-kezelő szoftverből igen sokféle létezik, mivel ezen szoftverek történelme nagyjából egyidős a számítógépek elterjedésével.
Az adatbázis-kezelés nagyjából az 1960-as években jelent meg. Ekkor még főként egyedi programokat alkalmaztak, amik természetesen egymással nem voltak kompatibilisek. Az egymással való kompatibilitás és hordozhatóság elve viszonylag hamar megjelent, miután ezek a rendszerek terjedni kezdtek.
Annak ellenére, hogy az összes adatbázis-kezelő rendszer különböző módon tárolja az adatokat mára elmondható, hogy a bennük tárolt adatok könnyebben hordozhatóak a különböző rendszerek között, mint az 1960-as években. A könnyebben jelző szándékos a könnyű helyett, mivel egy adatbázis költöztetése, átalakítása sosem volt egyszerű feladat a rendszerek felépítéséből adódóan.
Ebből adódóan egy adatbázis létrehozását és megalkotását sosem szabad elkapkodni. Rendesen meg kell tervezni, többször át kell gondolni, mielőtt tényleges implementációra kerülne sor.
Ennyi bevezetés után most már érdemes tisztáznunk, hogy mit is jelöl az adat fogalom. Igen nehezen definiálható, mivel jelentése sokszor kontextusfüggő. Adatbázis-kezelés esetén azonban így szoktuk definiálni, az objektumorientáltság eszközeivel: az adat egy objektum egy meghatározott változójának értéke. Meghatározásához szükséges, hogy melyik objektumnak melyik változójáról beszélünk.
Ebből adódóan az adatbázis-kezelő rendszer, angol mozaikszóval DBMS (Database Management System) adott formátum és rendszer szerint tárolja a fentebb definiált adatainkat.
Az adatoknak három fő típusa létezik a DBMS-ek kontextusában. Ezek:
-
Elemi
Szokás atomi adatnak is definiálni. Lényeges pont, hogy nem összetett. Példák: szöveg, szám, dátum, logikai érték
-
Összetett
Egyszerű adatokból képezhetőek, több változata is létezik:
- Halmaz – Matematikai halmaz alapfogalomra alapozva egyforma adatok halmazaNem definiált
- Lista – Egyforma adatok rendezett sorozata
- Struktúra – Különféle adatok rendezett sorozata. Tartalmazhat egyszerű és további összetett adatokat is.
-
Nem definiált
Speciális adat. A rendszerben azt jelöli, hogy a kért adat hiányzik, vagy nincs definiálva.
Egy DBMS-nek több feladata is van azon kívül, hogy az adatokat valamilyen logikával tárolja. Egy tipikus DBMS főbb feladatai: adatstruktúra definiálása, adatok aktualizálása, lekérdezési lehetőségek, fejlesztői környezet biztosítása.
Jelenleg két fő megközelítés létezik adatbázis kezelésben: a relációs és az objektumorientált. A relációs modellre épülő rendszerek az 1970-es évek óta vannak velünk. A relációs modell elsősorban egy matematikai modell, ami viszonylag egyszerű és rugalmas kezelhetőséget biztosít, de a legnagyobb hátránya, hogy rögzített sémát használ vele az adatbázis. Ez nem probléma, ha jól van megtervezve az adatbázis és később nem kell módosítani a sémát. A séma módosítása is megoldott művelet, azonban ha több tíz millió adatot tartalmaz a rendszer, akkor igencsak erőforrás- és időigényes művelet. Az ilyen rendszerekhez került kidolgozásra kezelő nyelvnek az SQL, ami a Standard Query Language szavak rövidítése.
Az SQL önmagában nem programozási nyelv. Adatokon elvégezhető műveleteket definiál. Léteznek olyan SQL variánsok is, amelyek már programozási nyelvnek tekinthetőek. Az ilyen nyelvek jellemzője, hogy nagymértékben függenek a kezelő rendszertől.
Az adatok tárolására másik módszer gyűjtőfögalma a NoSQL. Ezen adatbázisok az SQL szerverektől eltérően, JSON vagy valami más szerializációs formában képesek tárolni objektumokat.
A NoSQL adatbázisok előnye, hogy általában jobban megfelelnek a strukturált, félig strukturált és strukturálatlan adatok egyetlen adatbázisban való tárolására és modellezésére, illetve gyakran olyan formában tárolják az adatokat, amelyek hasonlóak az alkalmazásokban használt objektumokhoz, így csökken az adattárolási formából a kódban felvett adatformátumba való fordítás szükségessége.
Cloud és webes környezetben további előnyük, hogy általában gyorsabban írhatóak, mint egy SQL megoldás, ezáltal jobban skálázhatóak, de nem ingyen. A gyors írás árát a kereshetőségben fizetjük meg. Egy NoSQL megoldás nehezebben indexelhető, kereshető, mint egy SQL megoldás.
A NoSQL előnyei nem jelentik azt, hogy a hagyományos SQL megoldásoknak leáldozott. Az utóbbi években rengeteg SQL szerverbe bekerült a lehetősége a NoSQL tárolásnak is, illetve a népszerűbb ORM megoldások lehetővé teszik JSON objektumok szerializálását/tárolását SQL megoldások felett, ezáltal kombinálva a két paradigma előnyeit.
Az alábbi ábrán egy tipikus relációs adatbázis-kezelő rendszer egyszerűsített felépítése látható:
Felhasználói felület
Az adatbázis-kezelő rendszer azon része, amit a felhasználó lát. Ez teremt kapcsolatot a DBMS és a felhasználó között. Lehet grafikus, vagy parancssoros. Általában parancssoros felület. Ennek az oka az, hogy ha az adatbázis hálózaton keresztül is elérhető, akkor könnyebb parancsokat átvinni, mint egy teljes grafikus felületet. Természetesen a parancsos működés fölé könnyen építhető egy grafikus felület is.
Lekérdezés feldolgozó
Az SQL nyelv feldolgozó felülete, ez a réteg dolgozza fel a kéréseket, valamint optimalizálja a kérés későbbi végrehajtását. Igyekszik minimalizálni a későbbiekben szükséges olvasások és írások számát. Ennek az oka egyszerű: a processzor 10x-20x több adatot képes feldolgozni, mint a mögötte álló háttértár. A DBMS-ek esetén minden esetben a háttértár elérési sebessége a szűk keresztmetszet.
Tranzakció kezelő
Az adatbázis biztonsági mechanizmusa. Ez felel az adatok biztonságos tárolásáért, miközben műveleteket végzünk rajtuk. Ezeket az úgynevezett ACID elvek segítségével valósítják meg. Az ACID mozaikszó az Atomicity (atomicitás), Consistency (konzisztencia), Isolation (izoláció), és Durability (tartósság) kifejezésekből jön.
-
Atomicitás
Megköveteli, hogy több műveletet atomi műveletként lehessen végrehajtani, azaz vagy az összes művelet sikeresen végrehajtódik, vagy egyik sem.
-
Konzisztencia
A konzisztencia biztosítja, hogy az adatok a tranzakció előtti érvényes állapotból ismét egy érvényes állapotba kerüljenek. Minden erre vonatkozó szabálynak (hivatkozási integritás, adatbázis triggerek, stb) érvényesülnie kell.
-
Izoláció
A tranzakciók izolációja azt biztosítja, hogy az egy időben zajló tranzakciók olyan állapothoz vezetnek, mint amilyet sorban végrehajtott tranzakciók érnének el. Egy végrehajtás alatt álló tranzakció hatásai nem láthatóak a többi tranzakcióból.
-
Tartósság
A végrehajtott tranzakciók változtatásait egy tartós adattárolón kell tárolni, hogy a szoftver vagy a hardver meghibásodása, áramszünet vagy egyéb hiba esetén is megmaradjon.
Adatbázis
A rendszer által használt formátum, amiben az adatokat tárolja nekünk. Ez maga a tényleges fájl, vagy fájlok (rendszertől függően), amik az adatokat tárolják.
Tárkezelő
Fájlkezelő rutinok, amelyek a használt adatbázis formátum lemezre rögzítéséért felelnek. Komoly rendszerek esetén nem ritka, hogy fájl elérés kezelésére egyedi rutinokat használnak, megkerülve az operációs rendszer magas szintű fájlkezelő műveleteit. Általában ezt a jobb optimalizálás és gyorsabb kezelés érdekében teszik.
Nagyon komoly adatbázis gyártók, mint például az Oracle saját Linux disztribúciót is szállít az adatkezelő rendszerei mellé. A saját Linux disztribúciójuk egyedi, a DBMS működését gyorsító optimalizációkkal és diagnosztikai eszközökkel van felszerelve.