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

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

Indice estruturado por Hash

Apresentações semelhantes


Apresentação em tema: "Indice estruturado por Hash"— Transcrição da apresentação:

1 Indice estruturado por Hash
Métodos de Acesso Indice estruturado por Hash

2 Plano Geral Vantagens e Limitações Hash Estático Hash Extensível
Hash Linear Comparação entre Hash Extensível e Linear

3 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.

4 Hash Estático … … … h(chave) mod N chave h = função hash
h(chave) mod N 1 2 chave h h = função hash N-1 Páginas Primárias dos Buckets Páginas de Overflow Entradas do tipo <chave, * >

5 Busca … … … h(14) mod 6 = 2 h(x) = x < 14, * > N = 6 1 …. 2 14 h
h(14) mod 6 = 2 1 …. <14,* > 2 14 h 3 4 5

6 Inserção … … Inserindo < 7, * > h(7) mod 6 = 1 Cheia
h(7) mod 6 = 1 < 7, * > 1 2 7 Cheia h 3 4 5

7 Supressão … … Suprimindo < 25, * > h(25) mod 6 = 1
h(25) mod 6 = 1 < 25, * > 1 2 25 h 3 4 5

8 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

9 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.

10 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.

11 Alternativas Alternativa 1 : Alternativa 2 : Hash dinâmicos
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

12 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.

13 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)

14 Exemplo Profundidade Local Profundidade Global Diretório dos
2 4* 12* 32* 16* Bucket A 2 2 00 1* 5* 21* Bucket B 01 2 10* Bucket C 10 2 15* 7* 19* Bucket D 11 Diretório dos Ponteiros Páginas do Indice

15 Exemplo – inserção Diretório 2 Inserindo 13* 4* 12* 32* 16* 2 2 00 1*
5* 21* 13* 01 2 10* 10 2 15* 7* 19* 11 Diretório Páginas do Indice

16 Exemplo – inserção Diretório 2 2 Inserindo 20* 4* 12* 32* 32* 16* 16*
00 1* 5* 21* 13* 01 2 10* 10 2 15* 7* 19* 11 2 4* 12* 20* Diretório

17 Exemplo – inserção Diretório Local Inserindo 20* Global 3 32* 16*
Bucket A1 3 2 000 2 00 001 1* 5* 21* 13* Bucket C 010 01 011 2 10* Bucket C 100 10 101 2 110 15* 7* 19* Bucket D 11 111 3 4* 12* 20* Diretório Bucket A2

18 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

19 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

20 Parâmetros e Contadores
Nivel = indica a rodada atual Inicializado com 0 Next = bucket que deve ser dividido, se necessário 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.

21 Esquema Geral : rodada k
Bucket b Bucket Next a ser dividido m = número de buckets da rodada k Buckets existentes no inicio da rodada k Bucket b + m Imagens dos buckets divididos

22 Inserção de 43* h0(43) = 3 (11) h1 h0 Nivel = 0 , N = 4 = 22 Next = 0
000 00 32* 44* 36* Next = 1 001 01 9* 25* 5* 010 10 14* 18* 10* 30* 011 11 31* 35* 7* 11* 43* 00 44* 36* Esta informação não é armazenada ! Páginas Primárias

23 Busca de 18* h0(18) = 2 (10) h1 h0 Nivel = 0 , N = 4 = 22 000 00 32*
Next = 1 2 > Next 001 01 9* 25* 5* Bucket 2 não foi dividido ainda 010 10 14* 18* 10* 30* 011 11 31* 35* 7* 11* 43* 100 00 44* 36*

24 Busca de 32* e 44* h0(32) = 00 h0(44) = 00 h1(32) = 000 h1(44) = 100
Nivel = 0 , N = 4 = 22 h0(32) = 00 000 00 32* h0(44) = 00 Next = 1 0 < Next 001 01 9* 25* 5* Bucket 0 já foi dividido ainda 010 10 14* 18* 10* 30* 011 11 31* 35* 7* 11* 43* h1(32) = 000 100 00 44* 36* h1(44) = 100 Bucket 0 + 4

25 Inserção de 37* h0(37) = 01 000 00 32* Next = 1 001 01 9* 25* 5* 37*
010 10 14* 18* 10* 30* 011 11 31* 35* 7* 11* 43* 100 00 44* 36*

26 Inserção de 29* h0(29) = 01 000 00 32* Next =1 9* 25* 5* 37* 001 01
14* 18* 10* 30* 010 10 31* 35* 7* 11* 43* 011 11 100 00 44* 36* 5* 37* 29* 101 01

27 Incremento de Nível Next =0 Nivel = 1 000 00 32* h0(50) = 10 001 01 9*
25* h1(50) = 010 50* 66* 18* 10* 34* 010 10 Next =3 011 43* 31* 35* 7* 11* 43* 11 11* 100 00 44* 36* 5* 37* 29* 101 01 14* 30* 22* 110 10 111 11 31* 7*


Carregar ppt "Indice estruturado por Hash"

Apresentações semelhantes


Anúncios Google