Download presentation

Presentation is loading. Please wait.

Published byValerie Rhoad Modified about 1 year ago

1
CMU SCS Carnegie Mellon Univ. Dept. of Computer Science /615 – DB Applications Faloutsos & Pavlo Lecture#11 (R&G ch. 11) Hashing

2
CMU SCS Faloutsos - PavloCMU SCS /6152 Outline (static) hashing extendible hashing linear hashing Hashing vs B-trees

3
CMU SCS Faloutsos - PavloCMU SCS /6153 (Static) Hashing Problem: “find EMP record with ssn=123” What if disk space was free, and time was at premium?

4
CMU SCS Faloutsos - PavloCMU SCS /6154 Hashing A: Brilliant idea: key-to-address transformation: #0 page #123 page #999,999, ; Smith; Main str

5
CMU SCS Faloutsos - PavloCMU SCS /6155 Hashing Since space is NOT free: use M, instead of 999,999,999 slots hash function: h(key) = slot-id #0 page #123 page #999,999, ; Smith; Main str

6
CMU SCS Faloutsos - PavloCMU SCS /6156 Hashing Typically: each hash bucket is a page, holding many records: #0 page #h(123) M 123; Smith; Main str

7
CMU SCS Faloutsos - PavloCMU SCS /6157 Hashing Notice: could have clustering, or non-clustering versions: #0 page #h(123) M 123; Smith; Main str.

8
CMU SCS Faloutsos - PavloCMU SCS / Hashing Notice: could have clustering, or non-clustering versions: #0 page #h(123) M... EMP file 123; Smith; Main str ; Johnson; Forbes ave 345; Tompson; Fifth ave...

9
CMU SCS Faloutsos - PavloCMU SCS /6159 Indexing- overview hashing –hashing functions –size of hash table –collision resolution extendible hashing Hashing vs B-trees

10
CMU SCS Faloutsos - PavloCMU SCS /61510 Design decisions 1) formula h() for hashing function 2) size of hash table M 3) collision resolution method

11
CMU SCS Faloutsos - PavloCMU SCS /61511 Design decisions - functions Goal: uniform spread of keys over hash buckets Popular choices: –Division hashing –Multiplication hashing

12
CMU SCS Faloutsos - PavloCMU SCS /61512 Division hashing h(x) = (a*x+b) mod M eg., h(ssn) = (ssn) mod 1,000 –gives the last three digits of ssn M: size of hash table - choose a prime number, defensively (why?)

13
CMU SCS Faloutsos - PavloCMU SCS /61513 eg., M=2; hash on driver-license number (dln), where last digit is ‘gender’ (0/1 = M/F) in an army unit with predominantly male soldiers Thus: avoid cases where M and keys have common divisors - prime M guards against that! Division hashing

14
CMU SCS Faloutsos - PavloCMU SCS /61514 Multiplication hashing h(x) = [ fractional-part-of ( x * φ ) ] * M φ: golden ratio ( = ( sqrt(5)-1)/2 ) in general, we need an irrational number advantage: M need not be a prime number but φ must be irrational

15
CMU SCS Faloutsos - PavloCMU SCS /61515 Other hashing functions quadratic hashing (bad)...

16
CMU SCS Faloutsos - PavloCMU SCS /61516 Other hashing functions quadratic hashing (bad)... conclusion: use division hashing

17
CMU SCS Faloutsos - PavloCMU SCS /61517 Design decisions 1) formula h() for hashing function 2) size of hash table M 3) collision resolution method

18
CMU SCS Faloutsos - PavloCMU SCS /61518 Size of hash table eg., 50,000 employees, 10 employee- records / page Q: M=?? pages/buckets/slots

19
CMU SCS Faloutsos - PavloCMU SCS /61519 Size of hash table eg., 50,000 employees, 10 employees/page Q: M=?? pages/buckets/slots A: utilization ~ 90% and –M: prime number Eg., in our case: M= closest prime to 50,000/10 / 0.9 = 5,555

20
CMU SCS Faloutsos - PavloCMU SCS /61520 Design decisions 1) formula h() for hashing function 2) size of hash table M 3) collision resolution method

21
CMU SCS Faloutsos - PavloCMU SCS /61521 Collision resolution Q: what is a ‘collision’? A: ??

22
CMU SCS Faloutsos - PavloCMU SCS /61522 Collision resolution #0 page #h(123) M 123; Smith; Main str.

23
CMU SCS Faloutsos - PavloCMU SCS /61523 Collision resolution Q: what is a ‘collision’? A: ?? Q: why worry about collisions/overflows? (recall that buckets are ~90% full) A: ‘birthday paradox’

24
CMU SCS Faloutsos - PavloCMU SCS /61524 Collision resolution open addressing –linear probing (ie., put to next slot/bucket) –re-hashing separate chaining (ie., put links to overflow pages)

25
CMU SCS Faloutsos - PavloCMU SCS /61525 Collision resolution #0 page #h(123) M 123; Smith; Main str. linear probing:

26
CMU SCS Faloutsos - PavloCMU SCS /61526 Collision resolution #0 page #h(123) M 123; Smith; Main str. re-hashing h1() h2()

27
CMU SCS Faloutsos - PavloCMU SCS /61527 Collision resolution 123; Smith; Main str. separate chaining

28
CMU SCS Faloutsos - PavloCMU SCS /61528 Design decisions - conclusions function: division hashing –h(x) = ( a*x+b ) mod M size M: ~90% util.; prime number. collision resolution: separate chaining –easier to implement (deletions!); – no danger of becoming full

29
CMU SCS Faloutsos - PavloCMU SCS /61529 Outline (static) hashing extendible hashing linear hashing Hashing vs B-trees

30
CMU SCS Faloutsos - PavloCMU SCS /61530 Problem with static hashing problem: overflow? problem: underflow? (underutilization)

31
CMU SCS Faloutsos - PavloCMU SCS /61531 Solution: Dynamic/extendible hashing idea: shrink / expand hash table on demand....dynamic hashing Details: how to grow gracefully, on overflow? Many solutions - One of them: ‘extendible hashing’ [Fagin et al]

32
CMU SCS Faloutsos - PavloCMU SCS /61532 Extendible hashing #0 page #h(123) M 123; Smith; Main str.

33
CMU SCS Faloutsos - PavloCMU SCS /61533 Extendible hashing #0 page #h(123) M 123; Smith; Main str. solution: don’t overflow – instead: SPLIT the bucket in two

34
CMU SCS Faloutsos - PavloCMU SCS /61534 Extendible hashing in detail: keep a directory, with ptrs to hash-buckets Q: how to divide contents of bucket in two? A: hash each key into a very long bit string; keep only as many bits as needed Eventually:

35
CMU SCS Faloutsos - PavloCMU SCS /61535 Extendible hashing directory

36
CMU SCS Faloutsos - PavloCMU SCS /61536 Extendible hashing directory

37
CMU SCS Faloutsos - PavloCMU SCS /61537 Extendible hashing directory split on 3-rd bit

38
CMU SCS Faloutsos - PavloCMU SCS /61538 Extendible hashing directory new page / bucket

39
CMU SCS Faloutsos - PavloCMU SCS /61539 Extendible hashing directory (doubled) new page / bucket

40
CMU SCS Faloutsos - PavloCMU SCS /61540 Extendible hashing BEFOREAFTER

41
CMU SCS Faloutsos - PavloCMU SCS /61541 Extendible hashing BEFOREAFTER global local

42
CMU SCS Faloutsos - PavloCMU SCS /61542 Extendible hashing BEFOREAFTER Do all splits lead to directory doubling? A:

43
CMU SCS Faloutsos - PavloCMU SCS /61543 Extendible hashing BEFOREAFTER Do all splits lead to directory doubling? A:NO! (most don’t)

44
CMU SCS Faloutsos - PavloCMU SCS /61544 Extendible hashing BEFOREAFTER Give insertions, that cause split, but no directory dup.?

45
CMU SCS Faloutsos - PavloCMU SCS /61545 Extendible hashing BEFOREAFTER Give insertions, that cause split, but no directory dup.? A: 000… and 001…

46
CMU SCS Faloutsos - PavloCMU SCS /61546 Extendible hashing Summary: directory doubles on demand or halves, on shrinking files needs ‘local’ and ‘global’ depth

47
CMU SCS Faloutsos - PavloCMU SCS /61547 Outline (static) hashing extendible hashing linear hashing Hashing vs B-trees

48
CMU SCS Faloutsos - PavloCMU SCS /61548 Linear hashing - overview Motivation main idea search algo insertion/split algo deletion

49
CMU SCS Faloutsos - PavloCMU SCS /61549 Linear hashing Motivation: ext. hashing needs directory etc etc; which doubles (ouch!) Q: can we do something simpler, with smoother growth?

50
CMU SCS Faloutsos - PavloCMU SCS /61550 Linear hashing Motivation: ext. hashing needs directory etc etc; which doubles (ouch!) Q: can we do something simpler, with smoother growth? A: split buckets from left to right, regardless of which one overflowed (‘crazy’, but it works well!) - Eg.:

51
CMU SCS Faloutsos - PavloCMU SCS /61551 Linear hashing Initially: h(x) = x mod N (N=4 here) Assume capacity: 3 records / bucket Insert key ‘17’ bucket- id

52
CMU SCS Faloutsos - PavloCMU SCS /61552 Linear hashing Initially: h(x) = x mod N (N=4 here) bucket- id overflow of bucket#1

53
CMU SCS Faloutsos - PavloCMU SCS /61553 Linear hashing Initially: h(x) = x mod N (N=4 here) bucket- id overflow of bucket#1 Split #0, anyway!!!

54
CMU SCS Faloutsos - PavloCMU SCS /61554 Linear hashing Initially: h(x) = x mod N (N=4 here) bucket- id Split #0, anyway!!! Q: But, how?

55
CMU SCS Faloutsos - PavloCMU SCS /61555 Linear hashing A: use two h.f.: h0(x) = x mod N h1(x) = x mod (2*N) bucket- id

56
CMU SCS Faloutsos - PavloCMU SCS /61556 Linear hashing - after split: A: use two h.f.: h0(x) = x mod N h1(x) = x mod (2*N) bucket- id

57
CMU SCS Faloutsos - PavloCMU SCS /61557 Linear hashing - after split: A: use two h.f.: h0(x) = x mod N h1(x) = x mod (2*N) bucket- id overflow 4

58
CMU SCS Faloutsos - PavloCMU SCS /61558 Linear hashing - after split: A: use two h.f.: h0(x) = x mod N h1(x) = x mod (2*N) bucket- id overflow 4 split ptr

59
CMU SCS Faloutsos - PavloCMU SCS /61559 Linear hashing - overview Motivation main idea search algo insertion/split algo deletion

60
CMU SCS Faloutsos - PavloCMU SCS /61560 Linear hashing - searching? h0(x) = x mod N (for the un-split buckets) h1(x) = x mod (2*N) (for the splitted ones) bucket- id overflow 4 split ptr

61
CMU SCS Faloutsos - PavloCMU SCS /61561 Linear hashing - searching? Q1: find key ‘6’? Q2: find key ‘4’? Q3: key ‘8’? bucket- id overflow 4 split ptr

62
CMU SCS Faloutsos - PavloCMU SCS /61562 Linear hashing - searching? Algo to find key ‘k’: compute b= h0(k); // original slot if b

63
CMU SCS Faloutsos - PavloCMU SCS /61563 Linear hashing - overview Motivation main idea search algo insertion/split algo deletion

64
CMU SCS Faloutsos - PavloCMU SCS /61564 Linear hashing - insertion? Algo: insert key ‘k’ compute appropriate bucket ‘b’ if the overflow criterion is true split the bucket of ‘split-ptr’ split-ptr ++ (*)

65
CMU SCS Faloutsos - PavloCMU SCS /61565 Linear hashing - insertion? notice: overflow criterion is up to us!! Q: suggestions?

66
CMU SCS Faloutsos - PavloCMU SCS /61566 Linear hashing - insertion? notice: overflow criterion is up to us!! Q: suggestions? A1: space utilization >= u-max

67
CMU SCS Faloutsos - PavloCMU SCS /61567 Linear hashing - insertion? notice: overflow criterion is up to us!! Q: suggestions? A1: space utilization >= u-max A2: avg length of ovf chains > max-len A3:....

68
CMU SCS Faloutsos - PavloCMU SCS /61568 Linear hashing - insertion? Algo: insert key ‘k’ compute appropriate bucket ‘b’ if the overflow criterion is true split the bucket of ‘split-ptr’ split-ptr ++ (*) what if we reach the right edge??

69
CMU SCS Faloutsos - PavloCMU SCS /61569 Linear hashing - split now? h0(x) = x mod N (for the un-split buckets) h1(x) = x mod (2*N) for the splitted ones) split ptr

70
CMU SCS Faloutsos - PavloCMU SCS /61570 Linear hashing - split now? h0(x) = x mod N (for the un-split buckets) h1(x) = x mod (2*N) (for the splitted ones) split ptr

71
CMU SCS Faloutsos - PavloCMU SCS /61571 Linear hashing - split now? h0(x) = x mod N (for the un-split buckets) h1(x) = x mod (2*N) (for the splitted ones) split ptr

72
CMU SCS Faloutsos - PavloCMU SCS /61572 Linear hashing - split now? h0(x) = x mod N (for the un-split buckets) h1(x) = x mod (2*N) (for the splitted ones) split ptr

73
CMU SCS Faloutsos - PavloCMU SCS /61573 Linear hashing - split now? split ptr this state is called ‘full expansion’

74
CMU SCS Faloutsos - PavloCMU SCS /61574 Linear hashing - observations In general, at any point of time, we have at most two h.f. active, of the form: h n (x) = x mod (N * 2 n ) h n+1 (x) = x mod (N * 2 n+1 ) (after a full expansion, we have only one h.f.)

75
CMU SCS Faloutsos - PavloCMU SCS /61575 Linear hashing - overview Motivation main idea search algo insertion/split algo deletion

76
CMU SCS Faloutsos - PavloCMU SCS /61576 Linear hashing - deletion? reverse of insertion:

77
CMU SCS Faloutsos - PavloCMU SCS /61577 Linear hashing - deletion? reverse of insertion: if the underflow criterion is met –contract!

78
CMU SCS Faloutsos - PavloCMU SCS /61578 Linear hashing - how to contract? h0(x) = mod N (for the un-split buckets) h1(x) = mod (2*N) (for the splitted ones) split ptr

79
CMU SCS Faloutsos - PavloCMU SCS /61579 Linear hashing - how to contract? h0(x) = mod N (for the un-split buckets) h1(x) = mod (2*N) (for the splitted ones) split ptr ??

80
CMU SCS Faloutsos - PavloCMU SCS /61580 Linear hashing - how to contract? h0(x) = mod N (for the un-split buckets) h1(x) = mod (2*N) (for the splitted ones) split ptr

81
CMU SCS Faloutsos - PavloCMU SCS /61581 Linear hashing - how to contract? h0(x) = mod N (for the un-split buckets) h1(x) = mod (2*N) (for the splitted ones) split ptr

82
CMU SCS Faloutsos - PavloCMU SCS /61582 Linear hashing - how to contract? h0(x) = mod N (for the un-split buckets) h1(x) = mod (2*N) (for the splitted ones) split ptr

83
CMU SCS Faloutsos - PavloCMU SCS /61583 Outline (static) hashing extendible hashing linear hashing Hashing vs B-trees

84
CMU SCS Faloutsos - PavloCMU SCS /61584 Hashing - pros?

85
CMU SCS Faloutsos - PavloCMU SCS /61585 Hashing - pros? Speed, –on exact match queries –on the average

86
CMU SCS Faloutsos - PavloCMU SCS /61586 B(+)-trees - pros?

87
CMU SCS Faloutsos - PavloCMU SCS /61587 B(+)-trees - pros? Speed on search: –exact match queries, worst case –range queries –nearest-neighbor queries Speed on insertion + deletion smooth growing and shrinking (no re-org)

88
CMU SCS B(+)-trees vs Hashing Speed on search: –exact match queries, worst case –range queries –nearest-neighbor queries Speed on insertion + deletion smooth growing and shrinking (no re-org) Speed, –on exact match queries –on the average Faloutsos - PavloCMU SCS /61588

89
CMU SCS Faloutsos - PavloCMU SCS /61589 Conclusions B-trees and variants: in all DBMSs hash indices: in some –(but hashing is useful for joins - later...)

Similar presentations

© 2017 SlidePlayer.com Inc.

All rights reserved.

Ads by Google