3. razpršene datoteke
DESCRIPTION
3. Razpršene datoteke. Zapisi so urejeni po vrednosti ključa. l ego zapisa določa razpršilna funkcija r: K (ljuč) -> N (aslov zapisa) razpršilna funkcija priredi zapisu na osnovi njegovega ključa k naslov polja ali skupine polj n, v katero se zapis shrani - PowerPoint PPT PresentationTRANSCRIPT
3. Razpršene datoteke3. Razpršene datoteke
Zapisi so urejeni po vrednosti ključa. lego zapisa določa razpršilna funkcija
r: K(ljuč) -> N(aslov zapisa) razpršilna funkcija priredi zapisu na osnovi njegovega
ključa k naslov polja ali skupine polj n, v katero se zapis shrani
ker je pričakovano število zapisov v datoteki praviloma veliko manjše od števila možnih vrednosti ključa, je naloga funkcije r čim enakomernejša porazdelitev vrednosti ključev zapisov preko naslovnega področja
3. Razpršene (hash) datoteke3. Razpršene (hash) datoteke zapisi so urejeni po vrednosti ključa. lego zapisa določa razpršilna funkcija
Ak=razpršilna_funkcija(KljučK) razpršilna funkcija priredi zapisu na osnovi njegovega
ključa K naslov polja (ali skupine polj) Ak, v katero se zapis shrani
A0 A1 A2 A3 . . . . . . Ak Ak+1 . . . . . .
K…
K
Razpršilnafunkcija
Ostali podatki zapisa
Statično razprševanje – število blokov je
fiksno
Variante razprševanjaVariante razprševanja1. Razpršilna funkcija takoj izračuna naslov fizičnega bloka v
katerem so podatki // slika na prejšnji prosojnici
– Primerno za primarni indeks
2. Razpršilna funkcija izračuna naslov bloka v katerem se nahaja kazalec na blok s podatki // slika
– Primerno za sekundarne indekse
. . . .
K
Razpršilnafunkcija
KIndeks
Ostali podatki zapisa
Prednosti in težave z razprševanjemPrednosti in težave z razprševanjem
Iskanje je zelo hitro (ko izračunaš vrednost razpršilne funkcije dobiš naslov bloka in ga le prebereš z diska za dostop do podatka potrebujemo le en dostop do diska)
Težko definirati dobro razpršilno funkcijo• Prihaja do kolizij (več kandidatov za enak naslov)• Prihaja do pretirane porabe prostora (datoteka ima veliko
‘lukenj’)
Ni primerno za zaporedno obdelavo podatkov
Primer razpršilne funkcijePrimer razpršilne funkcije
ključ = ‘x1 x2 … xn’ // niz n znakov Imamo b fizičnih blokov h = (x1 + x2 + … + xn) mod b
{0, 1, …, b-1} Kdaj bo predlagana rapršilna funkcija primerna?
– če je razmerje med pričakovanim številom ključev / fizični blok približno enako za vse fizične bloke
Primer (težav) pri dodajanju zapisovPrimer (težav) pri dodajanju zapisovFizični blok ima 2 zapisa
DODAJ: a,b,c,d
h(a) = 1
h(b) = 2
h(c) = 1
h(d) = 0
0
1
2
3
d
ac
b
h(e) = 1 kolizija!!!!
e
DODAJ: e
Primer (težav) pri brisanju zapisovPrimer (težav) pri brisanju zapisov
0
1
2
3
a
bc
e
d
Briši:ef
fg
cd
? Izkoristek prostora =
– število uporabljenih ključev / maximalna zapolnjenost blokov
Naj bo med 50% in 80%– Če je < 50% pretirana izguba prostora– Če je >80% uporaba prelivnega področja je močno odvisna od kakovosti razpršilne funkcije in od številka ključev v bloku
Uporabljamo prelivna področja in po potrebi izvajamo reorganizacije
Uporabljamo dinamično razprševanjedinamično razprševanje – število fizičnih blokov se lahko spreminja– Razširljivo // uporabimo le i bitov vrednosti
razpršilne funkcije, i se s časom povečuje ali uporabi direktorij kazalcev na fizične bloke (v direktoriju je 2i kazalcev)
– Linearno // število fiz. blokov se povečuje za 1– …
Ukrepi pri odpravljanju težav z Ukrepi pri odpravljanju težav z naraščanjem velikosti datotek z naraščanjem velikosti datotek z razpršeno datotečno organizacijorazpršeno datotečno organizacijo
How do we cope with growth?How do we cope with growth?
Overflows and reorganizations Dynamic hashing: # of buckets may vary
ExtensibleLinearalso others ...
Extensible hashing:Extensible hashing: two ideas two ideas
(a) Use i of b bits output by hash function
b
h(K)
use i grows over time….
00110101
For example, b=32For example, b=32
(b) Use directory
h(K)[i ] to bucket
.
.
.
.
Directory contains 2i pointers to buckets, and stores i.
Each bucket stores j, indicating #bits used for placing the records in this block (j i)
Extensible Hashing: InsertionExtensible Hashing: Insertion
If there's room in bucket h(k)[i], place record there; Otherwise …
If j=i, set i=i+1 and double the directory If j<i, split the block in two, distribute records
among them now using j+1 bits of h(k); (Repeat until some records end up in the new bucket); Update pointers of bucket array
See the next example
Example:Example: h(k) is 4 bits; 2 keys/block h(k) is 4 bits; 2 keys/block
i = 1
1
1
0001
1001
1100
Insert Insert 1101001011100
1010
New directory
200
01
10
11
i =
2
2
(j)
10001
21001
1010
21100
Insert:
0111
0000
00
01
10
11
2i =
Example continued
0111
0000
0111
0001
2
2
00
01
10
11
2i =
21001
1010
21100
20111
20000
0001
Insert:
1001
Example continued
1001
1001
1010
000
001
010
011
100
101
110
111
3i =
3
3
Extensible hashing: Extensible hashing: deletiondeletion
Reverse insert procedure …
Example: Walk thru insert example in reverse!
Extensible hashingExtensible hashing
Can handle growing files
- without full reorganizations
Summary
+
Indirection
(Not bad if directory in memory)
Directory doubles in size
(First it fits in memory, then it does not sudden performance degradation)
-
-
Only one data block examined+
Linear hashing:Linear hashing: grow # of buckets by one grow # of buckets by one
No bucket directory needed
Two ideas:Two ideas:(a) Use i low order bits of hash
01110101grows
b
i(b) File grows linearly
Linear Hashing: ParametersLinear Hashing: Parameters
n: number of buckets in use– buckets numbered 0…n-1
i: number of bits of h(k) used to address buckets r: number of records in hash table
– ratio r/n limited to fit an avg bucket in a block– next example: r 1.7n, and block holds 2 records
=> AVG bucket occupancy is 1.7/2 = 0.85 of a block
)log(ni
Example:Example: 2 keys/block, b=4 bits, n=2, 2 keys/block, b=4 bits, n=2, i i =1=1
00 01
1111
0000
1010
If h(k)[i ] = (a1 … ai)2 < n, then
look at bucket h(k)[i ]; else
look at bucket h(k)[i ] - 2i -1 = (0a2 … ai)2
Rule
• insert 0101
0101
• now r=4 >1.7n get new bucket
10and distribute keys btw
buckets 00 and 10
n=3, i n=3, i =2; =2; distribute keys btw buckets 00 and 10:distribute keys btw buckets 00 and 10:
00 01 10
0101
1111
0000
1010
1010
n=3, i n=3, i =2; =2; insert 00insert 000101::
00 01 10
0101
1111
0000
0001
1010
• can have overflow chains!
n=3, i n=3, i =2=2
00 01 10
0101
1111
0000 1010
0001 • insert 0111
• bucket 11 not in use redirect to 01
0111
• now r=6 > 1.7n-> get new bucket 11
n=4, i n=4, i =2; distribute keys btw =2; distribute keys btw 0101 and and 1111
00 01 10 11
0101
1111
0000 1010
00010111
1111
01110001
Example Continued:Example Continued: How to grow beyond this?How to grow beyond this?
00 01 10 11
111110100101
0101
0000
m = 11 (max used block)
i = 2
0 0 0 0 101 110 111
3
. . .
100
100
101
101
0101
0101
Linear HashingLinear Hashing
Can handle growing files- without full reorganizations
No indirection directory of extensible hashing
Can have overflow chains- but probability of long chains can be kept low by controlling the r/n fill ratio (?)
Summary
+
+
-
Hashing
- How it works
- Dynamic hashing
- Extensible
- Linear
Summary
Next:Next:
Indexing vs HashingIndex definition in SQL