DYNAMICKÉ HAŠOVÁNÍ
description
Transcript of DYNAMICKÉ HAŠOVÁNÍ
DYNAMICKÉ HAŠOVÁNÍ
je metoda průběžné rekonstrukce (reorganizace) datových struktur.
Poprvé popsána v roce 1981.
Základní princip
• V průběhu rekonstrukce se nezastaví zpracování (modifikace databáze, vyhledávací operace, atd.).
• Operace se provádějí nad původní strukturou a paralelně probíhá reorganizace (vzniká nová datová struktura).
• Po vytvoření nové struktury se stará „zapomene" a operace se provádějí nad touto novou strukturou.
Důvody pro přechod na dynamické hašování
Velikost externí paměti, potřebné pro
ukládání dat, by se měla pružně měnit
podle stávajícího objemu dat.
Počet přístupů na disk pro většinu
požadavků by měl být konstantní.
ROZŠIŘITELNÉ HAŠOVÁNÍ
• Zavádí pomocnou strukturu - adresář.
• Záznamy adresáře obsahují odkazy do primárního souboru.
• Některé záznamy adresáře mohou obsahovat totožné odkazy (odkazy do totožných logických bloků, tzv. kapes).
Hašovací funkce h
• Transformuje hodnotu primárního klíče k na adresu, která spadá do intervalu <0,2r+1-1>
• r+1 Délka reprezentace hodnoty h(k) v bitech (počet bitů). Typická hodnota je 32.
Mějme klíč k a hašovací funkci
h(k) = brbr-1 .... bo
Z adresy brbr-1 .... bo vybereme pouze část (d bitů) a těchto d bitů se jako offset adresy vloží do přidané struktury, adresáře. Velikost d se mění v souvislosti s nárůstem
záznamů v databázi.
Prázdný soubor
Adresář Logický blok primárního souboru
Počet bitů adresy v offsetu (i)
Počet bitů , v kolika se shodují adresyv primárním souboru (j )
Je-li i=1, pak adresář obsahuje pouze dva záznamy:
0 Odkaz na záznamy, jejichž adresa začíná 0.
1 Odkaz na záznamy, jejichž adresa začíná 1.
Příklad: Mějme následující záznamy, které se budou zapisovat do
databáze pomocí rozšiřitelného hašování.
Předpokládejme, že primárním klíčem je atribut Město a hašovací funkce h generuje následující adresy:
Dále předpokládejme, že každá kapsa smí obsahovat (pro jednoduchost) maximálně
2 záznamy.
Uložte záznamy:
(Opava, Lipová 5),
(Zlín, Úzká 8),
(Lipník, Anglická 142/a)
Zatím jsme vystačili s jedním bitem offsetu. Záznamy se ukládaly do dvou různých kapes. V jedné kapse jsou záznamy, jejichž adresa
začíná 0, v druhé kapse záznamy, jejichž adresa začíná
1(tato kapsa je plná).
Uložte záznam (Ostrava, Nádražní 128)POZOR! Kapsa, kde se má záznam ukládat je zaplněna. Je nutno alokovat další kapsu (logický blok) a přeorganizovat záznamy včetně úpravy
adresáře.
00
01
10
11
2
Zlín
1
Lipník
Ostrava
2
Opava
2
Uložte záznam (Brno, Dlouhá 25)
00
01
10
11
2
Zlín
Brno
1
Lipník
Ostrava
2
Opava
2
Uložte záznam (Kroměříž, Jánská 100)
00
01
10
11
2
Zlín
Brno
1
Lipník
Ostrava
2
Opava
Kroměříž
2
Uložte záznam:
(Olomouc, Francouzská 1725).
Kapsa, do které je nutno umístit záznam, je zaplněna. Proto dojde ke
štěpení kapsy a zároveň se zvětší offset.
Opava
Kroměříž
2
000
001
010
011
100
101
110
111
3
Zlín
Brno
1
Lipník
Ostrava
3
Olomouc
3
OBECNÉ SCHÉMA ROZŠIŘITELNÉHO HAŠOVÁNÍ
i
J1
J2
J3
i Počet bitů offsetu (adresy, která je umístěna v adresáři).
ji Počet bitů, v kolika se shodují adresy záznamů, uložených v i-té kapse.
Je-li ji =1, v dané kapse je uložena polovina všech záznamů souboru.
S nárůstem záznamů se zvětšuje zaplněnost kapes. Je-li kapsa zaplněna, musí se alokovat nová kapsa (logický blok). Zároveň se musí zvětšit počet bitů v adresáři o 1 a dynamicky se musí přesunout (reorganizovat) příslušné záznamy v primárním souboru.