GBC053–Gerenciamento de Banco de Dados Índices baseados em Hash Ilmério Reis da Silva...

41
GBC053–Gerenciamento de Banco de Dados Índices baseados em Hash Ilmério Reis da Silva [email protected] www.facom.ufu.br/~ilmerio/gbd UFU/FACOM/BCC

Transcript of GBC053–Gerenciamento de Banco de Dados Índices baseados em Hash Ilmério Reis da Silva...

Page 1: GBC053–Gerenciamento de Banco de Dados Índices baseados em Hash Ilmério Reis da Silva ilmerio@facom.ufu.br ilmerio/gbd UFU/FACOM/BCC.

GBC053–Gerenciamento de Banco de DadosÍndices baseados em Hash

Ilmério Reis da [email protected]/~ilmerio/gbdUFU/FACOM/BCC

Page 2: GBC053–Gerenciamento de Banco de Dados Índices baseados em Hash Ilmério Reis da Silva ilmerio@facom.ufu.br ilmerio/gbd UFU/FACOM/BCC.

UFU/FACOM/BCC GBD Página:2

Roteiro

• Fundamentos

• Hash Estático

• Hash Extensível

• Hash Linear

• Considerações Finais

Page 3: GBC053–Gerenciamento de Banco de Dados Índices baseados em Hash Ilmério Reis da Silva ilmerio@facom.ufu.br ilmerio/gbd UFU/FACOM/BCC.

UFU/FACOM/BCC GBD Página:3

Fundamentos

Fundamentos

Page 4: GBC053–Gerenciamento de Banco de Dados Índices baseados em Hash Ilmério Reis da Silva ilmerio@facom.ufu.br ilmerio/gbd UFU/FACOM/BCC.

UFU/FACOM/BCC GBD Página:4

Características

• melhor desempenho em busca por igualdade na chave, mas

não melhora busca por intervalo (>, <)• alguns SGBDs só implementam Árvore B+• o PostgreSql implementa também Tabelas Hash• hash apresenta ganho significativo em junções EquiJoin• função hash. hash : set of keys → set of bucket ids• Hash ideal: distribuição uniforme das entradas nos buckets• conteúdo dos buckets: alternativas (1), (2) ou (3)

Page 5: GBC053–Gerenciamento de Banco de Dados Índices baseados em Hash Ilmério Reis da Silva ilmerio@facom.ufu.br ilmerio/gbd UFU/FACOM/BCC.

UFU/FACOM/BCC GBD Página:5

Função Hash

Exemplo:

hash(k) = h(k) mod B,

ondeh : set of keys → integerB : é o número de buckets disponíveisSE k é inteiro, use

– h(k) = k ou – h(k) = a k + b, sendo a e b empíricos.

Page 6: GBC053–Gerenciamento de Banco de Dados Índices baseados em Hash Ilmério Reis da Silva ilmerio@facom.ufu.br ilmerio/gbd UFU/FACOM/BCC.

UFU/FACOM/BCC GBD Página:6

Classificação • Hash Estático: conjunto de buckets fixo

problemas com cadeias de overflow.• Hash Dinâmico: cria buckets de forma dinâmica para

evitar ou reduzir cadeias de overflow Hash Extensível: usa mais um nível de indireção

diretório indexado por uma sequência de bits;havendo split, a sequência de bits cresce

Hash Linear: ameniza impacto do crescimento, ’tolerando’ poucos overflows;

novos buckets são criados linearmente• compromisso(trade-off) de Hash Estático x Hash Dinâmico

é análogo ao compromisso ISAM x B-Tree

Page 7: GBC053–Gerenciamento de Banco de Dados Índices baseados em Hash Ilmério Reis da Silva ilmerio@facom.ufu.br ilmerio/gbd UFU/FACOM/BCC.

UFU/FACOM/BCC GBD Página:7

Hash Estático

Hash Estático

Page 8: GBC053–Gerenciamento de Banco de Dados Índices baseados em Hash Ilmério Reis da Silva ilmerio@facom.ufu.br ilmerio/gbd UFU/FACOM/BCC.

UFU/FACOM/BCC GBD Página:8

Alocação de área para buckets

Alocação de N páginas sucessivas no disco

Cada bucket terá entradas de dados <chave*> (Alt. 1, 2 ou 3)

0

1

2

N-1

Páginas Primárias dos Buckets

Page 9: GBC053–Gerenciamento de Banco de Dados Índices baseados em Hash Ilmério Reis da Silva ilmerio@facom.ufu.br ilmerio/gbd UFU/FACOM/BCC.

UFU/FACOM/BCC GBD Página:9

Alocação dinâmica de páginas de overflowPáginas de overflow são alocadas de forma dinâmica

0

1

2

N-1

Páginas Primárias dos Buckets

Páginas de Overflow

Page 10: GBC053–Gerenciamento de Banco de Dados Índices baseados em Hash Ilmério Reis da Silva ilmerio@facom.ufu.br ilmerio/gbd UFU/FACOM/BCC.

UFU/FACOM/BCC GBD Página:10

Alocação dinâmica de páginas de overflowSeja k a chave do hash, então a localização do bucket será por meio da

função hash

Entradas do tipo <k* >

0

1

2

N-1

hash

hash(k)=h(k) mod N

k

Páginas Primárias dos Buckets

Páginas de Overflow

Page 11: GBC053–Gerenciamento de Banco de Dados Índices baseados em Hash Ilmério Reis da Silva ilmerio@facom.ufu.br ilmerio/gbd UFU/FACOM/BCC.

UFU/FACOM/BCC GBD Página:11

Busca

0

1

2

5

hash

h(14) mod 6 = 2

14

Páginas Primárias dos Buckets

< 14* > h(x) = x

N = 6

4

3

….<14*>

Page 12: GBC053–Gerenciamento de Banco de Dados Índices baseados em Hash Ilmério Reis da Silva ilmerio@facom.ufu.br ilmerio/gbd UFU/FACOM/BCC.

UFU/FACOM/BCC GBD Página:12

Inserção

0

1

2

5

hash

h(7) mod 6 = 1

7

Páginas Primárias dos Buckets

Inserindo < 7* >

4

3

< 7* >

Cheia

Page 13: GBC053–Gerenciamento de Banco de Dados Índices baseados em Hash Ilmério Reis da Silva ilmerio@facom.ufu.br ilmerio/gbd UFU/FACOM/BCC.

UFU/FACOM/BCC GBD Página:13

Remoção

0

1

2

5

hash

h(25) mod 6 = 1

25

…Suprimindo < 25* >

4

3

< 25* >

Páginas Primárias dos Buckets

Page 14: GBC053–Gerenciamento de Banco de Dados Índices baseados em Hash Ilmério Reis da Silva ilmerio@facom.ufu.br ilmerio/gbd UFU/FACOM/BCC.

UFU/FACOM/BCC GBD Página:14

Considerações finais sobre Hash Estático

• usualmente bucket = h(k) mod B, onde B = 2L

• custo depende do tamanho das cadeias de overflow• páginas primárias geralmente são contíguas no disco• bucket não é removido, mesmo ficando sem entradas• cadeia de overflow é dinâmica e degrada desempenho• uma estratégia é deixar 20% de área livre nas páginas

primárias

Page 15: GBC053–Gerenciamento de Banco de Dados Índices baseados em Hash Ilmério Reis da Silva ilmerio@facom.ufu.br ilmerio/gbd UFU/FACOM/BCC.

UFU/FACOM/BCC GBD Página:15

Hash Extensível

Hash Extensível

Page 16: GBC053–Gerenciamento de Banco de Dados Índices baseados em Hash Ilmério Reis da Silva ilmerio@facom.ufu.br ilmerio/gbd UFU/FACOM/BCC.

UFU/FACOM/BCC GBD Página:16

Evitando cadeias de overflowSolução ingênua

Seja B o número de páginas primárias

Solução ingênua:

SE inserção em página primária cheia faça B=2 * B reorganize todos os buckets

Problema: a reorganização de todos os buckets é computacionalmente cara, tornando esta solução inviável.

Page 17: GBC053–Gerenciamento de Banco de Dados Índices baseados em Hash Ilmério Reis da Silva ilmerio@facom.ufu.br ilmerio/gbd UFU/FACOM/BCC.

UFU/FACOM/BCC GBD Página:17

Evitando cadeias de overflowHash Extensível

• Um diretório de ponteiros para buckets• SE inserção em página primária cheia crie um novo bucket dobre o tamanho do diretório reorganize a função hash

Problema: a reorganização da função hash é um pouco complexa, mas considerando que o diretório cabe na memória, é computacionalmente viável.

Page 18: GBC053–Gerenciamento de Banco de Dados Índices baseados em Hash Ilmério Reis da Silva ilmerio@facom.ufu.br ilmerio/gbd UFU/FACOM/BCC.

UFU/FACOM/BCC GBD Página:18

Diretorio de ponteiros para buckets

Diretório : so armazena ponteiros para os buckets

Bucket 1

Contém todas as entradas <k*> tais que h(k) mod N = 1

1

2

...

N-1

Bucket 2

0

Bucket N-1

Bucket 0

Page 19: GBC053–Gerenciamento de Banco de Dados Índices baseados em Hash Ilmério Reis da Silva ilmerio@facom.ufu.br ilmerio/gbd UFU/FACOM/BCC.

UFU/FACOM/BCC GBD Página:19

Funcionamento

• Função hash não varia• O número N de entradas no diretório varia• A medida que os buckets se enchem, estes se duplicam, e o

diretório de buckets também pode duplicar. Atenção somente um bucket por vez é duplicado

• Resultado: se um único bucket duplica, o diretório todo pode duplicar vários ponteiros do diretório podem apontar para o mesmo bucket só duplicam os buckets que ficam cheios. ao contrário do hash estático, registros em buckets duplicados

(decorrentes de um overflow) podem ser facilmente localizados através do novo ponteiro no diretório de buckets.

Page 20: GBC053–Gerenciamento de Banco de Dados Índices baseados em Hash Ilmério Reis da Silva ilmerio@facom.ufu.br ilmerio/gbd UFU/FACOM/BCC.

UFU/FACOM/BCC GBD Página:20

Exemplo

00

01

10

11

2

Diretorio

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

Paginas de dados

Profundidade Local

N = 4 = 22

Ultimos2 digitos darepresentação binaria de h(k)

Page 21: GBC053–Gerenciamento de Banco de Dados Índices baseados em Hash Ilmério Reis da Silva ilmerio@facom.ufu.br ilmerio/gbd UFU/FACOM/BCC.

UFU/FACOM/BCC GBD Página:21

Inserção simples

00

01

10

11

2

Diretorio

4* 12* 32* 16*

2

1* 5* 21*

2

10*

2

15* 7* 19*

2

Paginas de dados (buckets)

Inserindo 13*

13*

Page 22: GBC053–Gerenciamento de Banco de Dados Índices baseados em Hash Ilmério Reis da Silva ilmerio@facom.ufu.br ilmerio/gbd UFU/FACOM/BCC.

UFU/FACOM/BCC GBD Página:22

00

01

10

11

2

Diretorio

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

Inserção em bucket cheioSplit do bucket

Page 23: GBC053–Gerenciamento de Banco de Dados Índices baseados em Hash Ilmério Reis da Silva ilmerio@facom.ufu.br ilmerio/gbd UFU/FACOM/BCC.

UFU/FACOM/BCC GBD Página:23

Diretorio

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

111

3

GlobalLocal

Bucket A1

Bucket A2

Bucket D

Bucket C

Bucket C

N = 8 = 23

Ultimos3 digitos darepresentação binaria de h(k)

110

Inserção em bucket cheioDuplica diretório e reorganiza da função hash

Page 24: GBC053–Gerenciamento de Banco de Dados Índices baseados em Hash Ilmério Reis da Silva ilmerio@facom.ufu.br ilmerio/gbd UFU/FACOM/BCC.

UFU/FACOM/BCC GBD Página:24

Regra de inserção com split - Hash Extensível

Sejam: pl a profundidade local e

pg a profundidade global;

Incrementar pl;

Criar novo bucket e Redistribuir entradas de acordo com pl-ésimo bit mais significativo de hash(k);

SE (pl > pg), duplicar diretório: Incrementar pg; Criar novas entradas no diretório (i.e. duplicar); Apontar novas entradas p/ buckets originais(pl-1 bits);

Atualizar ponteiro que apontará para o novo bucket, de acordo com os pl bits mais significativos de hash(k).

Page 25: GBC053–Gerenciamento de Banco de Dados Índices baseados em Hash Ilmério Reis da Silva ilmerio@facom.ufu.br ilmerio/gbd UFU/FACOM/BCC.

UFU/FACOM/BCC GBD Página:25

Considerações Finais – Hash Extensível

• diretório geralmente cabe na memória• Exemplo:

100MB em páginas de 4K → 25000 entradas no diretório• remoção usa processo inverso, podendo reduzir tamanho do

diretório• problema:

distribuição não uniforme de chaves geram muitos splits localizados e, consequentemente, diretório pode ter crescimento exagerado.

Page 26: GBC053–Gerenciamento de Banco de Dados Índices baseados em Hash Ilmério Reis da Silva ilmerio@facom.ufu.br ilmerio/gbd UFU/FACOM/BCC.

UFU/FACOM/BCC GBD Página:26

Hash Linear

Hash Linear

Page 27: GBC053–Gerenciamento de Banco de Dados Índices baseados em Hash Ilmério Reis da Silva ilmerio@facom.ufu.br ilmerio/gbd UFU/FACOM/BCC.

UFU/FACOM/BCC GBD Página:27

Hash Linear

• Não ha diretório de buckets

• Pode haver páginas de overflow à medida que os buckets se enchem

• Regularmente páginas de overflow são transformadas em novos buckets

• Regularmente a função hash se modifica, dobrando a capacidade de endereçamento de buckets

Page 28: GBC053–Gerenciamento de Banco de Dados Índices baseados em Hash Ilmério Reis da Silva ilmerio@facom.ufu.br ilmerio/gbd UFU/FACOM/BCC.

UFU/FACOM/BCC GBD Página:28

Parâmetros e Contadores

• Nivel = indica a rodada atual, a função de hash 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. Apos divisão, Next é incrementado

Page 29: GBC053–Gerenciamento de Banco de Dados Índices baseados em Hash Ilmério Reis da Silva ilmerio@facom.ufu.br ilmerio/gbd UFU/FACOM/BCC.

UFU/FACOM/BCC GBD Página:29

Esquema Geral : rodada m

Bucket Nexta ser dividido

Imagens dos buckets divididos

next buckets divididos na rodada

Bucket Nm + next

Buckets existentesno início da rodada m

Nm = número de buckets

no início da rodada m

Page 30: GBC053–Gerenciamento de Banco de Dados Índices baseados em Hash Ilmério Reis da Silva ilmerio@facom.ufu.br ilmerio/gbd UFU/FACOM/BCC.

UFU/FACOM/BCC GBD Página:30

32* 44* 36*

9* 25* 5*

14*

31* 35* 7*

18* 10* 30*

11*

Nivel = 0 , N = 4 = 22

Next = 0h0h1

00

01

10

11

000

001

010

011

Esta informação não é armazenada !

h0(43) = 3 (11)

43*

Next = 1

44* 36*00

Inserção de 43*

Inserção provocando split e avanço do next

Paginas Primarias Paginas de Overflow

Page 31: GBC053–Gerenciamento de Banco de Dados Índices baseados em Hash Ilmério Reis da Silva ilmerio@facom.ufu.br ilmerio/gbd UFU/FACOM/BCC.

UFU/FACOM/BCC GBD Página:31

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 = 1

Bucket 2 não foi dividido ainda

100

Busca em bucket após o next

Page 32: GBC053–Gerenciamento de Banco de Dados Índices baseados em Hash Ilmério Reis da Silva ilmerio@facom.ufu.br ilmerio/gbd UFU/FACOM/BCC.

UFU/FACOM/BCC GBD Página:32

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 ja foi dividido !

h0(44) = 00

h1(32) = 000

h1(44) = 100Bucket 0 + 4

100

Busca em bucket antes o next

Page 33: GBC053–Gerenciamento de Banco de Dados Índices baseados em Hash Ilmério Reis da Silva ilmerio@facom.ufu.br ilmerio/gbd UFU/FACOM/BCC.

UFU/FACOM/BCC GBD Página:33

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*

Inserção sem split

Page 34: GBC053–Gerenciamento de Banco de Dados Índices baseados em Hash Ilmério Reis da Silva ilmerio@facom.ufu.br ilmerio/gbd UFU/FACOM/BCC.

UFU/FACOM/BCC GBD Página:34

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

Inserção com split e incremento no next

Page 35: GBC053–Gerenciamento de Banco de Dados Índices baseados em Hash Ilmério Reis da Silva ilmerio@facom.ufu.br ilmerio/gbd UFU/FACOM/BCC.

UFU/FACOM/BCC GBD Página:35

Inserção do 50*

32*

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

111 11 31* 7*

43* 35* 11*

Inserção com split e mudança de rodada

Page 36: GBC053–Gerenciamento de Banco de Dados Índices baseados em Hash Ilmério Reis da Silva ilmerio@facom.ufu.br ilmerio/gbd UFU/FACOM/BCC.

UFU/FACOM/BCC GBD Página:36

ComparandoDuplicar diretório x duplicar buckets

• Passagem de hi para hi+1 no Hash Linear corresponde a duplicar o diretorio no Hash Extensível

• Hash Extensível : diretório é duplicado num único passo

• Hash Linear : duplicação do número de buckets se faz gradualmente

Page 37: GBC053–Gerenciamento de Banco de Dados Índices baseados em Hash Ilmério Reis da Silva ilmerio@facom.ufu.br ilmerio/gbd UFU/FACOM/BCC.

UFU/FACOM/BCC GBD Página:37

Comparando utilização de espaço nos buckets

• Hash Extensível tem uma melhor ocupação dos buckets pois só se divide o bucket apropriado

• Hash Linear não precisa de diretório: existe uma maneira precisa de se saber quais buckets

foram divididos e quais devem ser divididos e em que circuntâncias

Buckets são alocados consecutivamente: é possível localizar a página do bucket m por um simples cálculo de offsets.

Page 38: GBC053–Gerenciamento de Banco de Dados Índices baseados em Hash Ilmério Reis da Silva ilmerio@facom.ufu.br ilmerio/gbd UFU/FACOM/BCC.

UFU/FACOM/BCC GBD Página:38

Comparando Custo IO Extensível x Linear

Em busca por igualdade

Hash Linear tem um custo I/O menor em caso de distribuição uniforme

Hash Extensível tem um custo menor em caso de distribuição não uniforme

Page 39: GBC053–Gerenciamento de Banco de Dados Índices baseados em Hash Ilmério Reis da Silva ilmerio@facom.ufu.br ilmerio/gbd UFU/FACOM/BCC.

UFU/FACOM/BCC GBD Página:39

Considerações finais sobre Hash

• índices baseados em hash são os melhores para busca com predicado de igualdade

• íındices baseados em hash não suportam busca por intervalo• Hash estático pode resultar em longas cadeias de overflow• Hash extensível usa diretórios para controlar crescimento do

hash, evitando overflow• Hash linear usa variação de função para diminuir cadeias de

overflow, gerando buckets linearmente• Em geral distribuição não uniforme prejudica desempenho de

índices baseados em Hash

Page 40: GBC053–Gerenciamento de Banco de Dados Índices baseados em Hash Ilmério Reis da Silva ilmerio@facom.ufu.br ilmerio/gbd UFU/FACOM/BCC.

UFU/FACOM/BCC GBD Página:40

Exercícios - Índices baseados em hash

EXERCÍCIOS CAP 11 LIVRO-TEXTO

Page 41: GBC053–Gerenciamento de Banco de Dados Índices baseados em Hash Ilmério Reis da Silva ilmerio@facom.ufu.br ilmerio/gbd UFU/FACOM/BCC.

UFU/FACOM/BCC GBD Página:41

FIM - Índices baseados em hash

FIM - Índices baseados em hash*

* material baseado no livro-texto e slides da Profa. Sandra de Amo