Classificação e Pesquisa de Dados Aula 23 Organização de Arquivos: Arquivos Indexados, Diretos e Arquivos Invertidos UFRGS INF1124
Arquivo indexado - AI Indicação de uso Baixa freqüência de acessos seqüenciais em relação aos acessos aleatórios
Arquivo indexado Caracterização Nesta organização, os registros são acessados, sempre, através de um ou mais índices, não havendo qualquer compromisso com a ordem física de instalação dos registros no arquivo Conseqüência direta maior eficiência na operação de inserção de um registro
Arquivo Indexado chave endereço 1 5 15 7 175 1 11 3 13 12 135 1 14 9 145 2 148 8... Tabela Fina #1 #2 #3 #4 #5 #6 #7 #8 #9 #1 #11 #12... 175 145 11 151 1 16 15 148 14 135 18 13...
Índices Podem existir tantos quantas forem as chaves de acesso aos registros Um índice contém uma entrada para cada registro Arquivo Indexado 5
Índices As entradas do índice são ordenadas pelo valor da chave de acesso Cada entrada em um índice é constituída por um par <Chave_registro, endereço_registro> A seqüencialidade física no índice visa tornar mais eficiente o processo de busca e permitir o acesso serial ao arquivo Arquivo Indexado 6
Tipos de Índices Exaustivo Contém uma entrada para cada registro do arquivo Seletivo Possui entradas apenas para um subconjunto dos registros Ex.: Subconjunto que define todos os alunos cujo curso = ciência da computação e ano_ingresso = 1999 Arquivo Indexado 7
Desvantagens Necessidade de atualização de todos os índices quando Um registro é inserido no arquivo Alteração de um registro envolve atributos associados a índices Quanto maior é o número de índices, mais onerosa é a operação de inserção Arquivo Indexado 8
Acesso a um registro Acesso serial Através de um dos índices, de acordo com a seqüência desejada A maioria dos acessos requer apenas uma leitura do disco Acesso aleatório Efetivação de uma busca sobre o índice De um modo geral requer acessos a um único cilindro Após a determinação do endereço, a leitura do registro de dados pode requerer o acesso a um cilindro distinto Arquivo Indexado 9
Inserção de um registro O registro é armazenado em qualquer endereço vago do arquivo Seus pares <chave_registro, endereço_registro> relativos aos índices existentes são inseridos nos índices correspondentes Ocorrência de overflow Alternativa de solução: árvores B Arquivo Indexado 1
Exclusão de um registro Área de dados ocupada é liberada São removidas as entradas do índices correspondentes por Retirada física do par Utilização de uma marca Devem ser determinados os índices seletivos afetados Arquivo Indexado 11
Alteração de um registro Identificação do registro Via argumento de pesquisa Endereço é determinado por uma busca sobre o índice O endereço do registro é conhecido Tipo da alteração Normal Lê altera grava na mesma posição Com aumento do tamanho do registro Lê exclui insere registro atualizado Arquivo Indexado 12
Arquivo direto (hash) Indicação de uso Baixa freqüência de acessos seriais em relação aos acessos aleatórios Dispositivos de armazenamento de acesso direto
Arquivo direto Caracterização Organização por cálculo de endereço, com área de dados organizadas em blocos Instalação dos registros em endereços determinados, com base no valor de uma chave primária Acesso aleatório eficiente Dispensa uso de estrutura auxiliar (índice) Substituição de um índice pela função que calcula o endereço do registro a partir do argumento de busca
Arquivo direto Argumento de pesquisa E = F (C) endereço C = 144 E = 3 #1 #2 #3 #4 #5 #6 #7 #8 #9... M Número Nome Idade Salário 11 Antônio 18 85 144 Cristiano 2 1 18 Edison 18 65 295 Carmen 19 9 195 Flávio 21 9 315 Tatiana 2 1
Tipos de funções Funções determinísticas Um único valor de chave de acesso para cada endereço Impossível na prática Funções probabilísticas Geram para cada valor da chave um endereço tão único quanto possível Geram a necessidade de tratamento das colisões Arquivo Direto 17
Funções probabilísticas Com preservação da ordem dos registros pelo valor da chave de acesso Se chave 1 > chave 2 então f (chave 1 ) > f (chave 2 ) Ex.: Para chaves numéricas no intervalo [9, 315], a função f (x) = [(x 9) / 61] + 1 gera números que variam entre 1 e 37, que podem ser associados a endereços do arquivo Sem preservação da ordem dos registros Função de aleatorização ou função de randomização Ex.: Função resto da divisão Arquivo Direto 18
Tratamento das colisões Endereçamento aberto Pesquisa seqüencial Pesquisa no bloco Realeatorização Encadeamento Uso de áreas de extensão Encadeamento puro Arquivo Direto 19
Endereçamento aberto com pesquisa seqüencial Se o endereço calculado já está ocupado, então é usado o primeiro endereço livre na seqüência end+1, end+2,... Arquivo Direto 2
Endereçamento aberto com pesquisa no bloco A função de aleatorização gera para cada registro o endereço de um bloco Quando o bloco estiver cheio, o registro é inserido no primeiro endereço livre dos blocos seguintes
Endereçamento aberto com realeatorização A função de aleatorização gera para cada registro o endereço de um bloco Quando o bloco estiver cheio, é calculado o endereço de um outro bloco através de uma outra função Qual é a vantagem?
Encadeamento com uso de áreas de extensão O acesso ao bloco é feito por meio da função de aleatorização Se o bloco está cheio, o registro é armazenado em área de extensão e inserido na lista encadeada correspondente ao seu bloco Arquivo Direto 23
Encadeamento com uso de áreas de extensão Cada bloco possui um header, o qual armazena o endereço da lista a ele associada na área de extensão Esta organização combina endereçamento aberto com encadeamento Arquivo Direto 24
Encadeamento puro Registros colidentes são coletados em uma lista encadeada Todos os registros são armazenados na área principal É formada uma lista encadeada para cada para cada grupo de registros associados ao mesmo endereço Arquivo Direto 25
Encadeamento puro Tipos de estruturas de acesso O endereço calculado é um endereço sobre a área de dados do arquivo O 1º registro da lista funciona como header O 1º registro da lista é armazenado, obrigatóriamente, no endereço calculado O endereço calculado é um endereço sobre uma tabela de headers associada ao arquivo Gera espalhamento dos registros de um mesmo grupo Arquivo Direto 26
Acesso a um registro Acesso serial Através de uma função que preserva a ordem dos registros ou Pelo conhecimento do valor da chave do próximo registro da seqüência Acesso aleatório Encadeamento puro --> percorrer a lista Endereçamento aberto --> procurar nos endereços seguintes Arquivo Direto 27
Inserção de um registro Organização por encadeamento Com tabela de headers Insere na 1ª posição livre do arquivo Insere no início da lista encadeada Com encadeamento puro Insere no end calculado, caso esteja livre Caso esteja ocupado Por um registro do grupo Por um registro não pertencente ao grupo Arquivo Direto 28
Inserção de um registro Organização por endereçamento aberto Se end calculado estiver livre então novo registro é armazenado em end Caso contrário, o novo registro é armazenado no endereço livre mais próximo Arquivo Direto 29
Exclusão de um registro Através de uma marca de excluído Através de sua remoção da lista de colisões Se a opção de remoção for adotada, então é aconselhável o uso de duplo encadeamento! Arquivo Direto 3
Alteração de um registro Procedimento normal lê --> altera --> grava no mesmo endereço Procedimento diferenciado lê --> exclui --> altera --> insere novamente Arquivo Direto 31
Reorganização do arquivo Exigem reorganizações periódicas Garantia de eficiência de acesso Re-agrupamento dos registros da mesma lista quando a organização inclui áreas de extensão ou trabalha com encadeamento puro Alteração do campo de endereço na tabela de headers em conseqüência do deslocamento dos registros na área de dados Remoção física dos registros excluídos Arquivo Direto 32
Arquivo invertido Indicação de uso Esta organização está voltada para o acesso aos registros de um arquivo por chaves secundárias
Arquivo invertido Caracterização Em vez de serem coletados os valores dos atributos para cada registro, são identificados os registros que possuem um dado valor do atributo considerado À cada valor de chave corresponde uma lista de endereços de registros O conjunto de listas invertidas associado a uma chave de acesso é chamado inversão Um arquivo invertido pode possuir uma ou mais inversões
Arquivo Invertido Idade Endereços 2 5 6 22 7 11 23 3 8 25 1 4 13 15 26 1 12 27 2 28 9 14 16 Salário Números 5 1 14 55 185 243 6 175 24 295 65 144 315 7 15 26 75 19 2 22 27 31 inversões #1 #2 #3 #4 #5 #6 #7 #8 #9 #1 #11 #12 #13 #14 #15 #16... 1 Ademar 25 5 15 Afonso 27 7 24 Iara 23 6 185 Edmundo 25 55 144 Cristiano 2 65 315 Tatiana 2 65 2 Gerson 22 75 19 Enio 23 75 243 Ivan 28 55 26 Miguel 26 7 175 Ângela 22 6 14 Claudia 26 5 22 Helena 25 75 27 Ramon 28 75 295 Flavio 25 6 31 Sonia 28 75......
Arquivo Invertido Decisões importantes Como estruturar o acesso às listas? Como estruturar as listas?
Como estruturar o acesso às listas? Lista Índice... ou...... C e = f (C)
Como estruturar as listas Qualquer solução estudada para representação de listas lineares Contigüidade física --> registros de tamanho variável, normalmente Encadeamento Mapa de bits (quando a gama de valores possíveis é pequena) Considerar que, via de regra, tais listas são armazenadas em disco, não sendo recomendável o simples encadeamento item a item
Como estruturar as listas Solução usual: fazer com que cada lista seja composta por uma lista encadeada de zero ou mais blocos, cada um contendo vários endereços de registros Fazer com que as listas estejam ordenadas com o mesmo critério Fazer com que os registros sejam identificados da mesma maneira
Mapa de bits 5 55 6 65 7 75 #1 #2 #3 #4 #5 #6 #7 #8 #9 #1 #11 #12 #13 #14 #15 #16 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 #1 #2 #3 #4 #5 #6 #7 #8 #9 #1 #11 #12 #13 #14 #15 #16... 1 Ademar 25 5 15 Afonso 27 7 24 Iara 23 6 185 Edmundo 25 55 144 Cristiano 2 65 315 Tatiana 2 65 2 Gerson 22 75 19 Enio 23 75 243 Ivan 28 55 26 Miguel 26 7 175 Ângela 22 6 14 Claudia 26 5 22 Helena 25 75 27 Ramon 28 75 295 Flavio 25 6 31 Sonia 28 75......
Como estruturar as listas Bloco / Cada bloco contém um número fixo de endereços de registros, podendo estar total ou parcialmente ocupado!
Operações Inserções e exclusões ocorrem como conseqüência de modificações no arquivo de dados Acesso a registros Quais os nomes dos funcionários com idade = 25? Quais os nomes dos funcionários com idade = 25 e salário = 9? Quais os números dos funcionários com salário entre 5 e 7?