Relációs adatbázisok

Befejeződött

Az 1970-es években Edgar F. Codd kifejlesztette a relációs adatbázismodellt, amely a navigációs megközelítésről az adatközpontú megközelítésre helyezte át a hangsúlyt. Egy relációs modellben az adatok normalizált táblák rögzített hosszúságú mezőiként vannak tárolva (17. ábra). A normalizálás során a nagyméretű táblák kisebb és kevésbé redundáns táblákra oszthatók, majd kapcsolatok határozhatók meg köztük. Codd a relációs modellben tárolt adatok normalizálásának több szintjét is meghatározta. Ezzel egyidőben az IBM kifejlesztette a Structured Query Language (SQL) nyelvet, amely intuitív nyelvként szolgált az adatbázisok létrehozásához és kezeléséhez.

Relational database tables.

17. ábra: Relációs adatbázistáblák

A relációs adatbázisok fogalmát az IBM összevonta az SQL-lel, és megalkotta a System R és a DB2 relációsadatbázis-kezelő rendszert (RDBMS-t) – ezek a modern RDBMS-ek elődei.

A modern RDBMS-ek jellemző funkciói:

  • Az adatok táblák rekordjaiként vannak modellezve, más táblák kapcsolódó rekordjai pedig kapcsolatként.
  • A táblákat sémák definiálják, amelyek szabályozzák a tábla oszlopainak típusait és érvényes bemeneteit (azaz mezőit).
  • A táblák egy lekérdezési nyelvvel (általában az SQL-lel) definiálhatók, érhetők el és módosíthatók.

A modern RDBMS-ek teljes körű adatkezelési megoldást jelentenek az alkalmazásfejlesztők számára, és kivonják az adatkezelés fogalmát az alkalmazásfejlesztő hatóköre alól. A séma megtervezése után az alkalmazások a séma szabályai által megszabott módon tárolhatják, kérhetik le és módosíthatják a rekordokat. Egy adatbázis adatainak korlátozásával az alkalmazások robusztusabb módon kezelhetik az adatokat, ami kritikus fontosságú az alkalmazásprogramok adatkövetkezetlenségeinek elkerüléséhez. Egy felhasználói adatbázis például egy 1 és 130 közötti, nem negatív egész számként ellenőrizheti a felhasználók életkorát. Az adatbázis ezután megtagadhatja egy olyan felhasználó hozzáadását, akinek az életkora nem felel meg a korlátozásnak, és az adattároláshoz egy automatikus ellenőrzési mechanizmust biztosíthat.

Méretezés hagyományos adatbázisokban

A hagyományos RDBMS-eket úgy tervezték, hogy egyetlen gépen fussanak, az adatok mennyiségének vagy az egyidejű felhasználók számának növekedésével párhuzamban azonban az adatbázist is méretezni kell. Az adatbázisok vertikálisan vagy horizontálisan méretezhetők.

További bonyodalmakat idéz elő az ACID-tulajdonságok garantálása egy olyan elosztott adatbázisban, ahol nem egyetlen csomópont felelős az összes, tranzakciókat érintő adatért. A hálózati kapcsolatok meghiúsulhatnak, vagy előfordulhat, hogy egy csomópont sikeresen teljesíti a tranzakció rá eső részét, azonban vissza kell állítania a folyamatot egy másik csomópont hibája miatt. Így merült fel az elosztott egyidejűség-vezérlő mechanizmusok iránti igény.

Az elosztott egyidejűség-vezérlés egyik korai példája volt a kétfázisú véglegesítéses (2PC) protokoll. A 2PC atomitást és következetességét nyújtott az elosztott tranzakciókhoz, így garantálta, hogy a tranzakció minden résztvevője egyetértsen a tranzakció véglegesítésében. Az első fázisban egy csomópont (a koordinátor) lekérdezi a többi csomópontot (a résztvevőket), és egy VOTE_REQUEST üzenetet küld minden résztvevőnek (18. ábra). A résztvevők ezután szavaznak a tranzakció végrehajtásáról, VOTE_COMMIT vagy VOTE_ABORT üzenettel. A második fázisban a koordinátor összesíti a résztvevők szavazatait, és egy GLOBAL_COMMIT üzenetet küld el, ha minden résztvevő a tranzakció mellett szavazott, vagy egy GLOBAL_ABORT üzenetet küld, ha egyetlen résztvevő is a tranzakciók ellen szavazott (19. ábra). A résztvevők végül véglegesítik a tranzakciót vagy a visszaállítást a koordinátortól kapott üzenet alapján. A 2PC protokoll így szigorú konzisztenciát garantál, mivel minden tranzakcióhoz globális egyetértésre van szükség a csomópontok között. A 2PC változatai között szerepel a háromfázisú végrehajtás (3PC), valamint a kétfázisú zárolási protokoll. Ezek az egyidejűség-vezérlési protokollok azonban drágák, és hatással vannak a teljesítményre.

2PC - Phase one.

18. ábra: 2PC – Első fázis

2PC - Phase two.

19. ábra: 2PC – Második fázis

Tesztelje tudását

1.

Egy monolitikus (egy csomóponttal rendelkező) RDBMS-kiszolgálóval üzembe helyezünk egy adatbázist. Ha feltételezzük, hogy az adatbázis mindig elérhető és ACID-kompatibilis, a CAP-tétel melyik korlátozásának felel meg ez a kiszolgáló?

2.

Olyan rendszer esetén, amely horizontális particionálással osztja el egy RDBMS-fürt több csomópontja között az adatokat, az alábbi lekérdezések közül melyiknek a biztonságos végrehajtásához szükséges elosztott egyidejűség-vezérlés (2PC vagy hasonló mechanizmusok használatával)?