3. razpršene datoteke

28
3. Razpršene datoteke 3. 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

Upload: devona

Post on 07-Jan-2016

49 views

Category:

Documents


0 download

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 Presentation

TRANSCRIPT

Page 1: 3. Razpršene datoteke

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

Page 2: 3. Razpršene datoteke

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

Page 3: 3. Razpršene datoteke

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

Page 4: 3. Razpršene datoteke

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

Page 5: 3. Razpršene datoteke

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

Page 6: 3. Razpršene datoteke

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

Page 7: 3. Razpršene datoteke

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

Page 8: 3. Razpršene datoteke

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

Page 9: 3. Razpršene datoteke

How do we cope with growth?How do we cope with growth?

Overflows and reorganizations Dynamic hashing: # of buckets may vary

ExtensibleLinearalso others ...

Page 10: 3. Razpršene datoteke

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

Page 11: 3. Razpršene datoteke

(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)

Page 12: 3. Razpršene datoteke

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

Page 13: 3. Razpršene datoteke

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)

Page 14: 3. Razpršene datoteke

10001

21001

1010

21100

Insert:

0111

0000

00

01

10

11

2i =

Example continued

0111

0000

0111

0001

2

2

Page 15: 3. Razpršene datoteke

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

Page 16: 3. Razpršene datoteke

Extensible hashing: Extensible hashing: deletiondeletion

Reverse insert procedure …

Example: Walk thru insert example in reverse!

Page 17: 3. Razpršene datoteke

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+

Page 18: 3. Razpršene datoteke

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

Page 19: 3. Razpršene datoteke

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

Page 20: 3. Razpršene datoteke

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

Page 21: 3. Razpršene datoteke

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

Page 22: 3. Razpršene datoteke

n=3, i n=3, i =2; =2; insert 00insert 000101::

00 01 10

0101

1111

0000

0001

1010

• can have overflow chains!

Page 23: 3. Razpršene datoteke

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

Page 24: 3. Razpršene datoteke

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

Page 25: 3. Razpršene datoteke

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

Page 26: 3. Razpršene datoteke

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

+

+

-

Page 27: 3. Razpršene datoteke

Hashing

- How it works

- Dynamic hashing

- Extensible

- Linear

Summary

Page 28: 3. Razpršene datoteke

Next:Next:

Indexing vs HashingIndex definition in SQL