Estruturas de Armazenamento e Indexação - DECOM-UFOP

Propaganda
Estruturas de
Armazenamento e
Indexação
Rafael Lage Moreira Barbosa
10.1.4217
Estruturas de
Armazenamento
•
Banco de Dados são armazenados fisicamente
como arquivos de registro, que em geral ficam em
discos magnéticos;
•
O software do SGBD pode recuperar, atualizar e
processar esses dados conforme uma
necessidade.
•
A mídia de armazenamento do computador forma
uma hierarquia de armazenamento que inclui duas
categorias principais:
•
Armazenamento primario;
•
Armazenamento secundario e terciario.
Armazenamento Primário
•
Memória Principal;
•
Caches menores;
•
Oferece acesso rápido;
•
Capacidade limitada;
Armazenamento secundário
e terciario
•
Disco magnéticos, discos ópticos, flash drives e
fitas;
•
Secundária: Discos rígidos;
•
Terciária: Mídia removível;
•
Não podem ser processadas diretamente pela
CPU.
Armazenamento de banco
de dados
•
Bancos de dados costumam armazenar grande
quantidade de dados que precisam persistir por longos
períodos de tempos, portanto, eles costumam ser
considerados dados persistentes;
•
A maioria dos bancos de dados são armazenados no
armazenamento secundário pelo seguintes motivos:
•
Muito grandes para caber na memória principal;
•
Circunstâncias que causam perda de dados ocorrem
com menos frequência, armazenamento não-volátil;
•
As aplicações de bancos de dados típicas só
precisam de uma pequena parte do banco de
dados de cada vez para processamento.
•
Sempre que certa parte de dados é necessária,
ela precisa ser localizada no disco, copiada para a
memória principal para processamento e, depois,
reescrita para o disco se os dados forem alterados;
•
Os dados armazenados no disco são organizados
como arquivos de registro. Cada registro é uma
coleção de valores de dados;
•
Os registros devem ser armazenados em disco de
uma maneira que torne possível localizá-los de
modo eficiente quando necessário;
•
Existem vária organizações de arquivo primário,
que determinam como os registro de arquivo são
colocados fisicamente no disco, e daí os registros
podem ser acessados;
Buffering de blocos
•
Quando vários blocos precisam ser transferidos do
disco para a memória principal e todos os
endereços de bloco são conhecidos, vários buffers
podem ser reservados na memória principal para
agilizar a transferência.
•
Enquanto um buffer está sendo lido ou gravado, a
CPU pode processar dados em outro buffer.
Processamento Intervalado e Paralelo
Registros e tipos de registro
•
Os dados costumam ser armazenados na forma
de registro;
•
Cada registro contém uma coleção de valores ou
items
Arquivos de registro
desordenados(arquivos de heap)
•
Registros são arquivados na ordem em que são
inseridos, novos registros são inseridos ao final do
arquivos;
•
Inserção é muito eficiente, copia-se o ultimo bloco
para o buffer, acrescenta-se o novo registro e
então o bloco e regravado de volta no disco;
•
Para excluir o programa deve encontrar o bloco,
copiar para um buffer, excluir o registro de volta no
disco. (Deixa espaço livre no bloco de disco)
Arquivos de registro
ordenados(arquivos classificados)
•
Registro ordenados fisicamente no arquivo com
base nos valores de um de seus campos;
•
A leitura de registros na ordem dos valores da
chave de ordenação é extremamente eficiente;
•
Encontrar o próximo registro com base no atual
não requer acesso de blocos adicionais;
•
Acesso mais rápido quando a técnica de pesquisa
binária é usada.
Técnicas de Hashing
•
Oferece acesso muita rápido aos registros;
•
A partir de uma chave hash, encontramos o
registro através de uma função de hash;
Hashing externo para
arquivos de disco
•
Chamado de hashing externo;
•
O espaço de endereços de destino é feito em buckets;
•
Um bucket é um bloco de disco com um cluter de
blocos de disco contíguos.
•
A função hashing mapeia uma chave em um númeto de
bucket relativo;
•
Uma tabela mantida no cabeçalho do arquivo converte
o número de bucket para o endereço de bloco de disco.
Técnicas de hashing que permitem
a expansão dinâmico do arquivo
•
Hashing extensível: um tipo de diretório mantido, o
valor de hash é utilizado como índice para um
array;
•
Hashing dinâmico: mantêm um diretório estrurado
em árvore;
•
Hashing linear: permite que um arquivo de hash
expanda e encolha seu número de buckets
dinamicamente sem precisar de um diretório.
Hashing extensível
Hashing dinâmico
Estruturas de indexação
•
Estruturas de acesso auxiliares, chamadas de
índices, par agilizar recuperação de registro;
•
São arquivos adicionais no disco que oferecem
caminhos de acesso secundários, os quais
oferecem formas alternativas de acessar os
registros sem afetar seu posicionamento físico no
arquivo de dados primário do disco;
•
Elas permitem acesso eficiente aos registros com
base nos campos de indexação;
Tipos de índices
•
Índices ordenados de único nível(baseados em
arquivos ordenados);
•
Índice multi-nível(estruturas de dados em árvore,
árvore=B);
•
Hashing;
•
Índices bitmap(vetores de bits).
Tipos de índices ordenados
de único nível
•
Ideia: semelhante à que está por trás do índice
usado em um livro;
•
Podemos pesquisar o índice do livro em busca de
certo termo em seu interior e encontrar um lista de
endereços - números de página, nesse caso - e
usar esses endereços para localizar páginas
especificadas primeiro e depois procurar o termo
em cada página;
•
Existem vários tipos.
Índices primários
•
Arquivo ordenado;
•
Dois campos: chave primária, ponteiro para o
bloco de disco;
•
O Arquivo de índice para um índice primário ocupa
um espaço muito menor do que o arquivo.
Índice primário
Indicie primário no campo de chave de
ordenação
Índices de agrupamento
•
Se os registros de arquivo forem fisicamente
ordenados em um campo não chave - que não tem
um valor distinto para cada registro -, esse campo
é chamado de campo de agrupamento;
•
Utilizado para agilizar a recuperação de todos os
registros que têm o mesmo valor para o campo de
agrupamento
Índice de agrupamento no campo não
chave de ordenação
Índice secundário
•
Meio secundário para acessar um arquivo de
dados par o qual já exista algum acesso primário;
•
Dois campos: campo de índice, ponteiro de bloco;
Índice de agrupamento com um cluster de bloco
separada para cada grupo de registros do mesmo
valor
Índices multi-níveis
•
No minimo níveis de índice;
•
A ideia é reduzir a parte do índice;
•
Logo, o espaço de pesquisa reduzido mais
rapidamente
Índice primário de dois níveis
Índices multi-níveis dinâmicos
usando B-trees e B*-trees
Árvores de pesquisa
•
Índices multi-níveis podem ser imaginas como uma
variação de árvore de pesquisa;
•
Cada nó no índice multi-nível pode ter inúmeros ponteiros
e valores de chave;
•
Os valores de índice e cada nó nos guiam para o próximo
nó, até que alcancemos o bloco do arquivo de dados;
•
Ao seguir um ponteiro, restringimos a pesquisa em cada
nível a uma sub-árvore da árvore de pesquisa e
ignoramos todos os nós fora dessa sub-árvore
Um nó em um árvore de pesquisa com
ponteiro para sub-árvores abaixo dela
Árvore de pesquisa
•
Necessários algoritmos para inserir e excluir
valores;
•
Em geral, não garantem que seja balanceada.
•
Aumenta profundidade da árvore e torna a
velocidade de pesquisa heterogênea;
B-tree
•
Cada valor do campo aparece uma vez em algum nível na
árvore, junto com o ponteiro de dados;
•
Ponteiros são apenas armazenados nos nós folha da
árvore;
•
Nós folha têm um ponteiro de dados para o registro(ou
bloco de registro), se o campo de pesquisa for um campo
de chave;
•
Para um campo de pesquisa não chave, o ponteiro aponta
para um bloco que cont´m ponteiros para os registro de
aqruivo;
•
Nós folha normalmente são ligados para oferecer
acesso ordenado no campo de pesquisa;
•
Nós folha são semelhantes ao primeiro nível de um
índice, nós internos a um índice multi-nível;
•
Cada nó interno tem a forma: <P1,K1,P2,K2,…>
•
•
Pn é ponteiro de árvore;
Cada nó folha tem a forma: <<K1,Pr1>,<K2,Pr2>,
…,Pproximo>
•
Prn é ponteiro de dados;
B*-tree
•
A maioria das implementações de índice multi-nível
dinâmico utilizam;
•
Ponteiros de dados são armazenados apenas nos
nós folhas da árvore
Exemplo:
pesquisa
Índices e múltiplas chaves
•
Quando vários atributos são envolvidos;
•
Exemplo: Funcionário cujo departamento = 4 e
idade = 59;
•
Se cada conjunto que atendem a cada condição
for grande, técnicas comuns não serão eficientes.
Hashing particionado
•
Extensão do hashing externo estático, que permite acesso a
múltiplas chaves;
•
Adequado apenas para comparações de igualdade;
•
Pode ser facilmente estendido par n número de atributos;
•
<Dnr, Idade>
•
Endereço de Hash de Dnr = ‘100’;
•
Endereço de Hash de Idade = ‘10101’;
•
Para procurarmos vamos ao endereco 100 10101.
Arquivos de grades
Índice de hash
•
O índice é uma estrutura secundária para acessar
o arquivo usando hashing em uma chave de
pesquisa;
•
<K, Pr> : Pr é um ponteiro de registro que contem
a chave;
•
<K, P> : P é um ponteiro para o bloco de registro
índices bitmap
•
Usada para relações que contêm grande número de
linhas;
•
Cria um índice para uma ou mais colunas, e cada
valor ou intervalo de valores nessas colunas é
indexado;
•
Converte o valor em um vetor de bits;
•
Para encontrar utiliza interseção dos bitmaps;
Indexação baseada em
função
•
Criar um índice tal que o valor que resulta da
aplicação de alguma função em um campo ou
uma coleção de campos torna-se a chave para o
índice;
Download