Kihagyás

2. rész

  • Fizikai adatszervezés módszerei
    • Heap szervezés
    • Hash-állományok
    • Indexelt állományok
      • ritka egyszintű
      • ritka többszintű
      • sűrű
    • Invertálás, változó hosszúságú rekordok kezelése

Fizikai adatbázis felépítése

  • blokk (header, rec1, rec2, ..., maradék hely)
  • rekord (header, mező1, mező2, ..., mező M)
    • lehet kötött (mutató mutat rá) vagy szabad
    • rekordok blokkhatárt nem léphetnek át
  • művelet időigénye = hányszor kell a háttértárhoz fordulni egy blokk tartalmáért
  • jelölések:
    • hasznos blokkméret - \(b\)
    • r állomány rekordmérete - \(s_r\)
    • r állomány rekordjainak száma - \(n_r\)
  • blocking faktor (\(f_r\)): hány rekord fér egy blokkba
    • \(f_r = \left \lfloor{\frac{b}{s_r}} \right \rfloor\)
  • \(b_r\): r állomány által foglalt blokkok száma
    • \(b_r = \left \lceil{\frac{n_r}{f_r}} \right \rceil\)
  • lineáris keresés: \(\frac{b_r + 1}{2}\)

Heap szervezés

  • adatok sorban, kegészítő struktúra nélkül vannak tárolva
  • keresés: lineáris keresés
  • törlés, beszúrás, módosítás: lineáris keresés + 1 művelet

Hash-állomány

  • vödrös hashelés: adatállomány B vödörre osztása (minden rész minimum egy blokk)
    • vödörkatalógus: mutatókat tárol a vödrökre
    • hash függvény: leképzi a kulcsok értékkészletét a \([0, B-1]\) tartományra (pl: \(h(k) = (c * K) \mod B\) )
  • keresés: lineáris keresés a vödörben
    • (általánosan csak az állomány (½B)-ed részét kell átnézni ha egyforma hosszúak a vödrök)
  • törlés, beszúrás: lineáris keresés a vödörben + 1
  • módosítás:
    • ha nem módosul a kulcs: keresés + 1
    • ha módosul a kulcs: törlés + beszúrás (mivel máshova kerül)
  • hátrány: intervallumkeresést nem támogat

Indexelt állományok

  • két rész:
    • index állomány: kulcs + pointer párok (kulcs szerint mindig rendezve)
    • adatállomány: maga az adat
  • index állomány blocking factor-ja: \(f_i = \left \lfloor{\frac{b}{k + p}} \right \rfloor\)
  • sűrű index: index minden adatrekordhoz
  • ritka index: index az adatrekordok halmazához
  • támogatja az intervallumkeresést

Ritka index

  • az indexek adatblokkokat címeznek
  • blokkok száma: \(b_{ri} = \left \lceil{\frac{n_{ri}}{f_{ri}}} \right \rceil\), ahol ugye \(n_{ri} = b_{ri}\)
  • keresés: \(\left \lceil{\log_2 (M+1)} \right \rceil + 1\)
  • beszúrás:
    • ha befér adott vödörbe: belerakjuk
    • ha nem férbe: új vödör kérés, adott vödör elemeinek elosztása, legkisebb kulcsok meghatározása
  • törlés:
    • ha nem a legkisebb az adott vödörbe: töröljük
    • ha a legkisebb az adott vödörben: törlés + index állomány korrigálása
  • módosítás:
    • ha nem módosul a kulcs: keresés + 1
    • ha módosul a kulcs: törlés + beszúrás (mivel máshova kerül)
B*-fák
  • többszintes ritka indexek
  • előny: háttértár kihasználtsága változó méretű adatállomány esetén is kézben tartható
  • index állomány blocking factorja: \(f_i = \left \lfloor{\frac{b + k}{k + p}} \right \rfloor\)
  • fa magassága (Height of Tree): \(HT_i = \left \lceil{\log_{f_i} b_r} \right \rceil\)
  • keresés: \(HT_i + 1\)
  • beszúrás, módosítás, törlés: mint sima ritka intexnél (kiegyenlítettségre figyelni kell)

Sűrű index

  • az indexek adatrekordokat címeznek
  • önmagában nem állományszervezés
  • \(b_{si} = \left \lceil{\frac{n_{si}}{f_{si}}} \right \rceil\), ahol ugye \(n_{si} = b_{si}\)
  • előny:
    • adatállományt nem kell rendezetten tárolni (helymegtakarítás)
    • több kulcsos keresést tudunk biztosítani
  • rekordok szabadokká tehetők (rájuk csak sűrű index hivatkozik)
  • hátrány:
    • plusz helyigény
    • plusz egy blokkművelet
    • plusz adminisztráció
  • keresés: kulcs megkeresése, onnan mutatón keresztül elérjük az adatot
  • törlés: keresés + 1
  • beszúr: üres hely keresés, ha nincs akkor a végére
  • módosítás: módosítás háttértárra írása, ha kulcs akkor indexállomány újrarendezése

Invertálás

  • invertált állomány: az az indexállomány, amely nem kulcsmezőre tartalmaz indexeket (pl más keresést is támogatni akarunk)
  • invertált állomány mutatói:
    • fizikai címre, a konkrét blokkra mutatnak (kötötté teszi az rekordokat)
    • fizikai címre, egy sűrű indexállományra mutatnak (plusz egy iteráció a keresés, de szabadok maradnak a rekordok)
    • logikai mutatók, amik az adatállomány valamely kulcsának értékét tartalmazzák (ekkor ezt még fel kell oldani)

Változó hosszúságú rekordok kezelése

  • oka lehet:
    • mező hossza változó -> fix mutató van csak a rekordban, tényleges tartalom külön állományban
    • ismétlődő mezőcsoport van a rekordban -> mutatós módszer, vagy fix hely a max ismétlődésnek