Arquivos Estruturados por Hashing– Custos I/O AULA 6 Profa. Sandra de Amo GBC053 – BCC.

Post on 18-Apr-2015

108 views 0 download

Transcript of Arquivos Estruturados por Hashing– Custos I/O AULA 6 Profa. Sandra de Amo GBC053 – BCC.

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