Métodos de Acesso Indice estruturado por Hash. Plano Geral Vantagens e Limitações Hash Estático...

27
Métodos de Acesso Indice estruturado por Hash

Transcript of Métodos de Acesso Indice estruturado por Hash. Plano Geral Vantagens e Limitações Hash Estático...

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*