27
Métodos de Acesso Indice estruturado por Hash

Métodos de Acesso Indice estruturado por Hash. Plano Geral Vantagens e Limitações Hash Estático Hash Extensível Hash Linear Comparação entre Hash Extensível

Embed Size (px)

Citation preview

Page 1: Métodos de Acesso Indice estruturado por Hash. Plano Geral Vantagens e Limitações Hash Estático Hash Extensível Hash Linear Comparação entre Hash Extensível

Métodos de Acesso

Indice estruturado por Hash

Page 2: Métodos de Acesso Indice estruturado por Hash. Plano Geral Vantagens e Limitações Hash Estático Hash Extensível Hash Linear Comparação entre Hash Extensível

Plano Geral Vantagens e Limitações

Hash Estático

Hash Extensível

Hash Linear

Comparação entre Hash Extensível e Linear

Page 3: Métodos de Acesso Indice estruturado por Hash. Plano Geral Vantagens e Limitações Hash Estático Hash Extensível Hash Linear Comparação entre Hash Extensível

Vantagens e Limitações Hash : excelente para seleção por igualdade na chave . Não suporta seleção range (>, < ) B-Trees suportam seleção range e são quase tão boas quanto

Hash para igualdade. Muitos SGBDs só implementam índices estruturados por B-

Trees Técnica de indexação Hash é muito útil na implementação do

operador Junção, que inclu diversas seleções por igualdade Diferença de custo entre B-Tree e Hash é significativa

neste caso.

Page 4: Métodos de Acesso Indice estruturado por Hash. Plano Geral Vantagens e Limitações Hash Estático Hash Extensível Hash Linear Comparação entre Hash Extensível

Hash Estático

0

1

2

N-1

h

h(chave) mod N

chave

Páginas Primárias dos Buckets

Páginas de Overflow

Entradas do tipo <chave, * >

h = função hash

Page 5: Métodos de Acesso Indice estruturado por Hash. Plano Geral Vantagens e Limitações Hash Estático Hash Extensível Hash Linear Comparação entre Hash Extensível

Busca

0

1

2

5

h

h(14) mod 6 = 2

14

…< 14, * > h(x) = x

N = 6

4

3

….<14,* >

Page 6: Métodos de Acesso Indice estruturado por Hash. Plano Geral Vantagens e Limitações Hash Estático Hash Extensível Hash Linear Comparação entre Hash Extensível

Inserção

0

1

2

5

h

h(7) mod 6 = 1

7

…Inserindo < 7, * >

4

3

< 7, * >

Cheia

Page 7: Métodos de Acesso Indice estruturado por Hash. Plano Geral Vantagens e Limitações Hash Estático Hash Extensível Hash Linear Comparação entre Hash Extensível

Supressão

0

1

2

5

h

h(25) mod 6 = 1

25

…Suprimindo < 25, * >

4

3

< 25, * >

Page 8: Métodos de Acesso Indice estruturado por Hash. Plano Geral Vantagens e Limitações Hash Estático Hash Extensível Hash Linear Comparação entre Hash Extensível

Função Hash Componente importante da técnica hash

Deve distribuir valores das chaves de maneira uniforme nos buckets.

Número de buckets = N = parâmetro

h(x) = a*x + b , a, b : parâmetros de ajuste

Page 9: Métodos de Acesso Indice estruturado por Hash. Plano Geral Vantagens e Limitações Hash Estático Hash Extensível Hash Linear Comparação entre Hash Extensível

Custos Páginas primárias podem ser armazenadas em

páginas de disco sucessivas. Caso não haja overflow

Busca requer 1 I/O Inserção e Supressão requerem 2 I/O

Custo pode ser alto se existem muitas páginas de overflow.

Estratégia : criar inicialmente os buckets deixando 20% de área livre em cada um.

Page 10: Métodos de Acesso Indice estruturado por Hash. Plano Geral Vantagens e Limitações Hash Estático Hash Extensível Hash Linear Comparação entre Hash Extensível

Desvantagens do Hash Estático Número de buckets é fixo

Se arquivo encolhe muito, o espaço é desperdiçado, já que os buckets são fixos.

Crescimento do arquivo produz longas cadeias de páginas de overflow, prejudicando performance da busca.

Page 11: Métodos de Acesso Indice estruturado por Hash. Plano Geral Vantagens e Limitações Hash Estático Hash Extensível Hash Linear Comparação entre Hash Extensível

Alternativas Alternativa 1 :

Periodicamente, modificar a função hash e reestruturar todo o arquivo de modo a evitar páginas de overflow.

« Rehash » toma muito tempo Indice não pode ser utilizado durante o processo de

« rehash ». Alternativa 2 : Hash dinâmicos

Extensível Linear

Page 12: Métodos de Acesso Indice estruturado por Hash. Plano Geral Vantagens e Limitações Hash Estático Hash Extensível Hash Linear Comparação entre Hash Extensível

Hash Extensível Solução 1 : quando algum bucket ficar cheio

Dobrar o número de buckets Distribuir as entradas nos novos buckets Defeito : o arquivo todo deve ser lido e reorganizado e o

dobro de páginas devem ser escritas. Espaço em alguns buckets é alocado bem antes de sua

utilização efetiva. Solução 2 : utilizar um diretório de ponteiros para os

buckets. Dobrar o número de entradas no diretório Separar somente os buckets que ficaram cheios.

Page 13: Métodos de Acesso Indice estruturado por Hash. Plano Geral Vantagens e Limitações Hash Estático Hash Extensível Hash Linear Comparação entre Hash Extensível

Notação Para procurar, inserir ou suprimir entrada k*

Aplicar h(k)

h(k) identifica um bucket

Duas chaves k1 e k2 podem ter h(k1) = h(k2)

Page 14: Métodos de Acesso Indice estruturado por Hash. Plano Geral Vantagens e Limitações Hash Estático Hash Extensível Hash Linear Comparação entre Hash Extensível

Exemplo

00

01

10

11

2

Diretório dos Ponteiros

Profundidade Global

4* 12* 32* 16*

2

1* 5* 21*

2

10*

2

15* 7* 19*

2

Bucket A

Bucket B

Bucket C

Bucket D

Páginas do Indice

Profundidade Local

Page 15: Métodos de Acesso Indice estruturado por Hash. Plano Geral Vantagens e Limitações Hash Estático Hash Extensível Hash Linear Comparação entre Hash Extensível

Exemplo – inserção

00

01

10

11

2

Diretório

4* 12* 32* 16*

2

1* 5* 21*

2

10*

2

15* 7* 19*

2

Páginas do Indice

Inserindo 13*

13*

Page 16: Métodos de Acesso Indice estruturado por Hash. Plano Geral Vantagens e Limitações Hash Estático Hash Extensível Hash Linear Comparação entre Hash Extensível

Exemplo – inserção

00

01

10

11

2

Diretório

4* 12* 32* 16*

2

1* 5* 21*

2

10*

2

15* 7* 19*

2

Inserindo 20*

13*

4* 12* 20*

2

32* 16*

2

Page 17: Métodos de Acesso Indice estruturado por Hash. Plano Geral Vantagens e Limitações Hash Estático Hash Extensível Hash Linear Comparação entre Hash Extensível

Exemplo – inserção

00

01

10

11

2

Diretório

1* 5* 21*

2

10*

2

15* 7* 19*

2

Inserindo 20*

13*

4* 12* 20*

3

32* 16*

3

000

001

010

011

100

101

110

111

3

GlobalLocal

Bucket A1

Bucket A2

Bucket D

Bucket C

Bucket C

Page 18: Métodos de Acesso Indice estruturado por Hash. Plano Geral Vantagens e Limitações Hash Estático Hash Extensível Hash Linear Comparação entre Hash Extensível

Análise Se o diretório couber na memória

Seleção com igualdade : 1 I/0

Se o diretório tiver que ser armazenado em disco Seleção com igualdade : 2 I/0

Page 19: Métodos de Acesso Indice estruturado por Hash. Plano Geral Vantagens e Limitações Hash Estático Hash Extensível Hash Linear Comparação entre Hash Extensível

Hash Linear Assim como o Hash Extensível, o Hash

Linear é ideal para inserções e supressões; Vantagem sobre extensível

Lida muito bem com colisões Oferece muita flexibilidade

Cadeias de overflow podem tornar o hash linear inferior em performance ao hash extensivel

Page 20: Métodos de Acesso Indice estruturado por Hash. Plano Geral Vantagens e Limitações Hash Estático Hash Extensível Hash Linear Comparação entre Hash Extensível

Parâmetros e Contadores Nivel = indica a rodada atual

Inicializado com 0 Next = bucket que deve ser dividido, se necessário

Inicializado com 0 Nm = número de buckets na rodada m

N0 = N Nm = N*2m

Somente o bucket com número Next é dividido. Usa-se páginas de overflow para os outros buckets, se

ficarem cheios. Após divisão, Next é incrementado.

Page 21: Métodos de Acesso Indice estruturado por Hash. Plano Geral Vantagens e Limitações Hash Estático Hash Extensível Hash Linear Comparação entre Hash Extensível

Esquema Geral : rodada k

Bucket Nexta ser dividido

Imagens dos buckets divididos

Bucket b

Bucket b + m

Buckets existentesno inicio da rodada k

m = número de buckets da rodada k

Page 22: Métodos de Acesso Indice estruturado por Hash. Plano Geral Vantagens e Limitações Hash Estático Hash Extensível Hash Linear Comparação entre Hash Extensível

32* 44* 36*

9* 25* 5*

14*

31* 35* 7*

18* 10* 30*

11*

Páginas Primárias

Nivel = 0 , N = 4 = 22

Next = 0h0h1

00

01

10

11

000

001

010

011

Esta informação não é armazenada !

Inserção de 43*

h0(43) = 3 (11)

43*

Next = 1

44* 36*00

Page 23: Métodos de Acesso Indice estruturado por Hash. Plano Geral Vantagens e Limitações Hash Estático Hash Extensível Hash Linear Comparação entre Hash Extensível

32*

9* 25* 5*

14*

31* 35* 7*

18* 10* 30*

11*

Nivel = 0 , N = 4 = 22h0h1

00

01

10

11

000

001

010

011

Busca de 18*

h0(18) = 2 (10)

43*

Next = 1

44* 36*00

2 > Next

Bucket 2 não foi dividido ainda

100

Page 24: Métodos de Acesso Indice estruturado por Hash. Plano Geral Vantagens e Limitações Hash Estático Hash Extensível Hash Linear Comparação entre Hash Extensível

32*

9* 25* 5*

14*

31* 35* 7*

18* 10* 30*

11*

Nivel = 0 , N = 4 = 22h0h1

00

01

10

11

000

001

010

011

Busca de 32* e 44*h0(32) = 00

43*

Next = 1

44* 36*00

0 < Next

Bucket 0 já foi dividido ainda

h0(44) = 00

h1(32) = 000

h1(44) = 100Bucket 0 + 4

100

Page 25: Métodos de Acesso Indice estruturado por Hash. Plano Geral Vantagens e Limitações Hash Estático Hash Extensível Hash Linear Comparação entre Hash Extensível

Inserção de 37*

32*

9* 25* 5*

14*

31* 35* 7*

18* 10* 30*

11*

00

01

10

11

000

001

010

011 43*

Next = 1

44* 36*00100

h0(37) = 01

37*

Page 26: Métodos de Acesso Indice estruturado por Hash. Plano Geral Vantagens e Limitações Hash Estático Hash Extensível Hash Linear Comparação entre Hash Extensível

Inserção de 29*32*

9* 25* 5*

14*

31* 35* 7*

18* 10* 30*

11*

00

01

10

11

000

001

010

011 43*

Next =1

44* 36*00100

h0(29) = 01

37*

5* 37* 29*01101

Next =2

Page 27: Métodos de Acesso Indice estruturado por Hash. Plano Geral Vantagens e Limitações Hash Estático Hash Extensível Hash Linear Comparação entre Hash Extensível

Incremento de Nível32*

9* 25*

66*

31* 35* 7*

18* 10* 34*

11*

00

01

10

11

000

001

010

011 43*

44* 36*00100

h0(50) = 10

5* 37* 29*01101

14* 30* 22*10110

h1(50) = 010

50*Next =3

Next =0Nivel = 1

31*111 11 7*

43* 11*