ESTRUTURA DE DADOS: APOSTILA
Autora: Adriana Raposo
Organização de Arquivos
Quando se cria ou se projeta um arquivo de dados é de máxima importância, a análise da
filosofia de trabalho que motivou a sua criação e do suporte a ser utilizado, para que se determine
o tipo de organização mais adequado para seus registros. Quanto à organização, o arquivo
poderá ser:
• Serial;
• Seqüencial;
• Seqüencial-indexado;
• Direto;
• Indexado.
1. Organização Serial
Pela organização serial, os registros são armazenados de acordo com a ordem de
inserção, sem nenhum compromisso com qualquer ordenação.
O acesso a tais registros se dá pela PESQUISA SERIAL, desde o primeiro registro até
encontrar o registro desejado.
2. Organização Seqüencial
Nos arquivos que utilizam esta organização, os registros são gravados em ordem
seqüencial (ocupam posições contíguas de memória), por suas respectivas chaves (primárias),
havendo, pois, uma perfeita ordenação, tanto lógica quanto física. A chave de cada registro é um
atributo comum a todos eles e, em princípio, capaz de individualizar cada um; o nome, por
exemplo, não é uma chave ideal no cadastro de uma empresa, tendo em vista a possibilidade de
homônimos; já o número de matrícula apresenta-se como excelente atributo para esse fim.
Se, em um arquivo seqüencial, não se elege qualquer atributo como chave, os registros
são arquivados simplesmente de acordo com sua ordem de chegada.
As figuras abaixo dão a idéia da disposição dos registros de um arquivo seqüencial
armazenado em uma fita magnética:
IRG
01 Ivan
IRG
03 Mônica
IRG
Registro Físico = Registro Lógico
04 Silvio
IRG
05 Tiago
Fator de Bloco = 1
Registro Lógico
IRG
01 Flávio
02 Roberto
Registro Físico
03 Filipe
IRG
05 Ana
IRG
06 Paulo
Fator de Bloco = 3
Pelas figuras, vê-se que intervalos entre os registros, denominados IRG (Inter Record
Gap); esses intervalos visam a que os dispositivos de leitura e gravação tenham oportunidade de
algumas ações mecânicas entre a leitura e/ou gravação propriamente dita, como, por exemplo,
aceleração ou desaceleração da fita magnética.
O computador só pode acessar um registro de cada vez, a partir do primeiro.
A principal vantagem do arquivo seqüencial é o rápido acesso a registros, quando a grande
maioria deles tem que ser pesquisada seja em tarefas de mera consulta ou em trabalhos de
atualização.
2
Ele poderá estar armazenado em veículos de acesso seqüencial (fita magnética) ou de
acesso direto (disco ou tambor magnético). Neste último caso, a consulta em um registro é feita
través do processo denominado PESQUISA BINÁRIA; é lido inicialmente o registro desejado; em
seguida, lê-se o registro central dessa metade e, assim sucessivamente, até que, diante de um
segmento relativamente curto de arquivo, é feita uma busca seqüencial.
Quanto à atualização, tendo em vista a necessidade de que seja mantida a ordenação
física dos registros, a operação requer que o arquivo seja copiado, a fim de remover espaços
resultantes das exclusões e, por outro lado, acomodarem-se, em suas devidas posições, os novos
registros incluídos.
Pelo que foi visto, é fácil depreender-se que a organização seqüencial é recomendável
quando uma grande parte dos registros é processada de cada vez. Vê-se, também, que um alto
fator de bloco é desejável em muitos casos dessa organização, uma vez que compensa trazer pra
a memória uma boa quantidade de registros lógicos de cada vez, pelo fato de que a grande
maioria deles, em verdade, deverá ser processada.
A atualização de um arquivo seqüencial é feita pela técnica balance-line, em que um
terceiro arquivo (novo arquivo mestre) é gravado a partir da comparação entre os registros da
versão disponível do arquivo mestre com os registros do arquivo de movimento. O exemplo que
segue dá a idéia do processo.
Seja criar em fita magnética a nova versão de um arquivo mestre onde os registros se
encontram seqüencialmente ordenados por seu código. Naturalmente, o arquivo de movimento
está ordenado pelo mesmo critério. Para facilidade, suponha-se fator de bloco igual a 1.
São lidos inicialmente: o 1º registro do arquivo mestre e o 1º registro do arquivo de
movimento. Suponha-se que a chave do registro lido no arquivo mestre seja 0001 e a chave do
registro de movimento seja 0008. Levados à memória principal esses dois registros, é feita a
comparação; como o registro do arquivo mestre é de ordem mais baixa, o 1º registro do arquivo
mestre é transcrito na nova fita.
Esse procedimento vai-se repetir até que se leia, no arquivo mestre, um registro de chave
igual ou maior que 0008. Suponhamos que se leia o registro de chave 0008; neste caso, os
campos do registro do arquivo mestre são alterados de acordo com a nova versão, ou seja, de
acordo com o que foi lido no arquivo de movimento; em seguida, essa nova versão do registro
0008 é gravada na fita nova.
No caso de se ler no arquivo mestre um registro com chave superior à do arquivo de
movimento, o registro movimento é gravado em fita nova; lê-se, então, novo registro do arquivo de
movimento e continua-se procedendo analogamente, até que o último seja gravado na nova fita.
Essa fita conterá, então a nova versão do arquivo mestre.
Num arquivo seqüencial, não se fazem operações de gravação quando se está lendo, nem
operações de leitura quando se está gravando.
Resumo dos procedimentos em arquivos seqüenciais:
• PESQUISA (ACESSO): consulta-se os registros seqüencialmente (dispositivo de acesso
seqüencial), por blocos (dispositivo de acesso seqüencial) ou por pesquisa binária (dispositivo
de acesso direto).
• INCLUSÃO: copia-se o arquivo até o registro de ordem n (enésimo na ordenação); grava-se o
registro que se quer incluir naquela posição (respeitando-se a seqüência); copia-se o restante
do arquivo; apaga-se o arquivo anterior; renomeia-se o novo arquivo.
• EXCLUSÃO: Arquivo em disco: deleta-se o registro; compacta-se o arquivo. Arquivo em fita:
copia-se o arquivo para um novo suporte (fita ou disco) deixando-se de gravar o registro que se
deseja excluir.
• ATUALIZAÇÃO: Balance-line.
3. Organização Seqüencial-Indexada
Cada registro é acessado de modo direto; logo, a organização não se presta a veículos de
gravação/leitura seqüencial.
Quando se cria um arquivo seqüencial-indexado, ficam reservadas três áreas no veículo de
gravação: uma área denominada principal (ou primária), onde são gravados os registros
propriamente ditos, escalonados pela chave em subáreas; uma área destinada a um índice, que
indica a subárea da área principal onde determinado grupo de registros se encontra gravado; e a
3
terceira área, denominada área de overflow, onde se encontram os registros que não foram
alojados na área principal.
A área principal, também chamada de primária, é definida quando o arquivo é gerado. Ela
é ampliada (caso mais comum) ou reduzida cada vez que o arquivo é reorganizado.
A área de índices é um arquivo seqüencial criado pelo sistema, onde cada registro
estabelece um segmento na área principal, e contém o endereço de início do segmento e a chave
mais alta do mesmo. Assim, o sistema acessa de maneira direta um segmento da área principal a
partir da área de índices, de forma semelhante à procura de um capítulo de um livro a partir de
seu índice.
Por ocasião da reorganização, os registros são mantidos ordenados seqüencialmente
segundo a chave de ordenação, mas inteiramente contidos na área principal, esvaziando-se a
área de overflow (ou área de excedentes).
Subárea 1
Subárea 2
100
200
100
200
Subárea 1
Subárea 2
Subárea N
900
900
Subárea N
ÍNDICES
PRINCIPAL
OVERFLOW
Nas inclusões subseqüentes, novos registros são gravados na área de overflow. Esses
registros são mantidos em listas subordinadas às diversas subáreas da área principal.
Cada registro é, pois, acessado através de um diretório CHAVE-ENDEREÇO (índice).
Em cada subárea da área principal os registros estão logicamente ligados em seqüência,
pelas chaves.
Depreende-se, portanto, que movimentos de atualização de um arquivo seqüencialindexado não implicam a necessidade de regravar todo o arquivo. Porém, após algumas inclusões
torna-se conveniente reorganizar o arquivo a fim de que um crescente aumento da área de
overflow não venha torna-lo menos funcional.
A pesquisa a um registro em arquivo seqüencial-indexado leva o computador a verificar,
pela chave, se o registro está na área principal ou na área de overflow e, em seguida, em que
subárea de uma dessas duas se encontra; localizada a subárea, o registro é buscado
seqüencialmente.
É conveniente ressaltar que a organização de um arquivo seqüencial-indexado pode ser
feita através de um programa especificamente criado para tal fim ou mediante a aplicação de um
SORT baseado na chave do arquivo.
Chave K1
Chave K2
.
.
.
Chave Kn
CHAVES
Chaves
K1,K2
Endereços
A1
K3,Ki
A2
Km,Kn
Aj
ÍNDICES
ENDEREÇOS
4
Esta organização apresenta a vantagem de acesso rápido e, além disso, o sistema se
encarrega de relacionar a posição de cada registro com seu conteúdo através da área de índices.
Também é trabalho do sistema a gerência das áreas de índices e de overflow.
Seus inconvenientes são a necessidade de espaço adicional para a área de índices e o
desperdício de espaço que ocorre ao ficarem espaços intermediários livres após sucessivas
atualizações.
Resumo dos procedimentos em arquivos seqüenciais-indexados:
• PESQUISA (ACESSO): normalmente através do diretório CHAVE-ENDEREÇO (a partir de uma
prévia consulta à área de índices). Em casos em que seja mais prático, a pesquisa também
pode ser feita seqüencialmente: nesse caso, o sistema acessa diretamente a área de dados,
isto é, sem acessar inicialmente a área de índices.
• INCLUSÃO: grava-se o registro; o sistema atualizará os ponteiros: o registro anterior apontará
para o incluído e o registro incluído apontará para o anteriormente apontado. Se for o caso, o
sistema atualizará a área de índices.
• EXCLUSÃO: deleta-se o registro; compacta-se o arquivo. O sistema reorganizará os ponteiros
e, se for o caso, a área de índices.
• ATUALIZAÇÃO: lê-se todo o arquivo, inclusive a área de overflow; ordena-se e grava-se o
arquivo. O sistema reorganizará a área de índices; a área de overflow ficará vazia.
4. Organização Direta ou Aleatória ou Relativa
K1
A1
K2
A2
Kn
An
Nesta organização, as informações são acrescentadas e acessadas aleatoriamente
mediante a sua posição, ou seja, indicando o lugar relativo que ocupam dentro do conjunto de
posições possíveis.
O acesso é mais imediato, uma vez que é feito através de um relacionamento entre a
chave e o endereço do registro.
Os registros são armazenados com base em uma relação de endereços previamente
estabelecidos, onde esses endereços são criados em função de todas as possibilidades de
variação da chave.
Quando o endereço é gravado, apagado, alterado ou, simplesmente, pesquisado, seu
endereço reservado é utilizado.
Nesta forma de organização pode-se ler e escrever registros em qualquer ordem e em
qualquer lugar. A grande vantagem é a rapidez de acesso a um determinado registro.
Apresenta o inconveniente de ser tarefa do programador o estabelecimento da relação
entre a posição que um registro ocupa e o seu conteúdo; alem disso, há o risco de se desperdiçar
parte do espaço reservado para o arquivo, já que podem ficar trechos vazios entre um registro e
outro.
IRG
02 Maria
IRG
01 Fred
IRG
06 Oscar
Arquivo Randômico de Acesso Direto
Pelo acesso direto, é reservado um endereço (na memória auxiliar) para cada um dos
registros do arquivo. A chave deste arquivo deve ser numérica, uma vez que será utilizada na
construção do endereçamento.
5
Como vantagem, este tipo de arquivo randômico provê maior rapidez no trato de um
registro isolado. Porém, pode apresentar muita memória reservada e não utilizada.
Arquivo Randômico de Acesso Calculado (ou de Endereçamento Indireto)
Este é usado para diminuir a não utilização de memória reservada.
O domínio da chave é concentrado, ou seja, é mais próximo da necessidade real, dos
registros realmente presentes.
Para calcular o endereço, aplica-se uma função à chave:
ENDEREÇO = RESTO (CHAVE, N)
onde N é o número primo mais próximo do total de registros.
Fatalmente ocorrem os sinônimos, registros com endereços iguais. No entanto, tal cálculo
só é aceitável quando causar menos de 20% de sinônimos.
Na ocorrência de sinônimos, o primeiro registro é gravado no endereço e, para o outro é
colocado um indicador (pointer) no primeiro registro mostrando a localização do segundo. Se
houver um terceiro, é colocado um outro indicador no segundo informando a localização do
terceiro. E assim por diante.
OBS: O pointer fica como campo adicional.
3. Organização Indexada
Os registros são armazenados em um arquivo de organização serial e para cada campo,
através do qual se deseja acesso direto, deve-se criar um arquivo de índices. Este é o processo
de indexação.
Para acessar os registros de um arquivo indexado é utilizada a PESQUISA
BINÁRIA.
Download

Organização de Arquivos