Adatbázis-tervezés: Séma és méretezhetőség

Befejeződött

Az adatbázisok, ahogy gondolhatja, számos alkalmazást és követelményt magukban foglalnak. Így végigveszünk néhány konkrét kialakítási mintát, amelyeket adatbázis-készítők alkalmaznak adatbázisrendszerek létrehozásakor.

Sémakényszerítés

Az adatbázisrendszerekhez általában valamilyen információra van szükség az adatbázisban tárolandó adatok típusával és szerkezetével kapcsolatban. A relációs adatbázisrendszerek esetén a sémát az alábbiak szerint definiáljuk:

  • Rekordok (sorok), amelyek attribútumokból (oszlopokból) állnak, amelyek mindegyike egy bizonyos típusként van definiálva.
  • Egy kapcsolat (tábla), amely több azonos típusú rekordból áll.
  • Megkötések, amelyek a rekordok, attribútumok és kapcsolatok szabályrendszerét határozzák meg.

A sémák nemcsak irányelvek, hanem a relációs rendszerek kényszerített részei. A sémaalapú adatbázisok előnyei:

  • A sémák oly módon fejeik ki az adatmodellt, amellyel összetett műveletek és lekérdezések hozhatók létre. Egy összekapcsolás például (ahol az adatok kettő vagy több táblából vannak kikövetkeztetve) viszonylag könnyen kifejezhető egy relációs adatbázisban.
  • A sémák olyan korlátozásokat tartalmazhatnak, amelyekkel az adatbázis szintjén kényszeríthető a program logikája. Az egyszerű megkötések például ellenőrizhetik, hogy egy személy életkora pozitív szám-e, míg egy relációs adatbázis táblakészleteként implementált banki tranzakciónapló (egy összetett korlátozással) kényszerítheti azt a tulajdonságot, mely szerint a rendszer minden terhelésének és jóváírásának összege nullát kell eredményezzen. A rendszer automatikusan visszautasíthatja vagy visszaküldheti az ezeket a korlátozásokat megszegő tranzakciókat.
  • A relációs rendszerek a séma által megadott adatokkal hoznak létre kidolgozott és hatékony lekérdezésterveket, az adatbázis így hatékonyan felelhet a tárolt adatokra vonatkozó lekérdezésekre.

A séma merev kényszerítése azonban gátolhatja a rugalmasságot. Az alkalmazás fejlődése során a már sorokkal feltöltött táblák sémájának módosítása nehéz sőt lehetetlen is lehet, a táblától és a megadott korlátozásoktól függően.

Másfelől vannak olyan rendszerek, amelyek vagy rugalmas sémákkal vagy egyetlen sémával sem rendelkeznek. Egy általános kulcs-érték tároló jó példa egy séma nélküli rendszerre, mivel ez egy leképezés adott típusú kulcsok és egy hozzájuk rendelt érték között. Bizonyos kulcs-érték tárolók rendkívül rugalmasak, és bármilyen bináris adatot képesek tárolni egy adott kulccsal. Egyes kulcs-érték tárolók, mint az AWS DynamoDB, megkövetelik, hogy a kulcs típusa (sztring, egész szám stb.) explicit módon ki legyen fejezve egy új tábla létrehozásakor. Egyes rendszerek (például az Azure Table Storage) engedélyezik beágyazott értékek használatát az adatattribútumokban, általában JSON vagy XML formátumban.

Másik változatot képviselnek azok a rendszerek, amelyek részben rugalmas sémával rendelkeznek – ilyen a GCP Bigtable és az Apache HBase. Ezekben a rendszerekben deklaráni kell az oszlopok számát a táblák létrehozásakor, egy oszlop azonban bármennyi beágyazott aloszloppal rendelkezhet. Ezekkel a rendszerekkel részletesen a következő modulban foglalkozunk.

Tranzakciós és analitikus feldolgozás

Az adatbázisrendszerek optimalizálásának egyik kulcsfontosságú kialakítási döntése a fogadott lekérdezések általános típusához való optimalizálás. Ehhez két fő minta létezik az adatbázisok számítási feladatai terén.

A tranzakciós számítási feladatok – más néven online tranzakciófeldolgozás (OLTP) – olyan számítási feladatok, amelyek főleg rövid online tranzakciókból állnak. A OLTP számítási feladatok főképp beszúrásokból, frissítésekből és/vagy törlésekből állnak. A OLTP rendszereknél a hangsúly a gyors lekérdezésfeldolgozáson és az egyidejű hozzáféréssel rendelkező környezetek adatintegritásának megőrzésén van. A pénzügyi tranzakciók jó példái az OLTP-feladatoknak. A lekérdezések jellemzően csak néhány táblát és sort foglalnak magukban, és nem igényelnek széles körű adatbázis-vizsgálatot.

Bizonyos rendszerek másfelől azért összesítik és elemzik az adatokat, hogy betekintő adatokhoz jussanak, és információt nyerjenek ki az adatokból. Ezeket a rendszereket online analitikus feldolgozási (OLAP-) rendszereknek nevezzük. Az OLAP-rendszerek általában kevesebb tranzakciót tartalmaznak, az egyes lekérdezések azonban összetettek lehetnek, és olyan összesítő számításokat tartalmazhatnak, amelyek több sort és oszlopot is magukban foglalnak. A tipikus OLAP-lekérdezések ezért lényegesen hosszabb ideig futnak, mint az OLTP-lekérdezések.

Az alábbi videó az OLTP és az OLAP áttekintését tartalmazza:

Méretezhetőség

Ahogy egy adatbázisrendszer felhasználói bázisa és adatai idővel megnőnek, a rendszerhez valamilyen méretezésre lehet szükség, amellyel kiterjeszthető annak kapacitása és/vagy teljesítménye, hogy több felhasználót és/vagy adatot támogathasson. Az adatbázis-skálázás több okból is összetett, amelyet az alábbi videóban ismertetünk részletesen:

Vertical scaling

A vertikális skálázás (vagy felskálázás) egy adatbázis kapacitásának vagy terhelési képességének további gazdagépek hozzáadása nélküli növelése. Ez olyan hardveres frissítésekkel végezhető el, mint egy gyorsabb CPU, nagyobb RAM vagy magasabb kapacitású lemezek használata, és/vagy további másodpercenkénti I/O-műveletek. A vertikális skálázás méretezhetőségének a CPU, a RAM és az egy gépen konfigurálható lemez mértéke korlátozza.

Horizontal scaling

A horizontális skálázás (vagy kiterjesztés) során további, adatbázis-lekérdezéseket kezelő csomópontok hozzáadásával méretezzük az adatbázisokat. A különböző RDBMS-termékek különböző horizontális felskálázási módokat nyújtanak, mint a replikáció és az adatbázisok horizontális particionálása. A replikáció során a rendszer ugyanazokat az adatok több csomóponton tárolja. Az RDBMS így további kéréseket kezelhet párhuzamosan, így növeli a másodpercenként elvégzett tranzakciók számát. Ez a módszer akkor működik, ha az adatbázis nagyrészt olvasási műveleteket bonyolít. A horizontális particionálás esetén egy nagy táblát több csomóponton (általában egy indexen vagy kulcson) osztunk el. Ebben az esetben a csomópontokon megosztott adatok mennyisége korlátozott, mi pedig ezt a megosztási formát részesítjük előnyben, mivel csökkenti a replikált adatok konzisztenciaproblémáit.

A replikáció az adatok több kiszolgálóra történő másolásának folyamata, hogy növeljük az egyes adatokhoz vezető, rendelkezésre álló útvonalak számát. Az adatok replikálhatók a teljesítmény, a rendelkezésre állás és/vagy a hibatűrés miatt is. A replikált adatok gyorsabb teljesítményt tesznek lehetővé különösen az írási műveletekhez, mivel a replikáció párhuzamos hozzáférést biztosít ugyanazon adatok több példányához. A replikáció elősegíti a rendelkezésre állást és a hibatűrést, mivel az adatok egy biztonsági másolatként elérhetők akkor is, ha az adatbázisrendszer egy része leáll.

A replikáció mellett alkalmazhatunk horizontális particionálást. A horizontális particionálás során az adatokat szakaszokra (szegmensekre) osztjuk, majd több adatbázisrendszer között elosztjuk. A replikációval ellentétben minden szegmens egyetlen forrásként szolgál az általa tárolt adatok részhalmazához. A horizontális particionálás technikáját kifejezetten az adatbázisok teljesítményének növelésére használják, azon belül is az írási teljesítmény fejlesztésére.

Ideális esetben egy horizontálisan particionált adatbázis egyenletesen elosztja az adatokat az összes partíció között. Ezt azonban nehéz elérni, mivel a partíciók közti adateloszlásnak nagyjából kiegyenlítettnek kell lennie. Számos mai adatbázisrendszer gerinceként szolgál a népszerű, konzisztens kivonatolásnak nevezett technika.

A konzisztens kivonatolás a kivonatolás egy speciális fajtája, amellyel hatékonyan kiterjeszthetők a kivonattáblák. Ha a kulcsok száma K, egy adott kivonattábla gyűjtőinek száma pedig n, a konzisztens kivonatoláshoz átlagosan csak K/n kulcs ismételt leképezése szükséges minden alkalommal, amikor új gyűjtő kerül a kivonattáblába.1

Bizonyos rendszerek a replikálás és a horizontális particionálás egyvelegével nyújtanak nagy teljesítményt, miközben magas rendelkezésre állást és hibatűrést is biztosítanak. A replikáció használatakor azonban jelentős problémaforrás lehet a konzisztencia – a következőkben erről lesz szó.


Hivatkozások

  1. Karger, David és Lehman, Eric és Leighton, Tom és Panigrahy, Rina és Levine, Matthew és Lewin, Daniel (1997). Konzisztens kivonatolás és véletlenszerű fák: Elosztott gyorsítótárazási protokollok a gyakori problémák enyhítésére a world wide web proceedings of the huszonkilencedik éves ACM Symposium on Theory of Computing

Tesztelje tudását

1.

Tegyük fel, hogy egy olyan alkalmazáshoz tervez tárrendszert, amely táblákat nyer ki weblapokról. Az alkalmazás egy egyedi azonosítót szeretne minden táblához rendelni, majd a táblát egy nyers XML-alapú formátumban tárolni az adatbázisban. Milyen típusú rendszer lehet a legmegfelelőbb egy ilyen alkalmazáshoz?

2.

Egy légitársaság foglalási rendszere egy adatbázisban követi az utasokat, a légitársaságokat és a járatokat. A rendszer lefoglalja a járatokat az utasoknak, és lekéri a már meglévő foglalással rendelkező utasok adatait. Milyen típusú adatbázist használ vélhetően a rendszer?

3.

Egy utazási alkalmazás a globális utasadatok betöltésével elemzi a járattrendeket, és turistákkal kapcsolatos trendeket szolgáltat utazási ügynököknek és túravezetőknek. Milyen mögöttes adatbázisrendszert használ valószínűleg az alkalmazás?