Acesso Sequencial Indexado
Transcrição
Acesso Sequencial Indexado
1 Acesso Sequencial Indexado 25 de outubro de 2011 2 Acesso Sequencial Indexado • Objetivo: Considerar de forma unificada duas visões sobre estruturas de acesso a arquivos • Sequencial: arquivo pode ser acessado sequencialmente (sem seeks), gerando registros ordenados por chave • Indexada: arquivo é visto como um conjunto de registros indexados por chave 2 Acesso Sequencial Indexado • l b o Pr 1 a em l b o Pr 2 a em Objetivo: Considerar de forma unificada duas visões sobre estruturas de acesso a arquivos • Sequencial: arquivo pode ser acessado sequencialmente (sem seeks), gerando registros ordenados por chave • Indexada: arquivo é visto como um conjunto de registros indexados por chave 3 Exemplo Operações cosequenciais Operações indexadas Ler dois arquivos para unir os registros Acessar um registro dado uma chave 3 Exemplo Operações cosequenciais Ler dois arquivos para unir os registros + Operações indexadas Acessar um registro dado uma chave Acesso Sequencial Indexado l b o Pr 1 a em 4 Conjunto de Sequência de Registros • Objetivo: manter dinamicamente, em disco, um conjunto de registros ordenados por chave • Problema: ordenação do arquivo em disco é “cara” l b o Pr 1 a em 4 Conjunto de Sequência de Registros • Objetivo: manter dinamicamente, em disco, um conjunto de registros ordenados por chave • • Problema: ordenação do arquivo em disco é “cara” Solução: • • Organizar os registros em blocos Um bloco se torna a menor unidade endereçável nas operações de leitura e escrita no disco 5 Exemplo de organização em blocos Chave: nome Fator de bloco: 4 nomes/bloco Chaves: Adams, Baird, Bixby, Boone, Bynum, Carson, Cole, Davis, Denver, Ellis 6 Exemplo de organização em blocos Chave: nome Fator de bloco: 4 nomes/bloco bloco 1 bloco 2 bloco 3 Adams, Baird, Bixby, Boone, Bynum, Carson, Cole, Davis, Denver, Ellis 6 Exemplo de organização em blocos Chave: nome Fator de bloco: 4 nomes/bloco bloco 1 bloco 2 bloco 3 Adams, Baird, Bixby, Boone, Bynum, Carson, Cole, Davis, Denver, Ellis Inserir Carter 6 Exemplo de organização em blocos Chave: nome Fator de bloco: 4 nomes/bloco bloco 1 bloco 2 bloco 3 Adams, Baird, Bixby, Boone, Bynum, Carson, Cole, Davis, Denver, Ellis Inserir Carter 7 Exemplo de organização em blocos Chave: nome Fator de bloco: 4 nomes/bloco bloco 1 bloco 2 bloco 3 bloco 4 Adams, Baird, Bixby, Boone, Bynum, Carson, Carter, Denver, Ellis Cole, Davis, subdivisão (split) de bloco 8 Exemplo de organização em blocos Chave: nome Fator de bloco: 4 nomes/bloco bloco 1 bloco 2 bloco 3 bloco 4 Adams, Baird, Bixby, Boone, Bynum, Carson, Carter, Denver, Ellis Cole, Davis, Remover Davis 9 Exemplo de organização em blocos Chave: nome Fator de bloco: 4 nomes/bloco bloco 1 bloco 2 bloco 3 bloco 4 Adams, Baird, Bixby, Boone, Bynum, Carson, Carter, Denver, Ellis Cole, Remover Davis underflow 10 Exemplo de organização em blocos Chave: nome Fator de bloco: 4 nomes/bloco bloco 1 bloco 2 bloco 3 bloco 4 Adams, Baird, Bixby, Boone, Bynum, Carson, Carter, Cole, Denver, Ellis Remover Davis disponível concatenação 11 Exemplo de organização em blocos Chave: nome Fator de bloco: 4 nomes/bloco bloco 1 bloco 2 bloco 3 bloco 4 Adams, Baird, Bixby, Boone, Bynum, Carson, Carter, Cole, Denver, Ellis Conclusão: o arquivo inteiro pode ser mantido ordenado apenas pela ordenação de suas partes (blocos) 12 Conjunto de Sequência de Registros • Problemas: • A ordenação do arquivo pode exigir mais espaço em disco por conta de fragmentações internas. Neste caso, pode-se adotar estratégias que privilegiem a redistribuição de chaves • A ordem física dos registros só é garantida ao longo de um bloco e não entre-blocos • Qual deve ser o tamanho de um bloco ? 13 Conjunto de Sequência de Registros • Qual deve ser o tamanho de um bloco ? • Deve representar um compromisso entre tempo de acesso, memória RAM disponível e as operações a serem executadas • O tamanho do bloco deve permitir o armazenamento de vários destes em memória • O tempo de leitura e escrita de um bloco não deve ser muito longo (para não perder o que se ganhou por economia de seeks) l b o Pr 2 a em 14 Sequência de Registros e Indexação • Objetivo: definir um método eficiente que possibilite o acesso a um bloco dado uma chave • • Ideia: construir um índice de chaves apontando para cada um dos blocos Sequência de blocos: Adams-Berne Bolen-Cage Camp-Dutton Embry-Evans Faber-Folk Folks-Gaddis 1 2 3 4 5 6 l b o Pr 2 a em 14 Sequência de Registros e Indexação • Objetivo: definir um método eficiente que possibilite o acesso a um bloco dado uma chave • • Ideia: construir um índice de chaves apontando para cada um dos blocos Sequência de blocos: Adams-Berne Bolen-Cage Camp-Dutton Embry-Evans Faber-Folk Folks-Gaddis 1 2 3 4 5 6 15 Sequência de Registros e Indexação • Sequência de blocos: Adams-Berne Bolen-Cage Camp-Dutton Embry-Evans Faber-Folk Folks-Gaddis 1 2 3 4 5 6 chave número do bloco Berne 1 2 3 4 5 6 Cage Dutton Evans Folk Gaddis Índices para a sequência de blocos 16 Chaves Delimitadoras • Os índices servem apenas de guia na busca do bloco que contém a chave a ser acessada • Menor delimitador possível (não-único): economia de espaço • Neste caso, teremos uma Árvore B+ de prefixo simples 17 Chaves Delimitadoras • Os índices servem apenas de guia na busca do bloco que contém a chave a ser acessada • Menor delimitador possível (não-único): economia de espaço • Delimitador de blocos: Adams-Berne Bolen-Cage Camp-Dutton Embry-Evans Faber-Folk Folks-Gaddis 1 2 3 4 5 6 17 Chaves Delimitadoras • Os índices servem apenas de guia na busca do bloco que contém a chave a ser acessada • Menor delimitador possível (não-único): economia de espaço • Delimitador de blocos: Bo Cam E F Folks Adams-Berne Bolen-Cage Camp-Dutton Embry-Evans Faber-Folk Folks-Gaddis 1 2 3 4 5 6 18 Arquivo Sequencial Indexado e + Árvore B de Prefixo Simples E conjunto de índices Bo Cam F Folks Adams-Berne Bolen-Cage Camp-Dutton Embry-Evans Faber-Folk Folks-Gaddis 1 2 3 4 5 6 19 Busca por Blocos • • A partir dos índices na Árvore B, podemos acessar um bloco da seguinte forma: • Se chave procurada < delimitador, então vá para a esquerda na árvore • Se chave procurada ≥ delimitador, então vá para a direita na árvore Lembre que: Árvore B+ de prefixo simples possui os menores delimitadores possíveis 20 Operações sobre Árvores + B • Supressão de registros sem originar concatenação e redistribuição: alterações apenas nos blocos de registros; o conjunto de índices não é alterado • Inserção sem subdivisão: idem 21 Operações sobre Árvores + B Remover Embry e Folks E Bo Cam F Folks Adams-Berne Bolen-Cage Camp-Dutton Embry-Evans Faber-Folk Folks-Gaddis 1 2 3 4 5 6 21 Operações sobre Árvores + B Remover Embry e Folks E Bo Cam F Folks Adams-Berne Bolen-Cage Camp-Dutton Embry-Evans Faber-Folk Folks-Gaddis 1 2 3 4 5 6 22 Operações sobre Árvores + B Remover Embry e Folks E Bo Cam F Folks Adams-Berne Bolen-Cage Camp-Dutton Ervin-Evans Faber-Folk Folks-Gaddis 1 2 3 4 5 6 22 Operações sobre Árvores + B Remover Embry e Folks E Bo Cam F Folks Adams-Berne Bolen-Cage Camp-Dutton Ervin-Evans Faber-Folk Folks-Gaddis 1 2 3 4 5 6 23 Operações sobre Árvores + B Remover Embry e Folks E Bo Cam F Folks Adams-Berne Bolen-Cage Camp-Dutton Ervin-Evans Faber-Folk Frost-Gaddis 1 2 3 4 5 6 24 Operações sobre Árvores • Inserção com subdivisão: mudanças no número de blocos de registros • • + B Alteração no conjunto de índices através das regras aplicadas às Árvores B Supressão com redistribuição e/ou concatenação: idem 25 Operações sobre Árvores + B Inserir Ayers E Bo Cam F Folks Adams-Berne Bolen-Cage Camp-Dutton Ervin-Evans Faber-Folk Frost-Gaddis 1 2 3 4 5 6 25 Operações sobre Árvores + B Inserir Ayers E Bo Cam F Folks split Adams-Berne Bolen-Cage Camp-Dutton Ervin-Evans Faber-Folk Frost-Gaddis 1 2 3 4 5 6 26 Operações sobre Árvores + B Inserir Ayers E Bo Cam F Folks split Adams-Avery Ayers-Berne 1 Ay 7 Bolen-Cage Camp-Dutton Ervin-Evans Faber-Folk Frost-Gaddis 2 3 4 5 6 27 Operações sobre Árvores + B Inserir Ayers Bo Cam Ay Adams-Avery Ayers-Berne 1 7 E F Folks Bolen-Cage Camp-Dutton Ervin-Evans Faber-Folk Frost-Gaddis 2 3 4 5 6 28 Operações sobre Árvores • Supressão com underflow: concatenação dos blocos de registros Bo Adams-Avery Ayers-Berne 7 E Cam Ay 1 + B F Folks Bolen-Cage Camp-Dutton Ervin-Evans Faber-Folk Frost-Gaddis 2 3 4 5 6 28 Operações sobre Árvores • Supressão com underflow: concatenação dos blocos de registros Remover Cage Bo Adams-Avery Ayers-Berne 7 E Cam Ay 1 + B F Folks Bolen-Cage Camp-Dutton Ervin-Evans Faber-Folk Frost-Gaddis 2 3 4 5 6 29 Operações sobre Árvores • Supressão com underflow: concatenação dos blocos de registros Remover Cage Bo Adams-Avery Ayers-Berne 7 E Cam Ay 1 + B Bolen Camp-Dutton 2 3 concatenação F Folks Ervin-Evans Faber-Folk Frost-Gaddis 4 5 6 30 Operações sobre Árvores • Supressão com underflow: concatenação dos blocos de registros Remover Cage Bo Adams-Avery Ayers-Berne Bolen-Dutton 7 E Cam Ay 1 + B 2 F Folks Ervin-Evans Faber-Folk Frost-Gaddis 4 5 6 31 Operações sobre Árvores • Supressão com underflow: concatenação dos blocos de registros Remover Cage Bo Adams-Avery Ayers-Berne Bolen-Dutton 7 E F Ay 1 + B 2 Folks Ervin-Evans Faber-Folk Frost-Gaddis 4 5 6 32 Operações sobre Árvores • Supressão com underflow: concatenação dos blocos de registros Remover Cage E Ay Bo Adams-Avery Ayers-Berne Bolen-Dutton 1 + B 7 2 F Folks Ervin-Evans Faber-Folk Frost-Gaddis 4 5 6 33 Operações sobre Árvores • + B Supressão com underflow: concatenação dos blocos de registros Remover Cage E Ay F Bo Folks Adams-Avery Ayers-Berne Bolen-Dutton Ervin-Evans 1 7 2 4 Faber-Folk Frost-Gaddis 5 6 34 Operações sobre Árvores • + B Portanto: • Se blocos de registros são subdivididos, um novo delimitador é necessário no conjunto de índices • Se blocos são concatenados, um separador deve ser removido do conjunto de índices • Se registros são redistribuídos entre blocos da sequência de registros, o delimitador no conjunto de índices deve ser atualizado 35 Blocos de Conjunto de Índices • Os índices (delimitadores) podem ser armaenados em blocos, tal como os registros • Os delimitadores podem ser de tamanho variável • • Grande número de delimitadores em um bloco de índice • Árvore menos profunda Busca binária pode ser feita sobre estes delimitadores armazenados em RAM 36 Exemplo de Estrutura de um Bloco de Índice Delimitadores concatenados AsBaBroCChCraDeleEdiErrFaFle 00 02 04 07 08 10 13 17 20 23 25 Índices dos delimitadores 36 Exemplo de Estrutura de um Bloco de Índice Delimitadores concatenados AsBaBroCChCraDeleEdiErrFaFle 00 02 04 07 08 10 13 17 20 23 25 Índices dos delimitadores No de delimitadores Tamanho total dos delimitadores índices delimitadores no relativo dos blocos 11 28 AsBaBroCChCraDeleEdiErrFaFle 00 02 04 07 08 10 13 17 20 23 25 B00 B01 B02 B03 B04 B05 B06 B07 B08 B09 B10 B11 37 Exemplo de Estrutura de um Bloco de Índice No de delimitadores Tamanho total dos delimitadores índices delimitadores no relativo dos blocos 11 28 AsBaBroCChCraDeleEdiErrFaFle 00 02 04 07 08 10 13 17 20 23 25 B00 B01 B02 B03 B04 B05 B06 B07 B08 B09 B10 B11 Nível conceitual: ordem dos delimitadores: 0 1 2 3 4 5 6 7 8 9 10 B00 As B01 Ba B02 Bro B03 C B04 Ch B05 Cra B06 Dele B07 Edi B08 Err B09 Fa B10 Fle B11 38 Criação Sequencial da Árvore • + B Problema: A criação aleatória da árvore (com registros introduzidos não-ordenadamente à medida que chegam) envolve operações de subdivisão e redistribuição que são “caras” 38 Criação Sequencial da Árvore + B • Problema: A criação aleatória da árvore (com registros introduzidos não-ordenadamente à medida que chegam) envolve operações de subdivisão e redistribuição que são “caras” • Ideia: Ordenar o conjunto dos registros que comporão a árvore, armazenando-os sucessivamente nos blocos • Os registros são armazenados na ordem correta. Para cada bloco é definido o seu delimitador que, em seguida, é armazenado no bloco índices (contido em memória até que o bloco fique cheio) 39 Exemplo ALWASPBET 00 03 06 ACCESS-ALSO ALWAYS-ASK ASPECT-BEST BETTER-CAST 39 Exemplo Novo bloco: CATCH-CHECK ALWASPBET 00 03 06 ACCESS-ALSO ALWAYS-ASK ASPECT-BEST BETTER-CAST 40 Exemplo Novo bloco: CATCH-CHECK CAT 00 -1 -1 bloco sem delimitadores ALWASPBET 00 03 06 ACCESS-ALSO ALWAYS-ASK ASPECT-BEST -1 -1 -1 BETTER-CAST CATCH-CHECK 41 Exemplo Novo bloco: CLASS-COPY CAT 00 -1 -1 ALWASPBET 00 03 06 ACCESS-ALSO ALWAYS-ASK ASPECT-BEST -1 -1 -1 BETTER-CAST CATCH-CHECK 42 Exemplo Novo bloco: CLASS-COPY CAT ALWASPBET 00 03 06 ACCESS-ALSO ALWAYS-ASK ASPECT-BEST 00 -1 -1 CL BETTER-CAST 00 -1 -1 CATCH-CHECK CLASS-COPY 43 Exemplo Novo bloco: COST-DAMAGE CAT ALWASPBET 00 03 06 ACCESS-ALSO ALWAYS-ASK ASPECT-BEST 00 -1 -1 CLCOS BETTER-CAST 00 02 -1 CATCH-CHECK CLASS-COPY COST-DAMAGE 44 Exemplo Novo bloco: DELETE-DISE CAT 00 -1 -1 ALWASPBET 00 03 06 ACCESS-ALSO ALWAYS-ASK ASPECT-BEST ... CLCOSDE BETTER-CAST CATCH-CHECK 00 02 05 ... CLASS-COPY COST-DAMAGE DELETE-DISE 45 Exemplo Novo bloco: DRUM-EDITOR CATDR ALWASPBET 00 03 06 ACCESS-ALSO ALWAYS-ASK 00 03 -1 CLCOSDE ASPECT-BEST ... CATCH-CHECK ... 00 02 05 BETTER-CAST CLASS-COPY DRUM-EDITOR -1 -1 -1 ... COST-DAMAGE DELETE-DISE ... 46 Exemplo Novo bloco: EFFORT-GROW CATDR ALWASPBET 00 03 06 ACCESS-ALSO ALWAYS-ASK 00 03 -1 CLCOSDE ASPECT-BEST ... CATCH-CHECK ... 00 02 05 BETTER-CAST CLASS-COPY DRUM-EDITOR EF 00 -1 -1 ... COST-DAMAGE EFFORT-GROW DELETE-DISE ... 47 Exemplo Novo bloco: HEAD-IDEAL CATDR ALWASPBET 00 03 06 ACCESS-ALSO ALWAYS-ASK 00 03 -1 CLCOSDE ASPECT-BEST ... CATCH-CHECK ... 00 02 05 BETTER-CAST CLASS-COPY DRUM-EDITOR EFH 00 02 -1 ... COST-DAMAGE EFFORT-GROW DELETE-DISE HEAD-IDEAL ... 48 Exemplo Novo bloco: IGNORE-ITEM CATDR ALWASPBET 00 03 06 ACCESS-ALSO ALWAYS-ASK 00 03 -1 CLCOSDE ASPECT-BEST ... CATCH-CHECK ... 00 02 05 BETTER-CAST CLASS-COPY DRUM-EDITOR EFHIG 00 02 03 ... COST-DAMAGE EFFORT-GROW DELETE-DISE HEAD-IDEAL ... IGNORE-ITEM 49 Separadores Completos ALWAYSASPECTBETTER ACCESS-ALSO 00 06 12 ALWAYS-ASK ASPECT-BEST BETTER-CAST 50 Referência • Michael Folk, Bill Zoellick. File Structures 2nd ed., Addison-Wesley, 1992.