Az adatbázisok elsődleges feladata hogy megbízhatóan tárolja az adatokat és kereshetővé tegye. Nagyon sok féle adatbázis van, fontos hogy mindig a feladathoz megfelelőt válasszuk. A modern webes rendszerek általában több adatbázist is használnak párhuzamosan, akár ugyanazon adatok tárolására.

A kiszolgált kérések típusa szerint 2 nagy csoportja van az adatbázisoknak:

OLTP (Online transaction processing)

Nagy mennyisegű, gyors, egyszerű kéréseket szolgálnak ki, relativ kevés adaton. Például webáruházaknál a rendelés feladása, regisztráció elmentése, kosár lekérdezése.

OLAP (Online analytical processing)

Kis mennyiségű, komplex, sokáig tartó kéréseket szolgálnak ki, nagy mennyiségű adaton. Általában adatelemzésre, statisztikákra használjuk.

Ezek nem kizárólagos csoportok, sok adatbázis támogatja ay OLTP és az OLAP műveletek is.

Milyen tipusu adatokat tudunk tarolni?

A különböző típusú adatokra, vannak specializált adatbázisok, amik hatékonyan tudnak dolgozni az adott adattípussal.

Kulcs-érték tárolók

Egyszerűen használható adatbázisok, amik általában kulcs + érték párokat tudnak tárolni. A kulcs alapján lehet lekérdezni az adatokat. Pl.: gyorsítótár

Két másik esetben is gyakran előfordul:

Példák

Relációs adatbázisok

Előre definiált, összekapcsolható séma szerint tárolja az adatokat. Általában SQL nyelven lehet programozni. Ezek a leggyakrabban használt adatbázisok a webes rendszerekben, szinte mindig jelen van.

Példák

Dokumentum-orientált

Dokumentumokban tárolja az adatokat, előre definiált séma nélkül. A dokumentumok kulcs-érték párokból álló adatok. Általában ugyan arra a célra használjuk mint a relációs adatbázisokat. Régebben a relációs adatbázisok nem támogatták ilyen módon a dokumentumok tárolását, de azóta felzárkóztak és a legtöbb felhasználási módra előnyösebbek a relációs adatbázisok.

Példák

Oszlop-orientált

Elsődlegesen OLAP típusú kérések kiszolgálására szolgálnak. Ezeknél a lekérdezéseknél nagyságrendekkel gyorsabbak mint a sor-orienentált adatbázisok mert jobban ki tudják használni a CPU gyorsítótárakat, tömörítő algoritmusokat, SIMD utasításokat.

Példák

Vektor-orientált

A vektoros adatbázisok alapvetően a vektorok közötti hasonlóság alapú keresésekre szolgálnak. Általában neurális hálók által generált reprezentációkat tároljuk benne. Így működnek a szemantikus keresők (mint pl a google), modern ajánló rendszerek, multimedia keresők (kép, hang, video).

Példák

Szöveg (full-text)

A szöveges keresők nagy mennyiségű szövegben tudnak hatékonyan keresni, mint a webáruházak termék leírásai, szerver napló fileok.

Példák

Gráf

A gráf olyan adatszerkezet ami csomópontokból áll és az ezeket összekötő élekből. Sokmindent lehet ilyen formában reprezentálni (pl.: felhasználók preferenciái, szociális hálózatok, tudás hálózatok).

Példák

Idősor

Az idősor olyan adat (legtöbbször szám), amit időponthoz kötötten tárolunk el, és időpont vagy intervallum alapján keresünk. (pl.: mérési adatok)

Példák

Hogyan tárolják az adatbázisok az adatok?

Az adatbázisok memóriában és fileokban is tárolnak bizonyos adatokat, de van egy fő tárolási mód, a másik csak kiegészítő.

Elsődlegesen RAM alapú tárolás

A kéréseket a RAM-ban lévő adatokból szolgálják ki, a filerendszert naplózásra és az adatok mentésére használják. Ezek nagyságrendekkel gyorsabbak mint a file alapú tárolók, hatékonyabban férnek hozzá az adatokhoz és egyszerűbb a megvalósításuk. A hátrányuk az hogy a RAM lényegesebb drágább és kisebb mint HDD vagy SSD.

Elsődlegesen file alapú tárolás

SSD vagy HDD tárolón a filerendszerben tárolják az adatokat és a kiszolgálás is innen történik. A RAM-ot főleg gyorsítótárazásra használják. Ezek komplexebbek és lassabbak, viszont nagyságrendekkel több adatot tudnak tárolni, olcsóbban. Az adat és index fileok kezelésére a 2 legelterjedtebb algoritmus az LSMT variánsok és a B-Tree variánsok.

A 2 féle algoritmusra az írási és olvasási sebesség közötti kompromisszum miatt van szükség. Minél nagyobb az írási sebesség, az olvasási annál lassabb lesz és forditva.

Hogy tudnak gyorsan keresni az adatbázisok?

Ha nem tudjuk milyen sorrendben vannak az adatok, akkor csak úgy tudunk egy elemet megkeresni hogy az összeset ellenőrizzük. Ez sok adatnál a gyakorlatban túl lassú lenne.

A gyors keresésre az adatbázisok indexeket használnak. Az indexek sorba rendezve tárolják az adatokat, a sorrend ismeretében pedig nem kell minden elemet megnézni.

Az alap ötlet ugyan az, mint amikor egy könyvben keresünk egy adott számú oldalt. A leggyorsabban úgy találjuk meg hogy kinyitjuk a könyvet a közepén, megnézzük hogy amit keresünk a közepétől merre van, újra megfelezzük az oldalakat és így tovább, amíg meg nem találjuk. Így legrosszabb esetben log2(n) oldalt kell megnéznünk n helyett. Ezt az algoritmust bináris keresésnek hívják.

Viszont a bináris keresés csak akkor működik ha teljesen rendezett adatok között keresünk. Az adatok rendezése is erőforrás igényes, ezért a legtöbb adatbázis nem tartja teljesen rendezetten az adatokat.

Több féle algoritmus létezik az indexelésre, hogy melyik a legjobb az adott esetben, attól függ:

Az indexelő algoritmusok a rendezés és a keresés erőforrásigényei között egyensúlyoznak, úgy hogy a fenti kritériumokkal együtt optimális legyen az egész rendszer teljesítéménye. RAM alapú tárolóknál az index mérete is kritikus lehet.

Elosztott adatbázisok

Az elosztott adatbázisok, több gépen futnak, tárolnak adatok és hálózaton kommunikálnak.

Előnyei

Hátrányai

A hálózat relatív lassú és megbízhatatlan (ráadásul sokféle képpen megbízhatatlan). Ez azt okoza hogy, ha a hálózat valamilyen hiba miatt két hálózatra szakad, akkor a rendszernek választania kell hogy potenciálisan inkonzisztens adatot szolgál ki vagy hibát ad vissza. Ha nincs semmilyen hiba, akkor is a késleltetés lesz magas, vagy nem garantálható a konzisztencia. (PACELC theorem)

A különböző adatbázisok, különböző kompromisszumokat kötnek a rendelkezésre állás, konzisztencia, hálózati hiba tolerancia terén.

Adatbázis választásnál ezeket ellenőrizzük