Arquivos Estruturados por
Hashing– Custos I/O
AULA 6
Profa. Sandra de Amo
GBC053 – BCC
Estudaremos nesta aula
 Estimativa de custos de I/O para operações
de:





Scan em arquivos hashed (agrupados)
Inserção de tuplas em arquivos agrupados
Remoção de tuplas em arquivos agrupados
Busca em arquivos agrupados pelo atributo- chave de busca
Busca em arquivos agrupados por atributos diferentes do
atributo-chave de busca
Arquivos agrupados por um atributo X
 Arquivo A é organizado em subarquivos S1,…, Sn, cada subarquivo
contendo 1 página não completamente utilizada (20% livre).
 Subarquivo também é chamado de “Bucket”.
 Assim, se o arquivo original contém M páginas, o arquivo estruturado
de forma hash (distribuído nos subarquivos) conterá M*1.25 páginas.
 Função hash H(valor-atributo) = n responsável por distribuir os
registros
 Um registro (…,v,….) pertence ao subarquivo Sk se H(v) = k.
Atributo X que é a chave do agrupamento (Hashing)
Arquivos agrupados por um atributo X
 As páginas do arquivo contém diretório de slots como os
arquivos heap.
 Este diretório é utilizado para localizar a posição na página
onde se encontra um registro com rid dado.
 A inserção de um novo registro não é feita utilizando o
diretório de páginas, pois a página onde será inserido o
registro é a única página do subarquivo Sk, onde k = H(v), v =
valor do atributo X do registro a ser inserido.
 A remoção de um registro é feita exatamente como no caso
de arquivo heap.
Lembrando:

Páginas do arquivo são agrupadas por buckets (subarquivos)
S1

S2
S3
S4 ….
Bucket é determinado aplicando-se uma função h ao campo de procura
Exemplo: estamos procurando todos os empregados de salário = 5000
Como encontrá-los rapidamente ?
Arquivo organizado por hash no campo Salário
Função hash: mod 3
Onde estão os registros dos empregados com salário = 5000 ?
5000 mod 3 = 2
Resposta: bucket 2
Exemplo: inserção de um registro
Suponha H(n) = n mod 3
Página do Subarquivo S2
Diretório de slots da página
(500,165) (450,50)
Registros:
Rid (2,1) : (...., 5, ....)
Rid (2,2) : (...., 17,....)
Rid (2,3) : (...., 32, ....)
Rid (2,4) : (...., 44,....)
Rid (2,5) : (....,20,....)
(250,200) (100,150) (0,100)
5
665
Passos para a inserção de um
registro
Suponha que se quer inserir o registro
(...., 14 ,....) de tamanho 300
1.
2.
Calcula-se H(14) = 14 mod 3 = 2, para determinar a página onde
deverá ser inserido. No caso esta página será a única página do
subarquivo S2 (página 2).
Busca no diretório de slots o endereço do espaço vazio. Determina
se há espaço vazio endereço do inicio do espaço vazio suficiente para
o registro ser inserido nesta página.
3.
Em caso positivo: A inserção será feita neste endereço.
4.
Em caso negativo: Uma nova página é criada no subarquivo S2
1.
Cria-se um diretório de páginas para gerenciar o subarquivo S2 que
agora já contém 2 páginas, cada uma delas com um número de bytes
livres.
Qual o rid do novo registro ?
Verifica no diretório de slots se há algum slot com
conteúdo (-1,_). Se houver, este será o slot
associado ao novo registro.
2. Se não houver: cria-se um novo slot que será
associado ao novo registro.
3. Atualiza o diretório de slots.
1.
Situação após a inserção.
Novo registro de tamanho 300 é inserido aqui !
Espaço livre de 35 bytes
Página do Subarquivo S2
Diretório de slots da página
(665,300) (500,165) (450,50) (250,200) (100,150) (0,100)
Registros:
Slot 6 Slot 5 Slot 4
Slot 3 Slot 2 Slot 1
Rid (2,1) : (...., 5, ....)
Rid (2,2) : (...., 17,....)
Rid (2,3) : (...., 32, ....)
Rid (2,4) : (...., 44,....)
Rid (2,5) : (...., 20,....)
Novo registro
Rid (2,6) : (...., 14,....)
6
965
O que acontece quando não há espaço suficiente
na única página do subarquivo S2 para o novo
registro ?
 Cria-se uma nova página p de overflow no
subarquivo S2
 Insere-se ponteiro na página 2 para esta nova página
p e ponteiro de p para a página 2.
 Subarquivo S2 é agora um arquivo de 2 páginas,
todas com seu diretório de slots.
 Um diretório de páginas é criado para gerenciar as
páginas do subarquivo (heap) S2.
“Degeneração” da estrutura Hash
 Quando os subarquivos contém muitas páginas de
overflow, a estrutura começa a perder sua utilidade
na aceleração das buscas pelo atributo chave do
Hash.
 Buscas pelo atributo chave do Hash se tornam
praticamente buscas em arquivo Heap (menores).
Degeneração da estrutura hash…

Páginas do arquivo são agrupadas por subarquivos ou buckets
Subarquivo 1 (bucket 1)

Subarquivo 2 (Bucket 2)
Subarquivo 3 (Bucket 3)
Bucket é determinado aplicando-se uma função h ao campo de procura
Exemplo: estamos procurando todos os empregados de salário = 5000
Como encontrá-los rapidamente ?
Arquivo organizado por hash no campo Salário
Função hash: mod 3
Onde estão os registros dos empregados com salário = 5000 ?
5000 mod 3 = 2
Resposta: bucket 2
Resumindo:
 Páginas no arquivo são agrupadas por
buckets
 Bucket é determinado aplicando-se uma
função h ao campo de busca
 Insert : registro é inserido no bucket
apropriado
Importante :
 No caso de Arquivos Hashed,

“chave” = chave de busca na qual é aplicada
a função Hash.

Nada a ver com chave primária ou candidata.
Arquivos Hashed
 Hash Estático
 Procura de um registro satisfazendo uma condição no campo de
procura
 Aplica-se função hash no campo de procura
 Varre-se todas as páginas do bucket correspondente
 Processo demorado se o bucket contiver muitas páginas
 Hash Dinâmico
 Especifica-se um número máximo de páginas por bucket
 Inserção pode causar overflow num bucket
 Função hash é adaptada dinamicamente para evitar overflow
 Hipótese que faremos na estimativa de custos:
 não há overflow de páginas num bucket – cada bucket não
ultrapassa um número máximo de páginas.
ESTIMATIVAS DE CUSTOS
Arquivos Hashed : SCAN
 Scan

Páginas são ocupadas em 80%
Assim: um arquivo de 100 páginas, caso for organizado em hash,
vai necessitar de 100/0.80 páginas para seu armazenamento =
= 125 páginas !!
Espaço livre é deixado nas páginas para evitar overflow no bucket

Custo = B(D+RC)/0.80 = 1.25*B(D+RC)


Bucket 1
Bucket 2
Bucket 3
Arquivos Hashed : Busca
Seleção A = a
A : atributo chave da relação


Tempo para identificar a página contendo o
registro = H = tempo de cálculo da função
hash
Assumindo 1 única página no bucket
Custo = H + D + RC
Arquivos Hashed : Busca
Seleção A = a
A : atributo não é chave da relação
 Supõe-se sempre que a estrutura hash não começou a se
degerar. Logo, cada bucket tem uma única página
 Todos os registros com A = a estão em um único bucket.

Custo = H + D + RC
Seleção A > a


Todo o arquivo deve ser procurado
Custo = 1.25B(D+RC)
Arquivos Hashed : Inserção/Deleção
 Inserção
 Página apropriada deve ser encontrada e modificada
 Custo = C + 2D + H
 Deleção (supondo somente 1 registro ou que todos
os registros estão em uma única página)





Encontrar a página do registro a ser removido
Remover o registro da página
Shift nos demais registros
Escrever a página modificada
Custo = Sel + RC + D
Resumo - Hash
Scan
1.25B
(D+RC)
1.25BD
Sel =
Sel =
chave
Nchave
H+D+
RC/2
H + D + RC 1.25B(D+RC)
D
D
Sel <>
1.25BD
Insert Delete
sel
2D
H +2D+
C
Sel + XD
Sel+XD
Só I/O
X = N. Pag. com registros removidos
“CHAVE” = Chave da relação
Escolha de uma Boa Organização
Scan
Sel =
chave
Sel =
Sel <>
Insert
Delete
Nchave
Heap
BD
0.5BD
Ord
BD
Dlog2B Dlog2B Dlog2B Dlog2B Dlog2B
+ DB/2
+
+
BD
BD
Hash
1.25BD
D
BD
D
BD
1.25BD
2D
2D
2D+Sel
Sel+X
X = N. Pag. com registros removidos
“CHAVE” = Chave da relação
Download

Slides - Sandra de Amo