Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

Adatszerkezetek Állományok.

Hasonló előadás


Az előadások a következő témára: "Adatszerkezetek Állományok."— Előadás másolata:

1 Adatszerkezetek Állományok

2 Állomány (file) Az állomány fogalom mindig periférián értelmezhető, tetszőleges periférián. A háttértár határozza meg a fizikai struktúrát, mi csak háttértárakon lévő állományokkal fogunk foglalkozni. A valós világ modellezése (az absztrakció első szintje) ugyanúgy történik állományok esetében is, mint adatszerkezeteknél (az állomány kialakítása). Második szinten megjelenik a fizikai állomány. Így létezik egy logikai és egy fizikai állomány.

3 A logikai állomány fogalmi rendszere
Adatelem, adattétel: A logikai állomány legkisebb, önállóan értelmezhető része. Jellemzői: név típus: milyen típusú értéket vehet fel hossz: általában bájtokban/karakterekben értendő fix hosszúságú (pl.: születési évszám  4 karakter) változó hosszúságú (pl.: születési hely) Adatcsoport: Az adatelemek önálló, névvel ellátott együttese. vektor adatcsoport: Különböző típusú adatelemeket fog össze valamilyen nagyobb logikai egységbe (pl.: a lakcím tartalmazza az irányítószámot, településnevet, utcát, házszámot). ismétlődő adatcsoport: olyan adatelemünk van, amelyiknek több értéke lehet (halmazértékű). Az ismétlődések száma lehet 0 is. (pl.: gyermekünk neve). összetett adatcsoport: Az előző kettő kombinációja: egy vektortípusú adatcsoport, melynek egyik eleme ismétlődik.

4 A logikai állomány fogalmi rendszere
Logikai rekord: Adatelemek és adatcsoportok adott sorrendű, logikailag összetartozó együttese. (Nincs önálló neve.) Rekordformátumok: A logikai rekordok szerkezetére vonatkozó osztályozást tartalmazzák. fix rekordformátum (fix hossz): A logikai rekordok azonos szerkezetűek és azonos hosszúságúak. Ez eleve kizárja a váltakozó hosszúságú adatelemeket és az ismétlődő adatcsoportokat. A legegyszerűbb szerkezetű logikai rekord. változó rekordformátum: A logikai rekordok szerkezete azonos, de hosszuk eltérő lehet. Változó hosszúságú adatelem, vagy ismétlődő adatcsoport esetén ez alkalmazandó. A leggyakoribb rekordformátum. határozatlan rekordformátum: A rekordok hossza és szerkezete is különbözhet. Adatelemek hiányozhatnak az egyes rekordokból. A kérdés az, hogy fizikai szinten ezt hogy tudom kezelni. Logikai rekordazonosító: Azt az adatelemet, vagy az adatelemeknek azon együttesét, amelynek vagy amelyeknek értéke egyedi, azaz minden konkrét rekordban más és más, logikai rekordazonosítónak nevezzük (pl.: személyi szám, sorszám stb.). Lehet, hogy létezik lehet, hogy nem. Ha ez egy adatelem, akkor egyszerű, egyébként összetett rekordazonosítóról beszélünk.

5 A logikai állomány fogalmi rendszere
Logikai állomány: A logikai rekordok valamilyen feldolgozási cél, tartalmi, vagy forma szerinti együttese, amelyet névvel látunk el. Az állomány lehet, hogy azonos szerkezetekből, vagy különböző elemekből áll. A logikai állomány egy absztrakt adatszerkezet. Akkor jön létre, ha a felsorolt jellemzői adottak, és megadom a nevét, valamint az adatokat. Értelmezhető az állomány szerkezete is: struktúra nélküli: A logikai rekordok sorrendje tetszőleges. asszociatív: A rekordok csoportosíthatóak valamilyen egyértelmű, diszjunkt módon. Pl.: csoportosítsunk a logikai rekordazonosítók alapján, ekkor 1 elemű csoportokat kapunk. szekvenciális: A logikai rekordok között valamilyen sorrend értelmezett. (pl.: azonosító szerinti rendezettség) hiearchikus: különböző logikai rekordokat pakolok egy állományba úgy, hogy olyan szerkezetet alkotnak, amely leginkább egy fával jellemezhető (pl. személyi adatok + félévi eredmények)

6 A fizikai állomány fogalmi rendszere
Mező: Kölcsönösen egyértelműen megfelelője az adatelemnek. Különbség, hogy jellemzője az ábrázolási mód, hiszen megjelenik a háttértáron. A hossz itt byte-okban értendő. Nem fix hosszú adatelemek kezelésénél az adatelem mezőjét fix hosszon kell megjeleníteni. Mezőcsoport: Megfeleltethető az adatcsoportnak, az adatcsoport megjelenítésére szolgál. Blokk: Megfeleltethető a logikai rekordnak. Fizikai állomány: Megfeleltethető a logikai állománynak, nem más mint blokkok sorozata. Saját neve van, kezelése operációs szinten zajlik.

7 Blokk Az az adatmennyiség, amely egyszerre mozog a tár és a periféria között. Az adatátvitel egysége, mérete byte-ban értendő. A blokk és a logikai rekord megfeleltetése 1 logikai rekord alkot 1 blokkot több logikai rekord alkot 1 blokkot (szűkebb értelemben vett blokkolás) 1 logikai rekord több blokkban jelenik meg (szegmentálás esete). Kezelése rendszerfüggő. Egyes rendszerek a blokk méretét rögzítik, és a felhasználó nem változtathatja meg, mások megengedik, hogy a felhasználó szabja meg. Ha a blokk mérete rögzített, akkor elképzelhető, hogy a rendszer nagy blokkoknál automatikus szegmentálást hajt végre. Létezik olyan rendszer, amely megengedi a szegmentálást, de az ilyen rendszer kevés. A felhasználó ritkábban tud tényleges módon szegmentálni.

8 Logikai rekordformátumok  blokk
Fix rekordformátum Kezelése a legkönnyebb, minden rendszer tudja kezelni. Ha egy rekord hosszát rögzítettem, akkor jellemzően a többi is ilyen lesz, így nem kell az egyes rekordhoz kötni az információt. A rekordhossz az állomány jellemzőjeként írható le. 1 blokk – 1 rekord: Az összes blokkjellemzőt tudom. Blokkolás: Az állományra jellemző a blokkolási tényező (hány rekordot pakolok össze egy blokkba). Az utolsó blokk lehet töredék-blokk, de a többinek azonosnak kell lennie. Szegmentálás: Meghatározandó a rekord feltördelése (azonos hosszú byte-sorozatokra bontom szét, de a szerkezetük nem lesz azonos), és ez minden rekordra ugyanaz lesz. Csak egyszer kell tördelni, az utolsó blokk lehet rövidebb.

9 Logikai rekordformátumok  blokk
Változó hossz 1 rekord-1 blokk: A blokk mérete rögzített, úgy választom meg, hogy a leghosszabb rekord is beleférjen. A blokkméret megegyezik a rekordmérettel. A blokk is változó hosszú lesz, a blokk elején jelölni kell a blokk hosszát. a) Ezért azon rekordok, melyek kisebbek, nem foglalják el teljes egészében a blokkot. A ki nem töltött részt speciális bitkombinációval tölthetjük ki, „szemétbyte”-okkal. Változó lehet egy adatelem, vagy egy ismétlődő adatcsoport. Fizikai szinten ilyenkor plusz információt kell közölni, az ismétlődések számát. Ez a rekordhoz van hozzárendelve, a blokkméret viszont nem függ a rekordtól. Ha nagy a különbség a rekordok között, akkor rossz a helykihasználás, viszont könnyű kezelni. x x x x

10 Logikai rekordformátumok  blokk
Változó hossz Blokkolás A rekordok szabályosan vesznek fel különböző hosszakat, és csak néhány követi egymást (pl.: 3 db). Ilyenkor tudok úgy blokkolni, hogy a blokk mérete azonos, a rekord méretét jelölöm. A blokkszerkezetét csak egyszer kell leírni, de a rekordra vonatkozó hosszinformációt a rekord elejének tartalmaznia kell. Fix blokkmérettel dolgozom. A rendszer veszi sorba a rekordokat és addig pakolja a blokkba, amíg belefér, a megmaradt helyet „szemétbyte”-tal tölti fel. A többi rekordot a következő blokkba rakja. Maximális blokkméretet határoz meg. A rendszer összepakolja a rekordokat mindaddig, amíg belefér a blokkba, de a szemetet elhagyja. Kezdi rakosgatni újra. Ha belefér a max. blokkméretbe, akkor belerakja. Így változó méretű blokkok keletkeznek, amelyeknél nem csak a rekordok méretét, hanem a blokk hosszát is jelölni kell. Ennek igen jó a helykihasználása, de kell plusz információ, a blokk mérete is. X x x X x x X x x X x * X x x * X x x

11 Logikai rekordformátumok  blokk
Változó hossz Szegmentálás: Problémás, ugyanúgy, mint a blokkolásnál, plusz információt kell elhelyezni a blokkban. Rendszertől függ, hogy a plusz információt hogyan tárolja. A blokk mérete pl. lehet egy külön táblában is.

12 Logikai rekordformátumok  blokk
Határozatlan hossz Minden rekord a tárolásánál az előzőek mellett olyan plusz információt kell bevinni, amely az adott rekordra vonatkozik, azaz hogy a rekordnak milyen mezői hiányoznak (pl.: lánykori név). A rendszerek itt általában nem engedik meg a blokkolást és a szegmentálást, általában nem tudják kezelni a határozatlan hosszat.

13 Műveletek (Mindig logikai rekordra vonatkoznak)
Létrehozás: Az állományt valamelyik háttértáron hozom létre. Ki kell választanom a fizikai állomány szervezési módját vagy az állomány tárolási szerkezetét. Az adott szervezési módnak megfelelően kell a logikai rekordokat elhelyeznem a fizikai állományban. Bővítés: Az állomány rekordjainak darabszáma nő, új rekord kerül be az állományba.

14 Műveletek Törlés logikai: Az állomány rekordjainak darabszáma nem változik, de a logikailag törölt rekordok meg vannak jelölve, a továbbiakban a feldolgozásban nem vesznek részt. Rendszerfüggő a megvalósítása, a fizikai állományban minden logikai rekordhoz van egy jelző, melynek két állapota van: törölt ill. élő. Törlőbájtot alkalmaznak, hogy eldönthető legyen, hogy tényleges rekord-e, vagy már logikailag törölt. Ez plusz 1byte-on tárolható. Logikai törlést jelentheti valamelyik mező tartalmának felülírását speciális bitkombinációra. fizikai: Az állomány rekordjainak darabszáma csökken, a rekordok nem nyerhetőek vissza. Nehezebb végrehajtani. A kérdés az, hogy a rendszer egyáltalán tud-e ilyet. Általában nem.

15 Műveletek Csere: A rekord bármely mezőjének (kivéve a rekordazonosítónak) értékét cserélhetem valamely más értékre. Elérés: Olyan tevékenység, mikor az állomány tetszőleges rekordját akarom megfogni. soros elérés: Alapja a rekordok fizikai sorrendje (ahogyan elhelyezkednek a rekordok a háttértáron). szekvenciális elérés: Az alapja valamilyen logikai sorrend, az x. rekordot csak az előtt állók elérése után érhetem el. közvetlen elérés: Alapja az elsődleges, vagy másodlagos kulcs, bármely rekordot egyből megtalálok, függetlenül a fizikai és logikai sorrendtől. Ilyen elérés csak lemezen lehetséges.

16 Műveletek Keresés: Soros és szekvenciális elérésnél egy kitüntetett rekordot kell megfognom. A szokásos három módszerrel. Rendezés: A szokásos (kulcs alapján). Feldolgozás: Egy adott állományban lévő információhoz akarok hozzáférni. Egy-egy szerkezetet az minősít, hogy a feldolgozást mennyire segíti. A feldolgozás alapja a szerkezet és az elérés, keresés. Újraszervezés: Az állományt a háttértár egy másik területén újra létrehozzuk úgy, hogy közben megváltozik vagy a szerkezete, vagy a tartalma, esetleg mindkettő.

17 Állományszerkezetek (szervezési módok)
Egyszerű (csak a logikai rekordokat tartalmazza) Szeriális Szekvenciális Direkt Random Összetett (A logikai rekord adatain túl szerkezethordozó adatok is megjelennek, melyek magáról az állományról adnak információkat és a feldolgozást segítik.)

18 Egyszerű állományszerkezetek
Az osztályozás alapja: Van-e kapcsolat a logikai rekordazonosító és a logikai rekord háttértáron elfoglalt helye között? Van-e kapcsolat a logikai rekordazonosítók között? szeriális: nem nem szekvenciális: nem igen direkt: igen igen random: igen nem

19 I.1. Szeriális állomány Nincs szerkezete, a rekordok sorrendje tetszőleges. Tetszőleges háttértáron megjelenhet, mindegyik rekordformátumot tudja kezelni, tetszőlegesen lehet blokkolni és szegmentálni. Egyszerűen kezelhető. Viszonylag gyors, kivéve ha egy adott rekordot keresek, mert a teljes keresés időigényes. Minden operációs rendszer, programnyelv stb. tudja kezelni. Alapvető szerepet játszik olyan eseteknél, amikor a rekordok véletlenszerűen állnak elő, vagy amikor a véletlenszerűen érkező rekordokat átmenetileg gyűjteni kell, hogy az így létrejövő állományból valamilyen szerkezettel rendelkező állományt hozzunk létre.

20 I.1. Szeriális állomány műveletei
Létrehozás: A tetszőleges sorrendben jövő rekordok bekerülnek az állományba a beérkezési sorrend szerint. Bővítés: Nincs rendezettség, így a bővítés nagyon egyszerű, az új rekord az állomány végére íródik. Törlés: Fix rekordformátum esetén lemezes háttértárnál lehet fizikai törlés: az utolsó rekorddal felülírom a törlendőt. Szalagnál és nem fix rekordformátumnál csak logikai törlésről beszélhetünk. Csere: A lemezen elhelyezett fix rekordformátumú szeriális állomány tudja csak a cserét, a többi esetben csak újraszervezéssel lehetséges. Elérés: Csak soros elérésről beszélhetünk, mert csak fizikai sorrend van. Keresés: Teljes keresés. Rendezés: Nincs. Feldolgozás: Az adott fizikai sorrendben végig fel tudom dolgozni az állományt, vagy addig, amíg a feldolgozandó rekordot meg nem találtam (soros elérés). Nem más, mint a rekordok végigolvasása. Viszonylag lassú. Újraszervezés: A szerkezetátalakítás miatt ez nem merül fel, mert nincs szerkezet. Akkor van rá szükség, amikor logikailag törölt rekordok fizikai törlését akarom megvalósítani, vagy olyan cserét (nem a fenti esetben), amely engedélyezett.

21 I.2. Szekvenciális állomány
A rekordok az azonosító (elsődleges kulcs) szerint rendezettek. Ez egy egyértelmű sorrendet ad, egy adott szerkezetet biztosít. Létrehozható mind szalagon, mind lemezen. Minden rekordformátumot tud kezelni, a blokkolás is tetszőleges. A szakma szűkebb értelemben az azonosító szerinti növekvő sorrendben rendezett állományt nevezi szekvenciálisnak, de a csökkenő sorrendű is kielégíti a fogalmakat. Darabolással szintén szekvenciális állományokat kapok. Ez azért lényeges, mert általában kevés a hely, így a résztartományokkal könnyebb dolgozni. Lényeges lehet az állományok mérete a tárkapacitás miatt.

22 I.2. Szekvenciális állomány műveletei
Bővítés: Nem hajtható végre közvetlenül, csak újraszervezéssel. Törlés: Csak logikai törlést realizál, fizikait csak újraszervezéssel. Csere: Fix rekordformátum esetén lemezen lehet, bármely más esetben csak újraszervezéssel. Elérés: A szekvenciális állománynál a logikai és a fizikai sorrend egybeesik, ezért a soros és a szekvenciális elérés ugyanazt jelenti. Keresés: Lineáris keresés, előnyösebb ha több rekordot keresünk egyszerre. Feldolgozás: Alapja a keresés. Lineáris keresést használva egyszerre több rekordot is feldolgozhatunk. Ilyenkor elegendő egyszer végigolvasni az állományt, ha a keresés előtt rendezzük a keresendő rekordokat elsődleges kulcsuk szerint. Újraszervezés: Általánosan növekvő sorrendű állományból csökkenő sorrendű állományt lehet létrehozni, vagy fordítva. Újraszervezéssel oldható meg a csere, a fizikai törlés és a bővítés. Nem a szerkezetet változtatom.

23 I.2. Szekvenciális állomány
Előnyei Soros és közvetlen elérésű háttértárolón egyaránt létrehozható. Jó kapacitáskihasználást tesz lehetővé. Szekvenciális módon való feldolgozása egyszerű. Hátrányai Nem támogatja a közvetlen elérést. Aktualizálása újraszervezéssel oldható meg (kivételt képez a közvetlen elérésű háttértárolón elhelyezkedő szekvenciális állományok rekordjainak törlése vagy módosítása). Létrehozását rendezés vagy összeválogatás előzi meg.

24 I.3. Direkt állomány A direkt és a random állományok asszociatív szerkezetű állományok. Felépítésük és kezelésük a korábban megismert kulcstranszformációs táblázatokéhoz hasonló. A rekordok háttértárolón elfoglalt helye egy hash függvény segítségével határozható meg, amely a logikai rekordazonosítóhoz (az elsődleges kulcshoz) rendel egy lemezcímet. Amennyiben a hash függvény kölcsönösen egyértelmű, akkor direkt állományról, ha csak egyértelmű, random állományról beszélünk. Ha egy logikai adatállományban az elméletileg számba vehető rekordok és ezen keresztül a rekordazonosítók száma közelít az állományban ténylegesen előforduló rekordazonosítók számához, azaz ha az állományt alkotó rekordazonosítók halmazának az eloszlása egyenletes vagy közel egyenletes, akkor célszerűen megvalósítható a kölcsönösen egyértelmű kapcsolatteremtés a logikai rekordok és a fizikai tárolási címek között.

25 I.3. Direkt állomány A nem teljesen egyenletes eloszlású rekordazonosítók esetén azt a gyakorlatot kell követnünk a kölcsönösen egyértelmű megfeleltetés érdekében, hogy az állományban ténylegesen nem létező rekordok számára is helyet foglalunk. Ezzel a megoldással a tárolóterületen felhasználatlan tárolási egységek (címek) alakulnak ki. A kölcsönösen egyértelmű hash függvény a logikai rekordazonosítók növekvő sorrendjét létrehozva állítja elő az 1., 2., , n. címeket. A hash függvénynek e tulajdonsága teszi lehetővé, hogy a direkt szerkezetű állományokat ne csak közvetlen eléréssel, hanem szekvenciálisan is feldolgozhassuk.

26 I.3. Direkt állomány Fizikailag egyetlen területből (adatterület) épül föl, és csak címezhető háttértárolón hozható létre. Az állomány helyigényét egyértelműen meghatározza az elméletileg számba vehető rekordazonosítók darabszáma a logikai rekordok hossza. Csak fix rekordformátumot tud kezelni. Az állomány rekordjai nem blokkolhatók és nem szegmentálhatók, azaz egy blokk mérete a logikai rekordmérettel egyezik meg. Rendszerek, programnyelvek csak egy része ismeri.

27 I.3. Direkt állomány műveletei
Létrehozás Meghatározzuk a hash függvényt, kiszámítjuk a kezelendő rekordok darabszámát, majd kialakítjuk az állomány vázát, azaz előkészítjük a tárolóterületet a rekordok befogadására. A már meglévő váz, vagyis az üres állomány feltöltése tartalommal, azaz a tényleges rekordokkal. A művelet végén maradhatnak üres rekordhelyek (un. alrekordok). Bővítés Szűkebb értelemben véve bővítésről nem beszélhetünk. Tágabb értelemben véve új rekordokat a leképezési eljárás (hash függvény) által meghatározott címre lehet beilleszteni. Bővítéskor tehát „csak” a helyére kell tenni az újonnan érkező rekordot. Törlés Logikailag törlés létezik egy törlőbájttal megjelöljük, hogy az adott rekord már nem élő a teljes rekordot (esetleg csak a kulcsot) valamilyen jellel felülírjuk. A törlés következtében feleslegessé váló rekordhelyet más logikai azonosítójú rekord tárolására nem lehet felhasználni. Csere: Egy rekordban a logikai rekordazonosítón kívül bármelyik adatelem értekét lehet cserélni. Elérés: A rekordok elérése közvetlen. Keresés: nem értelmezett.

28 I.3. Direkt állomány műveletei
Feldolgozás A rekordok mind szekvenciálisan, mind pedig közvetlen eléréssel feldolgozható. Leggyorsabb feldolgozású állomány. Lehetőségek: soros, a rekordok fizikai sorrendjében; szekvenciális, ami a hash függvény korábban említett tulajdonságából következően megegyezik a soros feldolgozással; közvetlen, a hash függvény segítségével; szakaszos szekvenciális, ahol a szakasz első rekordját közvetlenül, a továbbiakat pedig szekvenciálisan érjük el. Újraszervezés Hagyományos értelemben véve nincsen szükség rá, mert az állomány létrehozásakor az elméleti rekordszámnak megfelelő helyet foglaljuk le. Felmerülhet viszont az újraszervezés igénye akkor, ha változik, azaz bővül vagy szűkül az elméletileg számba vehető logikai rekordazonosítók tartománya.

29 I.4. Random állomány A csak egyértelmű (de nem kölcsönösen egyértelmű) hash függvény miatt előfordul, hogy a különböző azonosítójú rekordok ugyanarra a címre képződnek le. A random szerkezetű állományok túlcsordult rekordjainak elhelyezéséről és kezeléséről külön technika segítségével kell gondoskodnunk (szinonimakezelés). A túlcsordult rekordok elhelyezésére alapvetően kétféle lehetőség kínálkozik az elsődleges adatterületen független túlcsordulási területen. A random állomány mindhárom rekordformátumot (fix, változó és határozatlan) tudja kezelni. A rekordokat általában nem blokkoljuk.

30 Túlcsordult rekordok kezelése
Nyílt címzés Az elsődleges adatterületen tárol. A módszer lényege, hogy a túlcsordulttá váló rekordot a leképezési eljárás által megadott címet követő címen próbáljuk elhelyezni. Ha ez nem sikerül, akkor az azt követőn, mindaddig folytatva így a keresést, míg szabad tároló helyet nem találunk. Az állomány végének elérésekor a keresés az állomány elején folytatódik, a leképezési eljárás által megadott címig. Általában e módszer akkor hatékony, ha nagy a tárolási cím kapacitása, és akkor gazdaságtalan, ha a tárolási cím kapacitása kicsi. Nagy hátránya, hogy nem szinonim rekord is túlcsordulttá válhat azáltal, hogy helyét egy előzőleg már túlcsordult rekord elfoglalta. Ez a negatív hatás az állomány két lépésben történő létrehozásával csökkenthető. Az első lépésben csak azokat a rekordokat helyezzük el az állományban, amelyek nem válnak túlcsordulttá. A túlcsorduló rekordokat átmenetileg egy munkaterületre tesszük, és egy második lépésben írjuk fel őket az adatállományba, miután minden nem túlcsordult rekordot felvittünk az állományba. A bővítések során ez a negatív hatás tovább nem csökkenthető.

31 Túlcsordult rekordok kezelése
Láncolás A hash függvény által meghatározott eredeti helyre került rekordot és az onnan túlcsordult rekordokat egy láncba fűzzük fel a rekordokban elhelyezett mutatómező segítségével. A mutató szerkezethordozó információ, nem része a logikai rekordnak, ezzel az állományszerkezet összetetté válik.

32 Túlcsordult rekordok kezelése
Szabad helyek nyilvántartása Egy külön nyilvántartást (táblázatot) vezetünk azokról a tárolási címekről, melyekhez még szabad hely tartozik. Ez a táblázat a tárban helyezkedik el, mérete kicsi. Ha a hash függvény egy újonnan érkező rekordot olyan tárolási címre képez le, amely már telített, a szabad helyekről vezetett nyilvántartás segítségével könnyen megtalálható az a tárolási cím, mely a címképző eljárás által meghatározott, de már telített tárolási címhez a legközelebb helyezkedik el. Az újonnan érkező rekordot ezen a címen tároljuk. Az újonnan belépett rekord eredeti tárolási címen elhelyezett mutató teremti meg a kapcsolatot a rekord eredeti és tényleges címe között. Ha a tárolási címhez már több túlcsordult rekord tartozik, és e címre egy újabb rekord képződik le, amelyet a szabad helyeket nyilvántartó táblázat alapján elhelyezünk az eredeti tárolási címhez legközelebb, akkor az eredeti címen már nem hagyhatunk a túlcsordultra utaló mutatót, hanem a túlcsordulási lánc utolsó rekordját tartalmazó címhez kötjük a rekordot, azaz itt helyezzük el a kapcsolathoz szükséges mutatót. (Praktikus módon minden tárolási címen két mutató elhelyezésére biztosítunk lehetőséget, az egyik mutató az adott tárolási címhez tartozó első túlcsordult rekordra mutat, míg a második a túlcsordulási lánc utolsó elemére.) A szabad helyek nyilvántartásának módszere akkor alkalmazható hatékonyan, ha a tárolási cím kapacitása viszonylag nagy, és kevés rekordot akarunk tárolni.

33 Túlcsordult rekordok kezelése
Vyssotzky-módszer Elsődleges adatterületen A módszer azon alapul, hogy különböző leképezési algoritmusok (hash függvények) különböző címeket eredményeznek. Ha tehát egy rekord túlcsordulttá válik, akkor ugyanazt a rekordazonositót egy másik hash függvénnyel újabb tárolási címre (rekordhelyre) képezzük le. Ezt mindaddig ismételjük, míg a kérdéses rekord számára szabad rekordhelyet nem találunk. Ha az összes hash függvényt kimerítettük, és a rekordot még mindig nem sikerült egy, a hash függvények által meghatározott címre (tárolási cím) elhelyezni, akkor folytonos kereséssel a rekordot a legközelebbi nagyobb szabad tárolási címre írjuk.

34 Túlcsordult rekordok kezelése
Független túlcsordulási terület használata A független túlcsordulási területet használja a túlcsordult rekordok elhelyezésére. Az állományt két lepésben hozzuk létre. Az elsőben kialakítjuk az állomány vázát: mind az elsődleges, mind pedig a túlcsordulási terület minden egyes rekordhelye egy külön mutatómezőt tartalmaz. Az elsődleges területen levő rekordhelyeken a mutatómezők értéke nil lesz, a túlcsordulási területen levő rekordhelyeket viszont a mutatómezőkben elhelyezett mutatókkal összeláncoljuk. A túlcsordulási terület első rekordját jelzőrekordként használjuk, mely mindenkor a túlcsordulási területen lévő legelső szabad tárolási címet (rekordhelyet) mutatja. A létrehozás második fázisában helyezzük el a hash függvény által meghatározott címekre a rekordokat. Ha egy rekord túlcsordulttá válik, akkor a jelzőrekord által meghatározott első szabad tárolási címre kerül a túlcsordulási területen. Az elsődleges adatterületen a hash függvény által meghatározott címen levő rekord mutatómezőjébe (ahonnan a túlcsordulás történt) a túlcsordult rekord címet tesszük. Ezzel egyidejűleg aktualizálódik a jelzőrekord is úgy, hogy a túlcsordulási területre újonnan bevitt rekord tárolási címen levő mutató kerül a jelzőrekordba (ami a következő szabad helyet címzi), és helyére nil érték íródik.

35 Túlcsordult rekordok kezelése
Osztott szabad helyek módszere Az elsődleges adatterületen elkülönített túlcsordulási területeket jelölünk ki a tárolóeszköz felépítésének megfelelően. Ez sáv módban működő lemezeknél lehet például a cilinderen belül egy vagy több sáv. Előny, hogy nincs szükség külön fejmozgatási időre a túlcsordulási terület, illetve az azon lévő túlcsordult rekord eléréséhez (kivételt képez az a ritka eset, amikor egy túlcsordulási terület betelik), továbbá nincs lánc, így nem kell azt karbantartani, illetve megtakarítható a láncon való végighaladáshoz szükséges idő.

36 Random állományok műveletei
Létrehozás Az első lépésben meghatározzuk a hash függvényt, kiválasztjuk a túlcsordult rekordok kezelésének a technikáját, kiszámítjuk a kezelendő rekordok darabszámát, majd mindezeket figyelembe véve kialakítjuk az állomány vázát, azaz előkészítjük a tárolóterületet a rekordok befogadására. A második lépés valójában nem más, mint a már meglévő váz, vagyis az üres állomány feltöltése tartalommal, azaz a tényleges rekordokkal. Ha a túlcsordult rekordokat nem túlcsordulási területén helyezzük el, akkor célszerű először csak a nem túlcsordult rekordokat elhelyezni, mert így egy túlcsordult rekord nem foglalhatja el egy később érkező nem túlcsordult rekord helyet. A művelet végén maradhatnak üres rekordhelyek (un. alrekordok). Bővítés új rekorddal Először a hash függvény által meghatározott rekordhelyre próbáljuk elhelyezni a rekordot, de ha az a rekordhely már foglalt, akkor a bővítő rekord az alkalmazott szinonimakezelési technika által előirt helyre fog kerülni. Törlés Logikai törlés értelmezhető Az adott rekordot először megkeressük a hash függvény és az alkalmazott szinonimakezelési technika segítségével, majd egy törlőbájttal megjelöljük, hogy a rekord már nem élő, vagy a teljes rekordot (esetleg csak a kulcsot) valamilyen jellel felülírjuk. Egy rekordban a logikai rekordazonosítón kívül bármelyik adatelem értéket lehet cserélni. Ha a rekord fix rekordformátummal rendelkezik, vagy ha a csere során csökken a rekord mérete, akkor egyszerűen felülírjuk a módosítandó rekordot a módosított értékkel. Ha viszont a csere során a módosított változat mérete meghaladja a módosítandó rekordot (változó vagy határozatlan rekordformátum esetén), akkor a módosítandó rekordot túlcsordult rekordkent kell kezelni, és a bővítés folyamatával azonos módon kell elhelyezni a módosított rekordot, valamint torolni kell a módosítandó rekordot.

37 Random állományok műveletei
A rekordok elérése közvetlen, a hash függvényen és az alkalmazott szinonimakezelési technikán alapul. A random állomány feldolgozása alapvetően a közvetlen elérésen alapul. Lehetőség van azonban az un. cím szerinti szekvenciális, valamint a soros feldolgozásra is. A cím szerinti szekvenciális feldolgozási mód növelheti a hatékonyságot azáltal, hogy először a keresendő logikai rekordok tárolási címeit határozzuk meg a hash függvény, illetve a szinonimakezelési technika segítségével. Ezen címek sorbarendezésével ugyanis jelentős mertekben csökkenthető az egyes rekordok eléréséhez szükséges idő. A soros feldolgozási módot gyakorlatilag csak újraszervezéskor használjuk az újraszervezendő állomány rekordjainak beolvasására. Az újraszervezési igény általában elég gyakori, hacsak nem statikus állományról van szó. Ha ugyanis nagy a rekordok fluktuációja (sok a törlés és a bővítés), akkor a hash függvény egyre több túlcsordult rekordot állit elő, így egy bizonyos ponton túl gazdaságtalanná válik a kialakított struktúra.

38 Összetett állományok Alkalmazásának célja: a feldolgozás gyorsítása, kényelmesebbé tétele. Alapját egy egyszerű szerkezetű állomány, az alapállomány képezi, amely legtöbbször szeriális vagy szekvenciális. Az alapállományra épülnek rá a plusz információhordozó adatok. Alapvetően két technikát különböztetünk meg: láncolás esetén az információhordozó adatok az állományon belül jelennek meg mutatómezők formájában, ekkor a rekordokat láncolt listába fűzzük föl; indexelés eseten a plusz információk az állományon kívül, általában egy (vagy több) indextábla formájában jelennek meg. Mivel mind a két technika lemezcímeket kezel, ezért az összetett állományszerkezetek csak közvetlen elérésű háttértárolón alakíthatók ki.

39 Indexelési technikák Alapja: rekordok elsődleges vagy másodlagos kulcsa Elsődleges kulcs Indextábla kulcs oszlopban a rekordok elsődleges kulcsértékei növekvő sorrendben, érték oszlopban pedig a megfelelő rekordok lemezcímei Általában kis méretű, ezért elfér a memóriában (bináris keresés alkalmazható), ha mégsem, akkor szekvenciális állományként jelenik meg a háttértáron. Elsődleges kulcsra épülő, egyszintű, teljes indexelés Nem teljes (részleges) indexelés Az indextáblában csak a részhalmazok első elemeit tüntetjük fel ( kisebb indextábla) részhalmaz behatárolása után annak kezdőcímétől kiindulva lineáris kereséssel folytatjuk a keresést az alapállományban (ehhez szekvenciálisnak kell lennie). Többszintű indexelésnek Nagyméretű állományok esetén célszerű lehet magát az indextáblát is indexelni, mely igény szerint ismét indexelhető, … Másodlagos kulcs Az indextábla kulcs oszlopába a rekordokban szereplő különböző másodlagoskulcs-értékeket írjuk, tehát a táblának annyi sora lesz, ahány különböző másodlagoskulcs-érték szerepel az alapállományban. Az egyes kulcsértékek mellé az érték oszlopba több lemezcím is kerülhet, azoké a rekordoké, amelyekben megtalálható az adott másodlagoskulcs-érték. Az indexelés lehet többszintű, ekkor azonban az első szinten csak teljes indexelésnek van értelme.

40 Összetett állomány típusok
Technika Kulcs Láncolás Indexelés Elsődleges kulcs Láncolt szeriális állomány Indexelt szeriális állomány, Indexelt szekvenciális állomány Másodlagos kulcs Multilista állomány Invertált állomány

41 B+ -fa A B-fák módosított változata, melyet állományok indexelésére használnak. (pl. Oracle) Az alapállomány szekvenciális és szeriális is lehet (adatszint). Erre épül fel egy teljes indexelésű, elsődleges indexszint. A B+ -fák adott méretű lapokból állnak, a lapokon indexek (kulcsok) szerepelnek Az indexek elsődleges indexszint lapokon vannak elhelyezve. Többszintű teljes indexelést tudunk megvalósítani (elsődleges kulcsra), a további indexeknél a lapméret lehet más. Előírhatjuk, hogy létrehozáskor a lapokon legyenek üres helyek minden szinten. Manapság az összeláncolás is jellemző tulajdonság. Szerkezetükben különböznek a levél- és a közbenső lapok.

42 A közbenső (nem levél-) lapok szerkezete
Ha a B+ -fa rendje p, akkor a p a maximális értéket jelöli. Itt a rend a korábbinak a kétszerese. A következő információk vannak elhelyezve a lapokon: p1, k1, p2, k2, …kq-1, pq (q  p ) pi: egy mutató, amely bármely másik B+-fa-beli lapra mutathat (famutató), kj: kulcsértékek, k1 < k2 < … < kq-1. Minden pi mutató által megcímzett lap esetén minden kulcsra igaz: ki-1< x  ki (1 < i < q, x az adott lapon egy tetszőleges kulcsérték) x  ki (i = 1) ki-1 < x (i = q) A lapon maximum a B+ -fa rendjével megegyező számú mutató helyezkedhet el és eggyel kevesebb kulcs. A gyökérlapon kívül minden lap legalább [p/2] mutatót tartalmaz. A gyökérlap legalább 2 mutatót tartalmaz. k1 k2 l1 k1 n1 k2 m1 m2

43 A levéllapok szerkezete
k1, p1, k1, p2, k2, … kq-1, pq-1, pq (q  p) ki : kulcsok. pi: 1  i < q egy olyan mutató, amely az elsődleges állomány azon rekordját címezi, amelyiknek a kulcsa ki. Ezek az adatmutatók kimutatnak a fából az elsődleges állományba lapállomány rekordjait címzik. pq a fában a tőle közvetlenül jobbra elhelyezkedő levéllapot címezi. Teljes indexelés van, minden rekord címezve van. A levéllapok azonos szinten helyezkednek el. Egyes rendszerekben a levéllapok és a nem levéllapok rendje eltérhet, a levéllapé nagyobb lehet (bevezetnek egy p0 mutatót a láncolás miatt), ez gyorsítja a kezelést. A B+ -fa kialakításánál a gyökérlap levél és közbenső elem is. k1 k2 k2


Letölteni ppt "Adatszerkezetek Állományok."

Hasonló előadás


Google Hirdetések