Você está na página 1de 20

Cap.

3
Organização de Ficheiros
e Indexação
“If you don’t find it in the index, look very carefully
through the entire catalogue.”
-- Sears, Roebuck, and Co.,
Consumer’s Guide , 1897

Abel J.P. Gomes

Bibliografia:
1. R. Ramakrishnan and J. Gehrke. “Database Management Systems”. Addison-Wesley,
2003 (cap.8).

1
1. Objectivos

 Como é que um DBMS armazena e acede aos dados


em disco?
 Porque é que o custo temporal I/O é tão importante
nas operações de bases de dados?
 Como é que um DBMS organiza os ficheiros de registos
de dados em disco para minimizar os custos de I/O?
 O que é um índice, e porque é que é usado?
 Qual é a relação entre um ficheiro de registos de
dados e um índice que sobre ele é definido?
 Quais são as propriedades importantes dos índices?
 Como é que um índice baseado em hashing funciona, e
em que circunstâncias é mais eficaz?
 Como é que um índice estruturado em árvore
funciona, e em que circunstâncias é mais eficaz?
 Como é que se pode usar índices para optimizar o
desempenho para uma dada carga de trabalho? 2
2. Contexto

 A abstracção básica dos


dados num DBMS é a de
uma colecção de registos Optimização e Execução
ou um ficheiro; cada de Inquirições
ficheiro consiste numa ou
mais páginas. Operadores Relacionais
 A camada FMA organiza os
dados cuidadosamente Fich. e Métodos de Acesso
para suportar acesso
rápido a subconjuntos de Gestão de Buffers
registos que são alvo de
operações específicas. Gestão de Espaço em Disco
 Compreender como os
registos estão organizados
em ficheiro é essencial
para compreender o
funcionamento dum
sistema de bases de DB
dados. 3
3. Alternativas na Organização de Ficheiros

 Existem muitas alternativas, cada uma das quais


adequada a situações específicas, mas não a outras:

 Heap files (unsorted files): adequados quando o acesso


varre o ficheiro de alto a baixo para devolver todos os
registos (records) nele existentes.

 Ficheiros Ordenados (sorted files): mais adequados


quando se pretende devolver os registos pela ordem
estabelecida pela search key, ou quando somente uma
gama de registos é necessária.

 Clustered Files (with Indexes): em breve…

4
4. Análise e Modelo de Custos

 Para tornar a análise mais simples, vamos ignorar os custos


de tempo gasto na CPU:

 B: número de blocos de dados (data blocks)

 R: número de registos por bloco

 D: Tempo (médio) para ler ou escrever um bloco de/no disco

 A medição do número de I/O’s de blocos ignora os ganhos de


pré-localização e acesso sequencial; portanto, mesmo o custo
I/O é só grosseiramente aproximado.

 Análise do caso médio; é baseada em várias assumpções


simplistas.

 Modelo suficientemente bom para mostrar as tendências no seu todo!


5
4.1 Algumas assumpções feitas na análise

 Simples inserção e eliminação de registos.

 Selecção baseada na igualdade - exactamente um


one match (what if more or less???).

 Heap Files:
 A inserção é sempre feita no fim do ficheiro.

 Ficheiros Ordenados:
 Ficheiros compactados após eliminações de registos.
 Selecções baseadas na chave de pesquisa (search key).

6
B: número de páginas de dados (data pages)
R: número de registos por página
D: tempo (médio) para ler/escrever uma página no disco

4.2 Custo de operações

Heap File Ficheiro Ordenado Clustered File

Escrutínio B×D B×D


(scan) de
todos os
registos
Pesquisa 0.5 B×D (log2 B) × D
baseada na
igualdade
Pesquisa B×D [(log2 B) +
baseada na #match pages] × D
gama
Inserção 2D ((log2B)+B) × D

Eliminação 0.5B×D + D ((log2B)+B) × D


(porque R,W 0.5)
7
5. Índices

 Às vezes, queremos devolver registos através da


especificação de valores num ou mais campos; por exemplo,
 Encontrar todos os estudantes do Dept. de Informática.
 Encontrar todos os estudantes com uma classificação superior a
3 (gpa > 3), assumindo a escala de 0 a 5.

 Um índice sobre um ficheiro é uma estrutura de dados


baseada no disco que torna mais rápidas as selecções feitas
a partir de campos-chave de pesquisa (the search key
fields).
 Qualquer subconjunto de campos duma relação pode ser a
chave de pesquisa (search key) do índice.
 Não se deve confundir uma chave de pesquisa (search key) com
uma chave (key), pois não tem que ser única.

 Um índice contém uma colecção de verbetes ou entradas de


dados (data entries), e suporta a devolução eficiente de
todos os registos com base num valor k da chave de
pesquisa. 8
6. Primeira Questão acerca de Índices

 Que tipos de selecções suportam?


 Selecções da forma campo <op> constante
 Selecções basedas na igualdade (op é =)
 Selecções basedas na gama de valores (op é dos
seguintes operadores: <, >, <=, >=, BETWEEN)
 Selecções mais exóticas:
 Gamas 2-dimensionais (“este de Berkeley e oeste de
Truckee e North of Fresno e South of Eureka”)
 ou n-dimensional
 Distâncias 2-dimensionais (“no raio de 2 milhas da Covilhã”)
 ou n-dimensional
 Inquirições baseadas em “ranking” (“10 restaurantes mais
próximos de Berkeley”)
 Satisfação de expressões regulares, satisfação de cadeias
genómicas, etc.
 Um índice n-dimensional comum: R-tree
 Suportado por Oracle e Informix
 Veja-se http://gist.cs.berkeley.edu para mais detalhes sobre
9
este tópico
7. Disrupção dum Índice
(Index Breakdown)

 Um índice suporta que selecções?

 Representação de verbetes de dados (data entries)


no índice
 i.e., que tipo de informação é que o índice realmente
guarda?
 há 3 alternativas

 Índices de Chave Simples vs. Índices de Chave


Composta

 Índices baseados em árvore, índices baseados em


hashing, outros

 Índices Aglomerados e Não-Aglomerados (Clustered


10
vs. Unclustered Indexes)
8. Alternativas para Verbete de Dados (Data
Entry) k* no Índice

 Três alternativas:
• registo de dados real (chave com valor k)
• <k, rid do registo de dados que contém k>
• <k, lista de rids dos registos de dados que contêm k >

 A escolha é ortogonal à técnica de indexação.


 Exemplos of técnicas de indexação: árvores B+,
estruturas baseadas em hashing, árvores R, …
 Tipicamente, o índice contém informação auxiliar que
direcciona a procura para os verbetes de dados
desejados.

 Podemos ter vários (e diferentes) índices por cada


ficheiro de dados da BD.
 por exemplo, ficheiro ordenado por idade, com um índice
hash sobre o salário e um índice em árvore B+ sobre 11
o
nome.
8.1 Alternativa 1:
Registo de dados real (chave com valor k)

 Com esta alternativa, a estrutura do índice é a de um


ficheiro organizado em registos de dados (à
semelhança dos ficheiros ordenados ou heap files).

 No máximo, só um índice sobre uma dada colecção


de registos de dados pode usar a Alternativa 1.

 Esta alternativa poupa na procura de ponteiros, mas


pode ser dispendiosa de manter face às inserções e
eliminações de registos.

12
8.2 Alternativas 2 e 3:
<k, rid do registo de dados que contém k>
<k, lista de rids dos registos que contêm k>

 Mais fácil de manter do que a Alternativa 1.

 Se mais do que um índice é necessário para um


dado ficheiro de dados, no máximo só um índice
pode usar a Alternativa 1; os restantes têm de usar
obrigatoriamente a Alternativa 2 ou 3.

 Alternativa 3 é mais compacta que Alternativa 2,


mas conduz a verbetes de dados de tamanho
variável mesmo se as chaves de procura são de
tamanho fixo.

 Pior ainda, para listas grandes de rids, os verbetes


podem abranger vários blocos!

13
9. Classificação de Índices

 Clustered vs. unclustered: Se a ordem dos registos


de dados é a mesma que, ou é ‘próxima de’, a
ordem dos verbetes de dados do índice, então
temos um clustered index.

 Um ficheiro pode ser clustered para uma (no máximo)


chave de pesquisa.

 O custo de devolver registos de dados através um


índice varia bastante, dependendo de se o índice é
clustered ou não!

 A Alternativa 1 implica ter um índice clustered, mas o


contrário não é verdade.

14
9.1 Índices Clustered vs. Unclustered

 Suponha que a Alternativa (2) é usada para verbetes de


dados, e que os registos de dados são armazenados num
heap file.
 Para construir um índice clustered, ordena-se em primeiro lugar
o heap file (com algum espaço livre em cada bloco para
eventuais inserções futuras de dados).
 Blocos em overflow podem ser necessários para operações de
inserção. (Daí, a ordem de registos de dados ser ‘próxima’, mas
não idêntica, à ordem de ordenação do heap file.)
Index entries
CLUSTERED direct search for UNCLUSTERED
data entries

Data entries Data entries


(Index File)
(Data file)

Data Records Data Records 15


9.2 Índices Clustered vs. Unclustered (cont.)

 Quais são as vantagens/desvantagens?

 Os prós dos índices clustered


 Eficientes para pesquisas baseadas em gamas de valores
(range searches)
 Podem facilitar alguns tipos de compressão de dados
 Possíveis benefícios resultantes da localidade dos dados
(dados relacionados?)
 ???

 Os contras dos índices clustered


 Custosos de manter (face a actualização de dados e
avessos à reorganização)

16
B: The number of data pages
R: Number of records per page
9.3 Custo de operações D: (Average) time to read or write disk page

Heap File Sorted File Clustered File

Scan all BD BD 1.5 BD


records

Equality 0.5 BD (log2 B) * D (logF 1.5B) * D


Search

Range BD [(log2 B) + [(logF 1.5B)+


Search #match pg]*D #match pg]*D

Insert 2D ((log2B)+B)D ((logF 1.5B)+1)*


D
Delete 0.5BD + D ((log2B)+B)D ((logF 1.5B)+1)*
(because R,W 0.5) D

17
10. Chaves de Pesquisa Compostas
Exemplos de índices de chave
 Pesquisa sobre uma composta usando ordem lexicográfica
combinação de campos.
 Inquirição de igualdade:
Todo o valor dum campo é 11,80 11
igual a um valor constante;
e.g.: 12,10 12
wrt <age,sal> index: 12,20 name age sal 12
 age=20 e sal =75 13,75 bob 12 10 13
 Inquirição de gama: algum
valor dum campo não é <age, sal> cal 11 80 <age>
constante; e.g.: joe 12 20
 age > 20; ou age=20 10,12 sue 13 75
e sal > 10 10
 Verbetes de dados no índice 20,12 Data records 20
ordenados por chave de 75,13 sorted by name 75
pesquisa para suportar 80,11 80
inquirições de gama.
<sal, age> <sal>
 Ordem lexicográfica.
 Como o dicionário, mas Data entries in index Data entries
sobre campos, não sobre sorted by <sal,age> sorted by <sal>
letras!
18
Sumário
 A camada de ficheiros gere o acesso a registos em páginas.
 Os formatos de registos e de páginas dependem do
comprimento ser fixo ou variável.
 A gestão do espaço livre é uma questão importante.
 O formato de página entalhada (slotted page format) suporta
registos de comprimento variável e permite que os registos se
movam dentro de cada página.
 Existem muitas formas de organizar a estrutura dum
ficheiro, sendo cada uma apropriada para certos casos.
 Se as inquirições de selecção são frequentes, ordena-se o
ficheiro ou constrói-se um índice.
 Índices em hashing só são bons para pesquisa de igualdade.
 Ficheiros ordenados (sorted files) e índices estruturados em
árvore (tree-based indexes) adequam-se melhor a pesquisas de
gama; também são bons para pesquisas de igualdade de
valores. (Ficheiros raramente se mantêm ordenados na prática;
o índice estruturado em árvore B+ é melhor.)
 Um índice é uma colecção de verbetes de dados mais uma
forma de encontrar rapidamente verbetes com valores 19
específicos de chave.
FIM DE CAPÍTULO

Sumário (cont.)

 Um índice é uma colecção de verbetes de dados mais uma


forma de encontrar rapidamente verbetes com valores
específicos de chave.
 Verbetes de dados no índice podem ser registos de dados
reais, pares <key, rid>, ou pares <key, rid-list>.
 A escolha é ortogonal à estrutura de indexação (i.e., tree, hash,
etc.).
 Normalmente, temos vários índices sobre um dado ficheiro
de registos de dados, cada um com uma chave de pesquisa
diferente.
 Os índices podem ser classificados como clustered vs.
unclustered
 As diferenças entre eles têm consequências importantes na
utilidade/desempenho.
 As relações no catálogo armazenam informação acerca de
relações, índices e vistas.

20

Você também pode gostar