arquivos estruturados por hashing– custos i/o aula 6 profa. sandra de amo gbc053 – bcc
TRANSCRIPT
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)
Bucket é determinado aplicando-se uma função h ao campo de procura
Exemplo: estamos procurando todos os empregados de salário = 5000Como encontrá-los rapidamente ?
Arquivo organizado por hash no campo SalárioFunção hash: mod 3Onde estão os registros dos empregados com salário = 5000 ?5000 mod 3 = 2 Resposta: bucket 2
S1 S2 S3 S4 ….
Exemplo: inserção de um registro
Página do Subarquivo S2Diretório de slots da página
6655(0,100)(100,150)(250,200)(450,50)(500,165)
Registros:Rid (2,1) : (...., 5, ....)Rid (2,2) : (...., 17,....)Rid (2,3) : (...., 32, ....)Rid (2,4) : (...., 44,....)Rid (2,5) : (....,20,....)
Suponha H(n) = n mod 3
Passos para a inserção de um registroSuponha que se quer inserir o registro (...., 14 ,....) de tamanho 300
1. 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).
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 ?
1. 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.
Situação após a inserção.
9656(0,100)(100,150)(250,200)(450,50)(500,165)
Registros:Rid (2,1) : (...., 5, ....)Rid (2,2) : (...., 17,....)Rid (2,3) : (...., 32, ....)Rid (2,4) : (...., 44,....)Rid (2,5) : (...., 20,....)Rid (2,6) : (...., 14,....)
(665,300)
Slot 1Slot 2Slot 3Slot 4Slot 5Slot 6
Novo registro
Página do Subarquivo S2Diretório de slots da página
Espaço livre de 35 bytes
Novo registro de tamanho 300 é inserido aqui !
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
Bucket é determinado aplicando-se uma função h ao campo de procura
Exemplo: estamos procurando todos os empregados de salário = 5000Como encontrá-los rapidamente ?
Arquivo organizado por hash no campo SalárioFunção hash: mod 3Onde estão os registros dos empregados com salário = 5000 ?5000 mod 3 = 2 Resposta: bucket 2
Subarquivo 1 (bucket 1) Subarquivo 2 (Bucket 2) Subarquivo 3 (Bucket 3)
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 Sel = chave
Sel = Nchave
Sel <> Insert Delete
sel1.25B (D+RC)
H + D + RC/2
H + D + RC 1.25B(D+RC) H +2D+ C
Sel + XD
1.25BD D D 1.25BD 2D Sel+XD Só I/O
“CHAVE” = Chave da relação
X = N. Pag. com registros removidos
Escolha de uma Boa Organização
Scan Sel =
chave
Sel = Nchave
Sel <> Insert Delete
Heap BD 0.5BD BD BD 2D 2D+Sel
Ord BD Dlog2B Dlog2B Dlog2B + DB/2
Dlog2B+
BD
Dlog2B+
BD
Hash 1.25BD D D 1.25BD 2D Sel+X
“CHAVE” = Chave da relaçãoX = N. Pag. com registros removidos