A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

INF70 – Gerenciamento de Banco de Dados 2 Índices baseados em Hash Ilmério Reis da Silva UFU/FACOM/BCC.

Apresentações semelhantes


Apresentação em tema: "INF70 – Gerenciamento de Banco de Dados 2 Índices baseados em Hash Ilmério Reis da Silva UFU/FACOM/BCC."— Transcrição da apresentação:

1 INF70 – Gerenciamento de Banco de Dados 2 Índices baseados em Hash Ilmério Reis da Silva ilmerio@facom.ufu.br www.facom.ufu.br/~ilmerio/gbd2 UFU/FACOM/BCC

2 Roteiro Fundamentos Hash Estático Hash Extensível Hash Linear Considerações Finais

3 UFU/FACOM/BCC GBD2Página:3 Fundamentos

4 UFU/FACOM/BCC GBD2Pá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)

5 UFU/FACOM/BCC GBD2Página:5 Função Hash Exemplo: hash(k) = h(k) mod B, onde h : set of keys integer B : é o número de buckets disponíveis SE k é inteiro, use –h(k) = k ou –h(k) = a k + b, sendo a e b empíricos.

6 UFU/FACOM/BCC GBD2Pá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

7 UFU/FACOM/BCC GBD2Página:7 Hash Estático

8 UFU/FACOM/BCC GBD2Página:8 Alocação de área para buckets Alocação de N páginas sucessivas no disco Cada bucket terá entradas de dados (Alt. 1, 2 ou 3) 0 1 2 N-1 Páginas Primárias dos Buckets

9 UFU/FACOM/BCC GBD2Página:9 Alocação dinâmica de páginas de overflow Pá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

10 UFU/FACOM/BCC GBD2Página:10 Alocação dinâmica de páginas de overflow Seja k a chave do hash, então a localização do bucket será por meio da função hash Entradas do tipo 0 1 2 N-1 hash hash(k)=h(k) mod N k Páginas Primárias dos Buckets … … … Páginas de Overflow

11 UFU/FACOM/BCC Busca 0 1 2 5 hash h(14) mod 6 = 2 14 … … … Páginas Primárias dos Buckets h(x) = x N = 6 4 3 ….

12 UFU/FACOM/BCC Inserção 0 1 2 5 hash h(7) mod 6 = 1 7 … … Páginas Primárias dos Buckets Inserindo 4 3 Cheia

13 UFU/FACOM/BCC Remoção 0 1 2 5 hash h(25) mod 6 = 1 25 … … Suprimindo 4 3 Páginas Primárias dos Buckets

14 UFU/FACOM/BCC GBD2Página:14 Considerações finais sobre Hash Estático usualmente bucket = h(k) mod B, onde B = 2 L 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

15 UFU/FACOM/BCC GBD2Página:15 Hash Extensível

16 UFU/FACOM/BCC GBD2Página:16 Evitando cadeias de overflow Soluçã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.

17 UFU/FACOM/BCC GBD2Página:17 Evitando cadeias de overflow Hash 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.

18 UFU/FACOM/BCC Diretorio de ponteiros para buckets Diretório : so armazena ponteiros para os buckets Bucket 1 Contém todas as entradas tais que h(k) mod N = 1 1 2... N-1 Bucket 2 0 Bucket N-1 Bucket 0

19 UFU/FACOM/BCC GBD2Pá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.

20 UFU/FACOM/BCC 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 = 2 2 Ultimos 2 digitos da representação binaria de h(k)

21 UFU/FACOM/BCC 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*

22 UFU/FACOM/BCC 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 cheio Split do bucket

23 UFU/FACOM/BCC 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 Global Local Bucket A1 Bucket A2 Bucket D Bucket C N = 8 = 2 3 Ultimos 3 digitos da representação binaria de h(k) 110 Inserção em bucket cheio Duplica diretório e reorganiza da função hash

24 UFU/FACOM/BCC GBD2Pá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).

25 UFU/FACOM/BCC GBD2Pá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.

26 UFU/FACOM/BCC Hash Linear

27 UFU/FACOM/BCC 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

28 UFU/FACOM/BCC 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 N m = número de buckets na rodada m N 0 = N N m = N*2 m 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

29 UFU/FACOM/BCC Esquema Geral : rodada m Bucket Next a ser dividido Imagens dos buckets divididos next buckets divididos na rodada Bucket N m + next Buckets existentes no início da rodada m N m = número de buckets no início da rodada m

30 UFU/FACOM/BCC 32*44*36* 9*25*5* 14* 31*35*7* 18*10*30* 11* Nivel = 0, N = 4 = 2 2 Next = 0 h0h0 h1h1 00 01 10 11 000 001 010 011 Esta informação não é armazenada ! h 0 (43) = 3 (11) 43* Next = 1 44*36* 00 Inserção de 43* Inserção provocando split e avanço do next Paginas PrimariasPaginas de Overflow

31 UFU/FACOM/BCC 32* 9*25*5* 14* 31*35*7* 18*10*30* 11* Nivel = 0, N = 4 = 2 2 h0h0 h1h1 00 01 10 11 000 001 010 011 Busca de 18* h 0 (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

32 UFU/FACOM/BCC 32* 9*25*5* 14* 31*35*7* 18*10*30* 11* Nivel = 0, N = 4 = 2 2 h0h0 h1h1 00 01 10 11 000 001 010 011 Busca de 32* e 44* h 0 (32) = 00 43* Next = 1 44*36* 00 0 < Next Bucket 0 ja foi dividido ! h 0 (44) = 00 h 1 (32) = 000 h 1 (44) = 100 Bucket 0 + 4 100 Busca em bucket antes o next

33 UFU/FACOM/BCC 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* 00 100 h 0 (37) = 01 37* Inserção sem split

34 UFU/FACOM/BCC 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* 00 100 h 0 (29) = 01 37* 5*37*29* 01101 Next =2 Inserção com split e incremento no next

35 UFU/FACOM/BCC 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 h 0 (50) = 10 5*37*29* 01101 14*30*22* 10110 h 1 (50) = 010 50* Next =3 Next =0 Nivel = 1 11111 31*7* 43*35*11* Inserção com split e mudança de rodada

36 UFU/FACOM/BCC Comparando Duplicar diretório x duplicar buckets Passagem de h i para h i+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

37 UFU/FACOM/BCC 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.

38 UFU/FACOM/BCC 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

39 UFU/FACOM/BCC 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

40 UFU/FACOM/BCC GBD2Página:40 Exercícios - Índices baseados em hash EXERCÍCIOS CAP 11 LIVRO-TEXTO

41 UFU/FACOM/BCC GBD2Página:41 FIM - Índices baseados em hash FIM - Índices baseados em hash* * material baseado no livro-texto e slides da Profa. Sandra de Amo


Carregar ppt "INF70 – Gerenciamento de Banco de Dados 2 Índices baseados em Hash Ilmério Reis da Silva UFU/FACOM/BCC."

Apresentações semelhantes


Anúncios Google