01 - Armazenamento e Organização de Arquivos
Download
Report
Transcript 01 - Armazenamento e Organização de Arquivos
Armazenamento e
Organização de Arquivos
Professores:
Maria Claudia Reis Cavalcanti
e
Ronaldo Ribeiro Goldschmidt
Material adaptado das notas de aula da
Professora Ana Maria de C. Moura - IME
Sumário
Introdução e Motivação
Memórias
Alocação de Registros
Operações em Arquivos
Organização de Arquivos em Disco
Armazenamento em Dicionário de Dados
Exercícios
2
Sumário
Introdução e Motivação
Memórias
Alocação de Registros
Operações em Arquivos
Organização de Arquivos em Disco
Armazenamento em Dicionário de Dados
Exercícios
3
Introdução e Motivação
• BDs são muito grandes para caber na memória principal
– Discos: persistência dos BDs
• Usualmente, as aplicações necessitam de apenas uma pequena parte do
BD a cada momento.
– Quando uma “porção de dados” for necessária, ela precisará ser localizada e
copiada para memória principal
• SGBD faz muitas operações de I/O:
–
–
•
READ: transferência de dados de disco para memória .
WRITE: transferência de dados da memória para disco
Operações caras, se comparadas com operações em memória
– A escolha de estruturas de armazenamento adequadas procura minimizar o
número de operações de I/O
4
Sumário
Introdução e Motivação
Memórias
Alocação de Registros
Operações em Arquivos
Organização de Arquivos em Disco
Armazenamento em Dicionário de Dados
Exercícios
5
Memórias – Hierarquia
CPU
CACHE (RAM)
solicitação
dado
Armazenam. primário
MEMÓRIA PRINCIPAL
dado
satisfazendo
solicitação
DISCO MAGNÉTICO
Armazenam. secundário
FITA
Armazenam. terciário
6
Memórias
Armazenamento Primário:
memória cache: RAM (random access memory)
estática - usada pela CPU p/ acelerar execução de
programas
memória principal: DRAM (RAM dinâmica) - área de
trabalho p/ armazenar/executar programas e dados
custo em baixa
volátil
velocidade inferior à memória cache
7
Memórias
Armazenamento Secundário:
suporte p/ memória virtual e p/ sistema de arquivos
unidade de transferência de dados entre disco e
memória principal: blocos, sob controle do SO
SGBD: autonomia no gerenciamento de blocos
arquivo
buffer de 4Kbytes
leitura/ gravação bloco
8
Memórias
Armazenamento Terciário:
característica principal: tempo leitura/gravação bem
mais altos que o secundário;
grande capacidade armazenamento; custo bem
menor
fitas: acesso exclusivamente seqüencial
armazenamento ótico de dados: CD-ROM (Compact
Disk-Read-Only Memory)
Jukeboxes de discos óticos
armazenam centenas de GB
9
Memórias – Custo x Benefício
PREÇO DO BYTE
Cache
Memória
Principal
Disco
(Armazenamento secundário)
Armazenamento terciário
VELOCIDADE DE ACESSO
10
Memórias – Acesso aos Dados
DISCO
dados
Endereço
virtual
Mapeamento
Endereço
real
Espaço de
endereços
real
Programa
“swap”
Espaço de endereços virtual
MEMÓRIA
PRINCIPAL
.
.
.11
Sumário
Introdução e Motivação
Memórias
Alocação de Registros
Operações em Arquivos
Organização de Arquivos em Disco
Armazenamento em Dicionário de Dados
Exercícios
12
Alocação de Registros
“Correspondência” entre conceitos:
Nível Lógico
Nível Físico
Tabela
Arquivo
Tupla
Registro
Atributo
Campo
Chave Primária
Campo Chave
13
Alocação de Registros
Tipo de registro
Campo
type EMPREGADO = record Nome
Tipo de Dado
: packed array[1..30] of character;
CPF
: packed array [1..11] of character;
Salário
: integer;
Profissão
: integer;
Departamento
: packed array[1..20] of character;
end;
14
Alocação de Registros
Um registro é uma coleção de valores ou
itens relacionados.
Cada valor é formado por um ou mais bytes
e corresponde a um campo do registro.
Arquivo é uma seqüência de registros.
Em muitos casos, todos os registros de um
arquivo são do mesmo tipo.
15
Alocação de Registros
Registros são mapeados em blocos de disco.
Blocos têm tamanhos fixos.
Tamanho dos registros pode variar.
Em BDRs:
tuplas de relações distintas variam de tamanho.
tuplas de uma mesma relação podem variar de
tamanho.
Registros de tamanho fixo e Registros de
tamanho variável.
16
Alocação de Registros
Registros de Tamanho Fixo
Salário Profissão
Nome
Departamento
CPF
1
31
42
46
50
69
Registros de Tamanho Variável
Maria Silva 12345678900 xxxx xxxx Pessoal
1
13
Nome=Maria Silva
1
24
28 32
CPF=12345678900
18
39
Departamento=Pessoal
34
54
= separador de nome de campo / valor
Exs de caracteres separadores:
separador de campo
separador de registro
17
Alocação de Registros
Abordagens para mapeamento BD – arquivos:
Utilização de diversos arquivos. Cada arquivo
contendo
registros
de
tamanho
fixo.
Implementação mais simples, porém com
aplicação menos econômica.
Estruturação de arquivos para acomodar registros
de tamanhos múltiplos. Aplicação mais econômica,
porém de implementação mais complexa.
18
Organização Espalhada e Não Espalhada
bloco i
bloco i+1
registro 1
registro 2
registro 4
registro 3
registro 5
registro 6
organização não espalhada (“unspanned”)
(usual para registros de tamanho fixo)
bloco i
bloco i+1
registro 1
reg. 4
registro 2
registro 5
registro 3
registro 6
registro 4 p
registro 7
p
organização espalhada (“spanned”)
OBS: Quando o tamanho do registro é maior que o tamanho do bloco ( R > B),
a organização espalhada é obrigatória.
19
Alocação de Registros
Se o tamanho do registro for inferior ao tamanho
do bloco:
fator de bloco (bfr)= B/R
registros por bloco, onde:
B: n0 de bytes do bloco
R: n0 de bytes do registro
P/ registros de comprimento variável, com
organização espalhada
cada bloco pode armazenar um n0 diferente de registros
bfr: n0 médio de registros por bloco, que pode ser usado p/
calcular o n0 de blocos b requerido p/ um arquivo de r registros
N0 blocos p/ arquivo= (r/bfr)
20
Alocação de Blocos em Arquivo
Alocação contígua
blocos alocados consecutivamente
leitura rápida
dificulta expansão do arquivo
Alocação encadeada
cada bloco possui ponteiro para o próximo bloco
facilita expansão do arquivo
leitura do arquivo fica mais lenta
Clusters
combinação dos anteriores
blocos consecutivos são alocados em clusters (segmentos/extensões)
os clusters são ligados por ponteiros
21
Cabeçalhos de Arquivo
Também denominado descritor de arquivo
Contém informações sobre o arquivo:
Endereços dos blocos no disco
Tamanho e ordem dos campos (formato)
Tipos de dados e caracteres separadores
22
Sumário
Introdução e Motivação
Memórias
Alocação de Registros
Operações em Arquivos
Organização de Arquivos em Disco
Armazenamento em Dicionário de Dados
Exercícios
23
Operações em Arquivos
Subdividem-se em operações de recuperação (não
alteram valor) e de atualização (alteram conteúdo)
Em ambos os casos, pode ser necessária a localização
prévia de registros
Localização feita com base em condições de seleção
Quando diversos registros satisfazem às condições de
seleção, o primeiro registro (na seqüência física) é
designado com registro atual
Após processamento do registro atual, operações
subseqüentes localizam o próximo registro, que passa
a ser considerado o registro atual.
24
Operações em Arquivos
No contexto de programas p/ SGBDs
Open
prepara buffers p/ receber blocos do disco (cabeçalho)
posiciona início arquivo
Reset
arquivo já aberto, posiciona ponteiro no início do arquivo
Find
busca o primeiro registro que satisfaça condição e transfere
bloco p/ buffer
Read/Get
copia conteúdo do buffer p/ variável do programa
avança próximo registro
FindNext
procura o próximo registro que satisfaça condição e
transfere bloco p/ buffer
25
Operações em Arquivos (cont.)
Delete
Modify
Insert
Obs: Após realizar as 3 operações acima, o buffer em mem. principal é gravado de volta
no disco
Close
Scan
combina as operações Find, FindNext e Read, conforme
necessário
retorna o 10 registro após op. open/reset; senão o próximo
FindAll
Find n
FindOrdered
localiza registros, segundo sua ordenação por algum campo26
Sumário
Introdução e Motivação
Memórias
Alocação de Registros
Operações em Arquivos
Organização de Arquivos em Disco
Armazenamento em Dicionário de Dados
Exercícios
27
Organização de Arquivos
Considerações Iniciais
Arquivos de Registros Desordenados
(Heap Files)
Arquivos de Registros Ordenados
(Sorted Files)
Arquivos de Acesso Direto (Hash Files)
28
Considerações Iniciais
Distinção entre Organização de Arquivo e Método de
Acesso
A organização de arquivo se refere à organização dos
dados de um arquivo em registros, blocos e estruturas de
acesso. Inclui a maneira como registros e blocos são
posicionados e interligados.
Um método de acesso fornece um grupo de operações
que podem ser aplicadas a um arquivo.
É possível aplicar vários métodos de acesso a uma
organização de arquivo.
No entanto, alguns métodos de acesso só podem ser
aplicados a arquivos organizados de uma certa maneira.
29
Considerações Iniciais
Escolha da Organização de Arquivo e do Método de
Acesso
Alguns arquivos podem ser mais estáticos (poucas
atualizações) enquanto outros podem ser mais dinâmicos
(muitas atualizações)
A organização de arquivo mais adequada deverá
viabilizar da forma mais eficiente possível as operações
pretendidas.
Ex. com o arquivo Empregado (slide anterior):
consultas freqüentes por CPF podem ser indicativo de uma
organização de arquivo (ordenação física ou criação de índices)
que facilite essa operação.
Por outro lado para facilitar a geração cheques de pagamento os
empregados deveriam ser agrupados por departamento
30
(colocando-os em blocos interligados)
Arquivos de Registros
Desordenados (Heap Files)
Nesta organização:
Não há ordem entre os registros.
Novos registros são alocados onde há espaço.
Incluir um registro é muito eficiente: apenas o último bloco do
arquivo é lido e reescrito
Eficiente em operações de seleção de todos os registros
("full table scan").
Ineficiente em operações com restrições ("where")
A busca é sequencial: todos os blocos, bloco a bloco, devem ser
lidos (não importa qtos registros satisfazem à consulta)
A remoção de registros gera desperdícios
Exige a reorganização periódica do arquivo
Normalmente utilizado com estruturas adicionais (caminhos
de acesso ou índices)
31
Arquivos de Registros
Desordenados (Heap Files)
Exemplo:
Codigo
Nome
Cidade
UF
200
Silva
Rio
RJ
400
Mendes
Salvador
BA
Select *
From Tabela;
Select *
From Tabela
Where Codigo = 100;
300
Lima
Recife
PE
Insert Into Tabela
Values (310, “Ana", “Rio“, “RJ”);
100
Neves
Natal
RN
Delete From Tabela where
Codigo=400;
Exercício: Quais os efeitos das operações de inserção e de exclusão
indicadas ? Discuta os problemas decorrentes e alternativas de tratamento.
32
Arquivos de Registros
Ordenados (Sorted Files)
Também chamados de heap ordenados
Registros ordenados segundo um campo de classificação
Registros podem ser ordenados na ordem da PK (chave de
classificação)
Processamento eficiente qdo é preciso recuperar os registros
na classificação escolhida
Mesmo que não sejam todos, pois os registros próximos deverão estar
em um mesmo bloco.
Mas de nada adianta para buscas sobre campos não ordenados
Pesquisa binária X Pesquisa linear
Pesquisa binária torna eficiente operações com restrições sobre o
campo de classificação
Complexidade da pesquisa binária: log2n
Complexidade da pesquisa linear: n/2
33
Arquivos de Registros
Ordenados (Sorted Files)
Exemplo:
34
Arquivos de Registros
Ordenados (Sorted Files)
Operações de inclusão e exclusão são caras
Os registros precisam ser mantidos em ordem
Inserção: é preciso “abrir” espaço para o registro de acordo
com o valor do campo-classificação
Exclusão: pode-se usar marcadores e reorganizações
periódicas
Alteração: no campo-classificação implica na exclusão e reinserção do registro (o registro muda fisicamente de lugar)
Técnicas comuns
Manter espaços não utilizados em cada bloco
Utilizar arquivos de overflow temporários (desordenados)
Inclusão fica eficiente, mas a busca perde
Ambas associadas a reorganizações periódicas
35
Arquivos de Acesso Direto (Hash
Files – Arquivos Diretos)
Organização primária de arquivo baseada em técnicas de
hashing.
Fornece acesso rápido aos registros quando consultas
envolvem condições de igualdade em um único campo
(campo de hash).
Chave de hash: campo-chave é campo de hash
Idéia do hashing: utilizar função h que, aplicada ao
campo de hash de um registro, gere o endereço do bloco
de disco onde o registro está armazenado.
A busca do registro dentro do bloco pode ser realizada
em memória principal.
36
Arquivos de Acesso Direto (Hash
Files – Arquivos Diretos)
Uma função de hashing é definida sobre algum atributo
para “particionar” os dados. Ex: Recuperar sempre os
empregados por departamento
O resultado da função indica o bucket (depósito) do
registro.
Bucket equivale ao bloco de disco – unidade de armazenamento
de um ou mais registros – ou um cluster de blocos consecutivos.
Eficiente para operações com restrições de igualdade
sobre o atributo da função.
Sem vantagem para operações com restrição diferente de
igualdade.
Também usado para acesso direto na memória
37
Função Hash
H(K) = E
“H” é uma função, “K” é o valor de um atributo e “E” é a
identificação do depósito do registro.
“E” assume valores entre 0 e M-1, sendo M a qtde de depósitos
38
Técnicas de “Hashing”
Hashing : Randomização, Aleatorização
h(C)
função de hashing
espaço dos valores
(ex: CPF
1.000.000.000
possíveis valores)
espaço dos endereços
(ex: os três últimos
dígitos do CPF
1.000 posições)
39
Funções de Hashing
Característica desejável: distribuição uniforme, isto é, uma
chave qualquer C tem igual chance de “apontar diretamente” para
qualquer posição.
Algumas funções usuais:
mod (mais usada em geral): h(k)=K mod M
[V. Lum, P. Yuen, M. Dodd. Key to Address Transform
Techniques: a Fundamental Performance Study on Large
Existing Formatted Files, Communications of the ACM, 14(4),
April 1971]
40
Funções de Hashing
Exemplo:
000
000
001
CPF
123456000
456123000
234156001
Nome
Profissão
Salário
...
...
...
...
h(CPF) = CPF mod 1000
999
999
567890999
089765999
41
Colisões
Colisão:
Ocorre quando o valor do campo de hash de um registro
que está sendo incluído levar a um endereço hash que já
contiver um registro diferente.
Tratamento de Colisão:
Incluir o novo registro em alguma outra posição, uma vez
que o endereço hash está ocupado.
O processo para encontrar outra posição é chamado
resolução ou tratamento de colisão.
42
Tratamento de Colisões – Hashing
Estático (No. Fixo de Buckets)
Endereçamento aberto ou linear
A partir da posição de colisão, procurar uma posição
subseqüente vaga.
Encadeamento
Manter uma lista encadeada de registros de overflow para
cada posição no espaço de endereços.
Hashing múltiplo:
Aplicar uma segunda função de hashing quando ocorrer
uma colisão. Se ocorrer nova colisão, aplicar
endereçamento aberto ou nova função de hashing.
43
Hashing Estático: Encadeamento
utilizando Buckets de Overflow
buckets principais
bucket 0
340
460
buckets de overflow
ponteiro
bucket 1
bucket 2
321
761
91
22
72
522
182
..
.
ponteiro
652
ponteiro
..
.
bucket 9
ponteiro
ponteiro
ponteiro
981
399
89
ponteiro
ponteiro
ponteiro
ponteiro
Os
ponteiros
são
para
registros dentro dos buckets
de overflow
44
Tratamento de Colisões – Hashing
Estático (No. Fixo de Buckets)
Cada método de resolução de colisão requer seus
próprios algoritmos para inclusão, recuperação e
exclusão de registros.
Objetivo de uma boa função hash: Minimizar
colisões e não deixar endereços sem uso
Estudos de simulação e análise recomendam manter entre
70% e 90% de uma tabela hash cheia.
Sendo um arquivo com r registros, deve-se escolher M
localizações para o espaço de endereços de modo que r/M
esteja entre 0,7 e 0,9.
Escolher número primo para M para a função hash mod 45
Tabela Hash – Inserção (1)
Ex: Supondo que temos um esquema de tratamento de colisão por
encadeamento, um total de 4 depósitos e que cada bloco pode
conter apenas 2 registros
0
1
2
3
a
h(a) = 3
h(b) = 2
h(c) = 1
h(d) = 0
h(e) = 1
h(f) = 3
46
Tabela Hash – Inserção (1)
Ex: Supondo que temos um esquema de tratamento de colisão por
encadeamento, um total de 4 depósitos e que cada bloco pode
conter apenas 2 registros
0
1
2
b
3
a
h(a) = 3
h(b) = 2
h(c) = 1
h(d) = 0
h(e) = 1
h(f) = 3
47
Tabela Hash – Inserção (1)
Ex: Supondo que temos um esquema de tratamento de colisão por
encadeamento, um total de 4 depósitos e que cada bloco pode
conter apenas 2 registros
0
1
c
2
b
3
a
h(a) = 3
h(b) = 2
h(c) = 1
h(d) = 0
h(e) = 1
h(f) = 3
48
Tabela Hash – Inserção (1)
Ex: Supondo que temos um esquema de tratamento de colisão por
encadeamento, um total de 4 depósitos e que cada bloco pode
conter apenas 2 registros
0
d
1
c
2
b
3
a
h(a) = 3
h(b) = 2
h(c) = 1
h(d) = 0
h(e) = 1
h(f) = 3
49
Tabela Hash – Inserção (1)
Ex: Supondo que temos um esquema de tratamento de colisão por
encadeamento, um total de 4 depósitos e que cada bloco pode
conter apenas 2 registros
0
d
1
2
c
e
b
3
a
h(a) = 3
h(b) = 2
h(c) = 1
h(d) = 0
h(e) = 1
h(f) = 3
50
Tabela Hash – Inserção (1)
Ex: Supondo que temos um esquema de tratamento de colisão por
encadeamento, um total de 4 depósitos e que cada bloco pode
conter apenas 2 registros
0
d
1
c
e
b
2
3
a
f
h(a) = 3
h(b) = 2
h(c) = 1
h(d) = 0
h(e) = 1
h(f) = 3
51
Tabela Hash – Inserção (2)
Considerando o exemplo anterior, seja h(g) = 1
0
d
1
c
e
b
2
3
a
f
g
O depósito 1 passa a
conter 2 blocos
52
Tabela Hash – Remoção (1)
Suponha que vamos remover o registro de chave “e”. Como h(e) = 1, vamos
percorrer a cadeia de blocos deste depósito até encontrarmos o(s) registro(s)
0
d
1
c
e
b
2
3
a
f
g
O depósito 1 pode ser
reorganizado para voltar a ter
somente um bloco
53
Tabela Hash - Remoção (2)
Ao remover o registro de chave “a”, “consolidamos” o depósito 3, trazendo o
registro “f” para a primeira posição
0
d
0
d
1
c
g
b
1
2
c
g
b
a
f
3
f
2
3
54
Eficiência de tabelas Hash
Ideal: um depósito possa conter somente 1 bloco
Avaliar:
número de depósitos (M)
tamanho do bloco (m registros por depósito)
número de registros e a taxa de crescimento (m*M)
Poucos Registros Sobra espaço
Muitos registros Pode ultrapassar tamanho previsto
Então como evitar problemas de crescimento?
Tabelas hash dinâmicas:
Hash Extensível
Hash Linear
55
Hash Extensível
h(chave) gera uma seqüência binária de k bits
Os i primeiros bits de h(chave) são utilizados para
selecionar o depósito em que um dado registro será
colocado.
Um array (tabela Hash) de 2i ponteiros para depósitos é
mantido.
i=1
0001
1
1001
1100
1
0
1
56
Hash Extensível
i cresce à medida em que novos registros são inseridos, não
sendo necessário utilizar depósitos de estouro (overflow).
Cada depósito possui um número de bits de pertinência (j),
que indica quantos bits foram examinados para direcionar
os registros presentes no bloco.
j também cresce com a inserção de registros.
i=1
i=2
0001
1
0
1
1001
1100
1
00
01
10
11
0001
1
1001
1010
2
1100
2
57
Inserção em hash extensível
caso 1 : Duplicação do array e redistribuição de registros
j - bits de pertinência do bloco
array de depósitos
(ponteiros p/ blocos)
i=1
h(chave)
1
000000000
A
h(chave) inicia com 0
h(chave) inicia com 1
inserir registro com
h(chave) = 111100000
bloco B está cheio e j = i :
o conteúdo de B tem que ser redistribuído e
array tem que ser duplicado
1
101010101
100000000
111111111
100001111
B
58
Como seu conteúdo não foi
redistribuído, o j do depósito A não foi
incrementado e A passou a ser
apontado por duas entradas na tabela hash
1
000000000
A
i=2
h(chave) inicia com 00
h(chave) inicia com 01
h(chave) inicia com 10
h(chave) inicia com 11
o array foi
duplicado i foi incrementado
2
101010101
100000000
100001111
2
111111111
111100000
B
B'
j foi incrementado e o conteúdo de B foi
redistribuído entre B e B' de acordo com o
valor dos j primeiros bits de h(chave) 59
Inserção em hash extensível
caso 2
: Apenas redistribuição de registros
i=2
h(chave) inicia com 00
h(chave) inicia com 01
h(chave) inicia com 10
h(chave) inicia com 11
inserir registro com
h(chave) = 011111111
bloco A está cheio e j < i :
o conteúdo de A tem que ser redistribuído
mas o array não precisa ser duplicado
1
000000000
000000011
011000000
000000000
2
101010101
100000000
100001111
2
111111111
111100000
A
B
B'
60
o array não foi alterado
i=2
h(chave) inicia com 00
h(chave) inicia com 01
h(chave) inicia com 10
h(chave) inicia com 11
j foi increm enta d o e o conteú d o d e A foi
red is trib u íd o entre A e A' d e a cord o com o va lor
d os j p rim eiros b its d e h (ch a ve).O a rra y nã o
p recis a s er d u p lica d o p ois já exis te u m d ep ós ito
p a ra A'2
000000000
000000011
000000000
2
011000000
011111111
2
101010101
100000000
100001111
2
111111111
111100000
A
A'
B
B'
61
(Des)Vantagens do Hash
Extensível
A busca nunca precisa fazer acesso a mais de um
depósito de dados
Se o array de depósitos couber na memória, o acesso a
ele não requer operação E/S
Quando o array de depósitos é muito grande (i grande)
o momento da duplicação pode tornar uma inserção bastante
custosa
em especial quando não couber mais na memória
ou ainda, quando ocupar memória demais, impedindo o uso
desta por outros programas e dados
62
Exercício:
h(chave) inicia com 00
h(chave) inicia com 01
h(chave) inicia com 10
h(chave) inicia com 11
1
000000000
000000011
011000000
000000000
A
2
100000000
100000001
100000010
100000011
B
Suponha a seguinte sequência de inserções: 2
101011101
100101101
100011011
100001011
Qual será o i ao final das inserções?
Quantos blocos estarão com somente um
registro?
Qual o bloco mais apontado pelo array de
depósitos?
111111111
111100000
B'
É possível que haja um depósito
que precise ser dividido muitas
vezes,
desequilibrando
a
distribuição da tabela de Hash.
63
(Des)Vantagens do Hash
Extensível
Conclusão
Desperdício de memória
i cresce muito rápido mantendo várias entradas
apontando para um único depósito
Depósitos descaracterizados
Desperdício de disco
Alocação de depósitos com um único registro
64
Hash Linear
O crescimento do array de depósitos é mais lento.
Um array de n depósitos é mantido:
n é dado conforme a taxa de preenchimento médio de registros nos
depósitos
Os i últimos bits de h(chave) são utilizados para selecionar o
depósito em que um dado registro será colocado.
i=2
n=3
r=3
00
0000
01
0101
10
1010
65
Hash Linear
Seja m o valor expresso pelos i últimos bits de h(chave). Se m
< n, o registro é colocado no bloco correspondente ao depósito
numerado como m. Caso contrário, é utilizado o depósito
numerado como m-2i-1 (m com o primeiro bit mudado de 1
para 0).
Veja o que acontece quando vamos inserir o registro
cuja chave gera a sequência 1111:
i=2
n=3
r=3
00
0000
01
0101
10
1010
66
Hash Linear
Seja m o valor expresso pelos i últimos bits de h(chave). Se m
< n, o registro é colocado no bloco correspondente ao depósito
numerado como m. Caso contrário, é utilizado o depósito
numerado como m-2i-1 (m com o primeiro bit mudado de 1
para 0).
Veja o que acontece quando vamos inserir o registro
cuja chave gera a sequência 1111:
i=2
n=3
r=4
00
0000
01
0101
1111
1010
10
67
Hash Linear
Seja r o número de registros na tabela. Considere r/n < 1.7
n cresce à medida em que novos registros são inseridos de forma a manter a
razão r/n abaixo de um limiar pré-determinado.
i cresce quando n ultrapassa 2i.
Quando os parâmetros crescem pode haver redistribuição de registros entre
blocos.
Sempre após inserirmos, verificamos a razão r/n
Ex: inserir 0101, como r/n > 1.7, após a inserção, n já pode crescer,
i=1
n=2
r=3
0
1
0000
1010
1111
i=1 0
n=2
r=4 1
0000
1010
1111
0101
68
Hash Linear
Seja r o número de registros na tabela. Considere r/n < 1.7
n cresce à medida em que novos registros são inseridos de forma a manter a
razão r/n abaixo de um limiar pré-determinado.
i cresce quando n ultrapassa 2i.
Quando os parâmetros crescem pode haver redistribuição de registros entre
blocos.
Sempre após inserimos verificamos a razão r/n
Ex: inserir 0101, como r/n > 1.7, após a inserção, n já pode crescer,
i cresce, o depósito, que corresp. ao novo, com dif do 1o bit é redistribuído
(00)
0000
00
i=1
n=2
r=4
0
1
0000
1010
1111
0101
i = 2 01
n=3
r = 4 10
1111
0101
1010
69
Hash Linear
Depósitos de estouro podem ser utilizados.
Inserir 0001
Cria-se um depósito de estouro para o depósito 01
razão r/n permanece < 1.7, então não precisa aumentar n
E se inserirmos 0111?
00
0000
i=2
01
n=3
r = 4 10
1111
0101
1010
00
0000
i = 2 01
n=3
r = 5 10
1111
0101
1010
0001
70
Hash Linear
E se inserirmos 0111?
A razão ultrapassa 1.7, então devemos aumentar n
00
0000
i = 2 01
n=3
r = 6 10
1111
0101
1010
0001
0111
i=2
n=4
r=6
00
0000
01
0101
0001
1010
10
11
1111
0111
71
Hash Linear
Que cuidado é preciso tomar quando vamos
buscar um dado registro?
Considere a situação abaixo na busca pelo registro
cuja chave gera a seqüência 1011
00
0000
i = 2 01
n=3
r = 5 10
1111
0101
1010
0001
Não há o depósito 11, logo,
realiza a busca no depósito
01.
72
Hash Linear - Inserção
r/n < 3
n=2
i=1
r=5
h(chave)
array de
depósitos
000000000
100000010
h(chave) termina com 0
h(chave) termina com 1
inserir registro com
h(chave) = 111100000
r/n ultrapassará o limiar :
n tem que ser incrementado. n ultrapassará
2i e i terá que ser incrementado também
101010101
111111111
100001111
73
Hash Linear - Inserção
r/n < 3
n=3
i=2
r=6
n foi incrementado para
manter r/n abaixo de 3
i foi incrementado para
manter n abaixo de 2i
h(chave) termina com 00
h(chave) termina com 01 ou 11
h(chave) termina com 10
000000000
111100000
101010101
111111111
100001111
100000010
este registro foi redistribuído para
manter a coerência do array
74
Sumário
Introdução e Motivação
Memórias
Alocação de Registros
Operações em Arquivos
Organização de Arquivos em Disco
Armazenamento em Dicionário de Dados
Exercícios
75
Armazenamento em
Dicionário de Dados
SGBDR precisa manter dados sobre as
relações (Catálogo do Sistema). Exemplos:
Nomes das relações
Nomes dos atributos de cada relação
Domínios e tamanhos dos atributos
Nomes e definições das visões
Restrições de integridade
Nomes de usuários autorizados
Número de tuplas em cada relação
Método de armazenamento para cada relação
76
Armazenamento em
Dicionário de Dados
Exemplo de esquema sobre metadados:
Relação(nome-relação,
local)
Atributo(nome-atributo,
tamanho)
numero_atbs,
organização_armazenamento,
nome-relação,
tipo_domínio,
posição,
Usuário(nome_usuário, senha_criptografada, grupo)
Índice(nome_indice, nome_relação, tipo_indice, atbs_indice)
Visão(nome_visão, definição)
77
Sumário
Introdução e Motivação
Memórias
Alocação de Registros
Operações em Arquivos
Organização de Arquivos em Disco
Armazenamento em Dicionário de Dados
Exercícios
78
Exercício 1:
Considerando os
depósitos da figura,
mostre como ficará a
situação após:
g a j forem inseridos nos
depósitos 0 a 3, resp.
a e b forem eliminados
k a n forem inseridos nos
depósitos 0 a 3, resp.
c e d forem eliminados
0
d
1
c
e
b
2
3
a
f
79
Exercício 2:
Considere a tabela de hash abaixo.
O que acontece com a inclusão de g,
dado que h(g) = 3?
0
d
1
c
e
b
2
3
a
f
80
Armazenamento e
Organização de Arquivos
Leituras Recomendadas
• Cap. 13 – Elmasri e Navathe
• Cap. 11 – Silberschatz e Korth
Atividades Práticas
Lista de Exercícios em Anexo
81