Hatékony adatkezelési technológiák

A nagy adattömegek kezelése különös odafigyelést igénylő feladat, hiszen a legtöbbször a kezelni kívánt adatmennyiség nem fér be a memóriába. Ez óhatatlanul is felhozza a diszkelérések minimalizálásának problémáját. Legtöbb esetben nem maga az adathalmazon elvégzendő művelet az, ami sok időbe telik, hanem a számtalan diszkhozzáférési idő az, ami lényegesen megnöveli az algoritmusok futási idejét.

A memórián kívüli (out-of-core) adatkezelési technikák különböző szinten és különféle módszerekkel igyekeznek hatékonyabbá tenni az adatelérést. Ezek közül megkülönböztetünk (a) mező szintű műveleteket és (b) rekordhalmaz szintű műveleteket. Az alábbiakban ezeket tekintjük át röviden.

Mező szintű műveletek

A mező szintű műveletek lényege, hogy a rekordon belül egy-egy mező módosításával, kezelésével próbálunk kisebb vagy hatékonyabban kezelhető adathalmazt elérni.

Vertikális dekompozíció

A több mezőből álló rekord mezőit különböző megfontolások alapján csoportokra bontjuk, így alakítva ki kisebb rekordokat. A későbbi feldolgozáshoz már csak az adott feladathoz legjobban illeszkedően kialakított kisebb rekordhalmazokat kell továbbküldeni.

Előnye, hogy ilyen módon csak azokat a mezőket kell egy folyamatnak kezelnie, amire valóban szüksége van. A feldolgozandó adathalmaz lényegesen csökkenthető ez által.

Simítás – kosarazás és klaszterezés

A simítás művelettel, ahogy a neve is mondja, az adatokat tudjuk simítani, ezáltal például zajszűrést végezni rajta. A kosarazás segítségével az előre rendezett elemeket megadott méretű kosarakba csoportosítjuk, majd az egy-egy kosárhoz tartozó elemek helyett a kosár reprezentáns elemét vesszük (átlag, minimum, maximum).

Klaszterezés esetén az összetartozó elemeket egy klaszterező algoritmus eredményeképpen kapjuk meg, ahol az egyes csoportokat, hasonlóan a kosarazáshoz, az egyes elemeket a csoportjukhoz tartozó reprezentáns elemmel helyettesítjük. A zaj szűrésével növeljük a későbbi lépések megbízhatóságát és a teljesítményét.

Aggregálás

Aggregálás során a különböző mezők értékén hajtunk végre valamilyen aggregáló jellegű műveletet (darabszám, összeg, átlag). Ennek segítségével a felhasznált adatmennyiség csökken, miközben olyan adatokat állítunk elő, amelyek a későbbi feldolgozás során gyakran szükségesek.

Általánosítás

Általánosítás esetén alacsony szintű adatot helyettesítünk magasabb koncepciós szintekkel. Ezáltal szintén összevonásra kerülnek adatok.

Normalizálás

Normalizálás esetén az értéktartományt szűkítjük egy kívánt tartományra. Ennek előnye, hogy így különböző tartományban mozgó dimenziók is összehasonlíthatóak lesznek, valamint kisebb adattartományon a feldolgozás is hatékonyabb lehet.

Attribútum létrehozás

Bizonyos esetekben a további feldolgozási lépésekben szükség lehet olyan adatra, amelyet gyakran kell előállítani a többi mező alapján. Ilyenkor érdemes lehet ezt az adatot már az előfeldolgozási lépésben előállítani, mintegy új mezőként. Ennek a módszernek a segítségével a számítási komplexitás csökkenthető.

Kódolás

Kódolás esetén az egyes mező értékeit helyettesítjük a kódolt formájával (hash kód, Huffman kód stb). Ennek segítségével jelentős tárhely igény csökkenést érhetünk el, valamint a nehezebben kezelhető adatformátumok is átalakíthatóak jól kezelhető adattípusokká (például képek, szövegek számokká). A személyiségi jogok védelme is biztosítható ezzel a technikával.

Rekordhalmaz szintű módszerek

Rekordhalmaz szintű műveletek esetén a teljesítmény növelésére szolgáló adatmanipulációt nem rekordonként végezzük el, hanem az egész adathalmazra tekintve végzünk el bizonyos műveleteket.

Adathalmaz konverzió

Ekkor az egész adathalmazt valamilyen konvezciós eljárásnak vetjük alá. Például a rekordokat fába rendezzük, ezzel esetleg összevonva hasonló prefixeket. A konverzió elsődleges célja, hogy a későbbi feldolgozáskor az adathalmaz hatékonyabban legyen kezelhető, esetleg segítségével a feldolgozandó adathalmaz beférjen a memóriába.

Mintavételezés

Mintavételezés esetén az adathalmaz rekordjait valamilyen  megalapozott algoritmus szerint mintavételezzük, és a további műveleteket már csak a kisebb, a memóriába már beférő mintán hajtjuk végre. Ennek nagy előnye, hogy a feldolgozás IO igénye kicsi lesz. Hátránya azonban, hogy az eredmény nem pontos. Az eredmény verifikálása céljából gyakran a megtalált mintákat ellenőrzik az egész adathalmazon is.

Particionálás

Particionálás esetén az eredeti adathalmazt részhalmazokra bontjuk (ez lehet lineáris, vagy egyéb megfontolások alapján, például a valamilyen szempontból hasonló rekordok egymás mellé csoportosításával). A további műveleteket az egyes particiókon külön-külön lehet elvégezni, majd egy újabb lépésben az így kialakult lokális megoldásokat egyesíteni kell, kialakítva így a globális megoldást.

Természetesen a módszer feltétele, hogy találjunk egy jó darabokra bontó algoritmust, valamint, hogy az elvégzendő műveletek működjenek lokálisan is, amelyekből legyen lehetőség előállítani a globális eredményt.

Adat párhuzamosítás

Adat párhuzamosítás esetén az egyes csomópontok ugyanazokat a műveleteket végzik el más-más adaton. Majd a végeredményt az így feldolgozott adatok uniója adja.

Funkcionális párhuzamosítás

Funkcionális párhuzamosítás esetén minden csomópont ugyanazon az adaton dolgozik, csak más-más műveletet hajtanak rajta végre. A műveleti lánc végén már a feldolgozott adathalmaz eredménye kapható vissza.

Kapcsolódó anyagok