1 / 28

3. Razpršene datoteke

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

devona
Download Presentation

3. Razpršene datoteke

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 3. Razpršene datoteke • Zapisi so urejeni po vrednosti ključa. • lego zapisa določarazprš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

  2. 3. Razpršene (hash) datoteke • zapisi so urejeni po vrednosti ključa. • lego zapisa določarazprš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 K Statično razprševanje – število blokov je fiksno Ostali podatki zapisa Razpršilna funkcija

  3. Variante razprševanja • Razpršilna funkcija takoj izračuna naslov fizičnega bloka v katerem so podatki // slika na prejšnji prosojnici • Primerno za primarni indeks • Razpršilna funkcija izračuna naslov bloka v katerem se nahaja kazalec na blok s podatki // slika • Primerno za sekundarne indekse K Razpršilna funkcija Ostali podatki zapisa Indeks

  4. Prednosti 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

  5. Primer 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

  6. d a e c b Primer (težav) pri dodajanju zapisov • Fizični blok ima 2 zapisa 0 1 2 3 DODAJ: a,b,c,d h(a) = 1 h(b) = 2 h(c) = 1 h(d) = 0 DODAJ: e h(e) = 1kolizija!!!!

  7. ? Primer (težav) pri brisanju zapisov Briši:ef 0 1 2 3 a • 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 b d c d c e f g

  8. Ukrepi pri odpravljanju težav z naraščanjem velikosti datotek z razpršeno datotečno organizacijo • Uporabljamo prelivna področja in po potrebi izvajamo reorganizacije • Uporabljamo dinamič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 • …

  9. Extensible • Linear • also others ... How do we cope with growth? • Overflows and reorganizations • Dynamic hashing: # of buckets may vary

  10. Extensible hashing: two ideas (a) Use i of b bits output by hash function b h(K)  use i grows over time…. For example, b=32 00110101

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

  12. Extensible 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

  13. i = 2 00 01 10 11 1 1 2 1010 New directory 2 1100 Example: h(k) is 4 bits; 2 keys/block (j) 1 0001 i = 1 1001 1100 Insert 1010

  14. 2 0000 0001 2 0111 2 2 Example continued i = 2 00 01 10 11 1 0001 0111 1001 1010 Insert: 0111 0000 1100

  15. i = 3 000 001 010 011 100 101 110 111 3 1001 1001 2 1001 1010 3 1010 1100 2 Example continued 0000 2 0001 i = 2 00 01 10 11 0111 2 Insert: 1001

  16. Extensible hashing: deletion • Reverse insert procedure … • Example: Walk thru insert example in reverse!

  17. Indirection (Not bad if directory in memory) Directory doubles in size (First it fits in memory, then it does not -> sudden performance degradation) - - Summary Extensible hashing + Can handle growing files - without full reorganizations Only one data block examined +

  18. Two ideas: b (a) Use ilow order bits of hash 01110101 grows i (b) File grows linearly Linear hashing: grow # of buckets by one -> No bucket directory needed

  19. Linear 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

  20. 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 Example:2 keys/block, b=4 bits, n=2, i =1 • insert 0101 00 01 • now r=4 >1.7n -> get new bucket 10and distribute keys btw buckets 00 and 10 0000 0101 1010 1111

  21. 1010 -> n=3, i =2; distribute keys btw buckets 00 and 10: 000110 0000 0101 1010 1111

  22. 0001 n=3, i =2; insert 0001: • can have overflow chains! 000110 0000 0101 1010 1111

  23. n=3, i =2 0001 • insert 0111 0111 000110 • bucket 11 not in use-> redirect to 01 0000 0101 1010 1111 • now r=6 > 1.7n-> get new bucket 11

  24. 1111 0111 0001 n=4, i =2; distribute keys btw 01 and 11 0001 0111 00011011 0000 0101 1010 1111

  25. 3 0101 0101 101 100 0 0 0 0 101 110 111 100 101 Example Continued:How to grow beyond this? i = 2 00 01 10 11 0000 0101 1010 1111 0101 . . . m = 11 (max used block)

  26. Summary Linear 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 (?) + -

  27. Summary Hashing - How it works - Dynamic hashing - Extensible - Linear

  28. Next: • Indexing vs Hashing • Index definition in SQL

More Related