Академический Документы
Профессиональный Документы
Культура Документы
Indexao
Programa
Introduo Operaes bsicas sobre arquivos Armazenagem secundria Conceitos bsicos sobre estrutura de arquivo Organizando arquivos para desempenho Indexao Processamento co-seqencial e ordenao B-Tree e outras organizaes em rvores B+Tree e acesso seqencial indexado Hashing Hashing estendido
2
Objetivos
Introduzir os conceitos bsicos de indexao. Apresentar a utilizao de ndices simples para promover rpido acesso a registros. Investigar as aplicaes do uso de indexao para manuteno de arquivos. Investigar o acesso a registros usando mais de um ndice.
O que um ndice? ndices simples com insero temporal. Operaes bsicas de indexao. ndices muito grandes na memria. Acesso por mltiplas chaves. Recuperao por combinao de chaves secundrias. Listas invertidas. ndices seletivos.
4
O Que Um ndice?
ndices so chaves e campos de referncia associados a um (ou mais) registro(s). Um ndice uma maneira usada para encontrar informao.
um mecanismo de acesso a arquivos.
O Que Um ndice?
ndices simples utilizam arrays simples. Um ndice nos permite impor uma ordem a um arquivo sem rearranj-lo. ndices tambm nos proporcionam mltiplos caminhos de acesso a um arquivo ndices mltiplos (um catlogo de uma biblioteca fornecendo buscas por autor, ttulo, tema, etc.) Um ndice pode permitir acesso via chave a registros de tamanho varivel.
6
O Que Um ndice?
Exemplo: cadastro de musicas
Registros de tamanho varivel Chave primria = Label da gravadora + cdigo (LABEL ID)
O Que Um ndice?
ndices Simples:
Registros de tamanho varivel Chave primria = Label da gravadora + cdigo (LABEL ID) Campo de referncia = o endereo do 1o byte do registro
O Index ordenado em memria, e os registros aparecem no arquivo na ordem que foram includos.
8
O Que Um ndice?
No exemplo anterior, como procurar por uma determinada LABEL ID?
Pesquisa Binria (na memria principal) no arquivo de ndices (Index): encontra a LABEL ID desejada, que vai nos fornecer o campo de referncia. Busca diretamente no arquivo principal, o registro na posio indicada pelo campo de referncia.
O Que Um ndice?
PROCEDURE busca_registro(CHAVE) Encontra a posio da CHAVE no arquivo de ndices (provavelmente via pesquisa binria); Calcula o BYTE_OFFSET do registro correspondente na arquivo de dados; Utiliza o SEEK() e o BYTE_OFFSET para mover para o registro; L o registro do arquivo de dados.
10
O Que Um ndice?
INDEXAO: uma alternativa ordenao do arquivo:
quando se deseja organizar um arquivo que deve ser pesquisado por chaves.
Usa-se um ndice por tipo de chave de acesso. Os ndices tm registros de tamanho fixo.
Permite:
pesquisa binria no arquivo ndice.
Com arquivo de dados tendo chave e registro de tamanho fixo ou varivel (nesse caso usa-se PRR em lugar de NRR). Acesso direto no arquivo de dados. buscando os registros no arquivo de dados por ordem de chave.
11
O Que Um ndice?
A estrutura do arquivo de ndices bem simples:
um arquivo com registros de tamanho fixo. Cada registro tem 2 campos de tamanho fixo:
Um campo chave Um campo de referncia, contendo o byte-offset.
No arquivo de dados, os registros permanecem na ordem em que foram inseridos (= insero temporal)
O arquivo de ndices consideravelmente mais fcil de trabalhar do que o arquivo de dados, pois seus registros tem tamanho fixo, e ele muito menor do que o arquivo de dados.
12
O Que Um ndice?
Questes que devem ser analisadas:
Como fazer um Index persistente? (ou seja, como armazenar os ndices num arquivo quando no esto na memria principal?) Como garantir que o Index seja preciso? (Principalmente quando h muitas inseres, remoes e atualizaes).
13
O uso de um campo fixo pequeno para a chave pode causar problemas se a chave for truncada.
arquivo de dados.
14
Eliminao
A cada retirada de registro no arquivo bsico, elimine a entrada correspondente no arquivo ndice.
Recuperao
Procedimento busca-registro (j visto no slide anterior).
15
dada a chave, use pesquisa binria para recuperar a PRR. posicione no registro com um nico seek e o leia.
Por enquanto vamos assumir que o arquivo de ndices lido da memria secundria e armazenado na memria principal num array chamado INDEX[ ]. Mais tarde vamos considerar o caso em que o arquivo de ndices muito grande para ser armazenado na memria principal.
16
Criar arquivo de ndice e de dados. Carregar o arquivo de ndice para a memria. Regravar arquivo de ndice depois de us-lo. Incluir registros:
1.
no arquivo de dados e no de ndice. no arquivo de dados e no de ndice. Com mudana de chave primria. Sem mudana de chave primria.
Excluir registros:
1.
Atualizar registros:
1. 2.
17
18
a leitura rpida:
os registros do arquivo ndice so pequenos. grande quantidade deles podem estar num mesmo bloco. a leitura sequencial, h pouco movimento de brao.
19
Regravar arquivo de ndice depois de us-lo. Operao feita quando o INDEX[ ] alterado.
procedure regrava-ndice() { se existe alterao no vetor INDEX[ ] ento { abra um novo arquivo de ndices, ndice_arq. escreva o registro cabealho para ndice_arq. // inclua a data de atualizao grave o INDEX[] da memria no arquivo ndice_arq. feche o arquivo ndice-arq. }}
20
21
Regravar arquivo de ndice depois de us-lo. MECANISMO P/ DETECTAR DESATUALIZAO DO INDEX: setar um flag assim que o arquivo de ndices em memria for modificado. Este flag poderia ser gravado no registro cabealho do arquivo de ndices em disco e limpo quando o arquivo for reescrito. Todos os programas verificariam o status do flag antes de utilizar o arquivo de ndices. Se o flag est setado, ento o programa saberia que o arquivo de ndices estaria desatualizado. RECONSTRUO DO ARQ DE NDICES: Deve acontecer automaticamente, antes de qualquer tentativa de acesso ao arquivo de ndices.
22
Incluir Registros Incluir registro no arquivo bsico: atravs da PRR do registro (byte_offset). no final do arquivo ou em algum espao, atualizando a LED se for o caso. Em memria! Atualizar o vetor INDEX (na memria): incluir a chave primria e a PRR na ordem certa. ativar o flag de atualizao do INDEX[ ] permite saber que o INDEX[ ] precisa ser regravado no arquivo em disco, ao trmino da aplicao.
Obs: O INDEX[] um array mantido ordenado. A insero de um novo registro no INDEX[] requer alguma reorganizao do INDEX[]. Registros tem que ser shift, etc. A grande 23 diferena aqui que o INDEX[] um array mantido (inteiramente) em memria. Todo a reorganizao do INDEX[] pode ser feita sem nenhum acesso arquivo.
atualizar o INDEX[ ], faz-se uma excluso e uma incluso. alterar o registro correspondente no arquivo de dados:
caso no caiba, deve-se colocar o espao atual na LED e incluir em uma nova posio no arquivo de dados:
alterar a PRR da chave correspondente no INDEX[ ]. ativar o flag de atualizao do ndice.
25
Prxima Aula...
ndices muito grandes na memria. Acesso por mltiplas chaves. Recuperao por combinao de chaves secundrias. Listas invertidas. ndices seletivos