métodos de acesso indices estruturados por b-tree
TRANSCRIPT
![Page 1: Métodos de Acesso Indices estruturados por B-TREE](https://reader035.vdocuments.net/reader035/viewer/2022081421/552fc105497959413d8c0446/html5/thumbnails/1.jpg)
Métodos de Acesso
Indices estruturados por B-TREE
![Page 2: Métodos de Acesso Indices estruturados por B-TREE](https://reader035.vdocuments.net/reader035/viewer/2022081421/552fc105497959413d8c0446/html5/thumbnails/2.jpg)
Plano Geral Método de Acesso Indexado Sequencial (ISAM)
Busca Inserção Supressão
B-Tree: uma estrutura dinâmica Busca Inserção Supressão
![Page 3: Métodos de Acesso Indices estruturados por B-TREE](https://reader035.vdocuments.net/reader035/viewer/2022081421/552fc105497959413d8c0446/html5/thumbnails/3.jpg)
Dados e Indices Dados armazenados em arquivo de dados
<a1,a2, … , k,…, an> página i, slot j
Arquivos de indice estruturados em árvore Folhas : < k, (i,j) > Nós intermediários : <chave, pagId>
Objetivo : melhorar a busca de registros
![Page 4: Métodos de Acesso Indices estruturados por B-TREE](https://reader035.vdocuments.net/reader035/viewer/2022081421/552fc105497959413d8c0446/html5/thumbnails/4.jpg)
Dados e Indices Inserção e supressões são feitas no arquivo de dados A cada inserção ou supressão de um registro de
dados, a estrutura do arquivo de indices deve ser ajustada.
O ajuste implica em inserção ou supressão de entradas no arquivo de indice.
Como gerenciar inserções e supressões num arquivo de indice de modo a manter sua estrutura ?
![Page 5: Métodos de Acesso Indices estruturados por B-TREE](https://reader035.vdocuments.net/reader035/viewer/2022081421/552fc105497959413d8c0446/html5/thumbnails/5.jpg)
ISAM - Motivação Quais os empregados com salário > 2000 ? Busca binária no arquivo de indice até
encontrar o primeiro salário > 2000 Escaneia o arquivo de índice a partir deste
ponto e lê os registros correspondentes. Se o arquivo de indice é muito grande : busca
binária pode ser dispendiosa.
![Page 6: Métodos de Acesso Indices estruturados por B-TREE](https://reader035.vdocuments.net/reader035/viewer/2022081421/552fc105497959413d8c0446/html5/thumbnails/6.jpg)
Idéia Criar um segundo arquivo com um registro
para cada página do arquivo de indice original <primeira chave da página, ponteiro da página> Ordenado por chave
2* 5* 7* 12* 14* 17* 19* 22*
14
![Page 7: Métodos de Acesso Indices estruturados por B-TREE](https://reader035.vdocuments.net/reader035/viewer/2022081421/552fc105497959413d8c0446/html5/thumbnails/7.jpg)
Idéia (continuação)Segundo arquivo menor que arquivo original
Busca binária no segundo arquivo mais rápida
Se segundo arquivo não cabe numa página
Repetir o processo : cria-se um terceiro arquivo com um registro para cada página do segundo arquivo… Raiz cabe numa página
![Page 8: Métodos de Acesso Indices estruturados por B-TREE](https://reader035.vdocuments.net/reader035/viewer/2022081421/552fc105497959413d8c0446/html5/thumbnails/8.jpg)
Esquema Geral do Método ISAM
Páginasdos arquivosde indices(a partir da 2a camada)
Páginas de overflow
Páginas primárias –as entradas do arquivo de índice da primeira camada
![Page 9: Métodos de Acesso Indices estruturados por B-TREE](https://reader035.vdocuments.net/reader035/viewer/2022081421/552fc105497959413d8c0446/html5/thumbnails/9.jpg)
Alocação de Páginas em ISAM Páginas primárias e de overflow : contém as entradas
primárias k* ISAM é uma estrutura estática
Na criação do arquivo Páginas primárias são alocadas Páginas de índice são alocadas 20% de cada página é livre para posteriores inserções
Manutenção : Páginas de overflow são alocadas à medida que as páginas de
dados são preenchidas em decorrência de inserções.
![Page 10: Métodos de Acesso Indices estruturados por B-TREE](https://reader035.vdocuments.net/reader035/viewer/2022081421/552fc105497959413d8c0446/html5/thumbnails/10.jpg)
Busca de um registro de dados
40
Raiz
5120
10* 15* 20* 27* 33* 37* 46*40* 51* 55* 63* 97*
3363
Procura 27*
![Page 11: Métodos de Acesso Indices estruturados por B-TREE](https://reader035.vdocuments.net/reader035/viewer/2022081421/552fc105497959413d8c0446/html5/thumbnails/11.jpg)
Inserção de um registro
40Raiz
5120
10* 15* 20* 27* 33* 37* 46*40* 51* 55* 63* 97*
3363
Inserção de 23*, 48*, 41*, 42*
23*
Página de Overflow
48* 41*
42*
![Page 12: Métodos de Acesso Indices estruturados por B-TREE](https://reader035.vdocuments.net/reader035/viewer/2022081421/552fc105497959413d8c0446/html5/thumbnails/12.jpg)
Supressão de um registro
40Raiz
5120
10* 15* 20* 27* 33* 37* 46*40* 51* 55* 63* 97*
3363
Supressão de 42*, 51*, 97*
23*
Pagina de Overflow
48* 41*
42*
Procura 51*
Nunca sãoalteradas !!
![Page 13: Métodos de Acesso Indices estruturados por B-TREE](https://reader035.vdocuments.net/reader035/viewer/2022081421/552fc105497959413d8c0446/html5/thumbnails/13.jpg)
Comparação de Custos Número de I/O = número de níveis da árvore
Capacidade do nó = F Total de páginas primárias = N Número de níveis = logF N
Custo Arquivo de 1 000 000 registros 10 registros por página de dados : total de páginas = 100 000 100 entradas em cada página de índice
Scan = 1000 000/10 = 100000 I/0 Busca binária = log2 100000 = 17 I/0 ISAM = log100 100000 = entre 2 e 3 I/0, pois
1002 < 100000 < 1003
![Page 14: Métodos de Acesso Indices estruturados por B-TREE](https://reader035.vdocuments.net/reader035/viewer/2022081421/552fc105497959413d8c0446/html5/thumbnails/14.jpg)
Vantagens de ISAM ISAM é estático : inserções e supressões
afetam somente as folhas. Em alguns casos, ISAM é preferível a B-
Trees
![Page 15: Métodos de Acesso Indices estruturados por B-TREE](https://reader035.vdocuments.net/reader035/viewer/2022081421/552fc105497959413d8c0446/html5/thumbnails/15.jpg)
Desvantagens de ISAM Possibilidade de cadeias de páginas overflow Páginas overflow geralmente não são
ordenadas, a fim de agilizar inserções. Para aliviar este problema :
Árvore é criada com 20% de cada folha livre Entretanto, uma vez preenchido este espaço,
cadeias de overflow só podem ser eliminadas através de uma total reorganização da estrutura.
![Page 16: Métodos de Acesso Indices estruturados por B-TREE](https://reader035.vdocuments.net/reader035/viewer/2022081421/552fc105497959413d8c0446/html5/thumbnails/16.jpg)
B-Trees : Método de Acesso Dinâmico Operações de inserção e supressão são balanceadas de modo
a que cada nó tenha uma ocupação minima e máxima. Uma ocupação mínima de 50% é garantida em cada nó
(exceto a raiz) Procura por um registro requer somente uma busca em
profundidade da raiz até uma folha apropriada. Arvore é balanceada
Todos os caminhos da raiz até a folha têm o mesmo comprimento. Cada nó intermediário contém m entradas, onde d ≤ m ≤ 2d, d = ordem da B-tree
Páginas das folhas são ligadas em sequência através de ponteiros – podem ser percorridas em sequência nas duas direções.
![Page 17: Métodos de Acesso Indices estruturados por B-TREE](https://reader035.vdocuments.net/reader035/viewer/2022081421/552fc105497959413d8c0446/html5/thumbnails/17.jpg)
Busca
13 17 24 30
Ordem = 2 : cada nó contém K entradas, 2 K 4Chave contém chave candidata (não há duplicatas)
2* 3* 7*5* 14*16* 19*20* 22* 24*27*29* 33*34* 39*38*
15 ?5 ?
![Page 18: Métodos de Acesso Indices estruturados por B-TREE](https://reader035.vdocuments.net/reader035/viewer/2022081421/552fc105497959413d8c0446/html5/thumbnails/18.jpg)
Inserção
13 17 24 30
2* 3* 7*5* 14*16* 19*20* 22* 24*27*29* 33*34* 39*38*
Inserindo 8*
Cheia !
7* 8*55*
Cheia !
![Page 19: Métodos de Acesso Indices estruturados por B-TREE](https://reader035.vdocuments.net/reader035/viewer/2022081421/552fc105497959413d8c0446/html5/thumbnails/19.jpg)
Inserção Variante 1 : Se nó está cheio divida e ajuste os nós
ancestrais. Variante 2 : Testa primeiro se pode redistrisbuir
num nó vizinho. Em caso negativo, divide. Ideal
Não redistribuir nós intermediários – sempre dividir o nó.
Se uma folha está cheia, procure um vizinho. Se tiver espaço, redistribua. Caso contrário, divida a folha cheia.
![Page 20: Métodos de Acesso Indices estruturados por B-TREE](https://reader035.vdocuments.net/reader035/viewer/2022081421/552fc105497959413d8c0446/html5/thumbnails/20.jpg)
Inserção - Variante 1
13 17 24 30
2* 3* 7*5* 14*16* 19*20* 22* 24*27*29* 33*34* 39*38*
Inserindo 8*
Cheia !
7* 8*55*
Cheia !
![Page 21: Métodos de Acesso Indices estruturados por B-TREE](https://reader035.vdocuments.net/reader035/viewer/2022081421/552fc105497959413d8c0446/html5/thumbnails/21.jpg)
Inserção : Variante 1
13 17 24 30
2* 3* 14*16* 19*20* 22* 24*27*29* 33*34* 39*38*
Inserindo 8*
7* 8*5*
55 13 24 30
17
![Page 22: Métodos de Acesso Indices estruturados por B-TREE](https://reader035.vdocuments.net/reader035/viewer/2022081421/552fc105497959413d8c0446/html5/thumbnails/22.jpg)
Inserção : Variante 2
13 17 24 30
7*5* 14*16* 19*20* 22* 24*27*29* 33*34* 39*38*
Inserindo 8*
8*
8* 14* 16*2* 3*
8*
![Page 23: Métodos de Acesso Indices estruturados por B-TREE](https://reader035.vdocuments.net/reader035/viewer/2022081421/552fc105497959413d8c0446/html5/thumbnails/23.jpg)
Resumo: Metodologia de Inserção1. Busca a página onde deve ser inserida a entrada.2. Caso a página suporte a inserção (sem ultrapassar o max)
Insere a tupla no final da página e pára.
3. Caso a página P não suporte a inserção 3.1 Verifica se um dos vizinhos suporta a inserção3.2 Caso positivo
Vizinho à direita VD: a entrada é inserida na 1a posição de VD: o elemento da camada imediatamente superior que tem um ponteiro à direita apontando para VD é substituido pela chave da entrada inserida.
Vizinho à esquerda VE Insere-se a nova entrada na posição adequada em P, obtendo-se P’
(P’ tem d+1 elementos agora) primeira chave X da página P’ passa para a última posição de VE, o elemento da camada imediatamente superior que tem um ponteiro
apontando à esquerda para VE é substituido pela chave X.
![Page 24: Métodos de Acesso Indices estruturados por B-TREE](https://reader035.vdocuments.net/reader035/viewer/2022081421/552fc105497959413d8c0446/html5/thumbnails/24.jpg)
Resumo: Metodologia de Inserção3.2 Caso negativo: número de elementos de P = d Considera-se a página P’ = P + nova entrada X Quebra-se a P’ em duas páginas P1, P2 de tamanho d. Considera-se o
elemento X do meio das duas páginas. Insere-se o elemento X na camada imediatamente acima, à esquerda do
ponteiro que apontava para P. Ajusta-se os ponteiros desta camada: o da esquerda de X aponta para P1,
o da direita de X aponta para P2. O restante permanece como estava. Caso após a inserção de X na camada acima, a página fique cheia, repete-
se o mesmo processo (testa se é possível distribuir entre os vizinhos e em caso negativo, quebra-se a página e modifica-se a camada imediatamente acima).
![Page 25: Métodos de Acesso Indices estruturados por B-TREE](https://reader035.vdocuments.net/reader035/viewer/2022081421/552fc105497959413d8c0446/html5/thumbnails/25.jpg)
Supressão Se ocupação não fica abaixo do mínimo,
suprime, não altera ponteiros, nem nós ancestrais
Se ocupação fica abaixo do mínimo Tenta redistribuição com nó vizinho, se possível Caso contrário junta com vizinho
![Page 26: Métodos de Acesso Indices estruturados por B-TREE](https://reader035.vdocuments.net/reader035/viewer/2022081421/552fc105497959413d8c0446/html5/thumbnails/26.jpg)
Nem junta nem redistribui
2* 3* 14*16* 19* 20*22* 24* 27* 29* 33*34* 39*38*
Suprimindo 19*
7* 8*5*
5 13 24 30
17
![Page 27: Métodos de Acesso Indices estruturados por B-TREE](https://reader035.vdocuments.net/reader035/viewer/2022081421/552fc105497959413d8c0446/html5/thumbnails/27.jpg)
Redistribuição nas folhas
2* 3* 14* 16* 20*22* 24* 27* 29* 33*34* 39*38*
Suprimindo 20*
7* 8*5*
5 13 24 30
17
24*
27
22* 27*29*
![Page 28: Métodos de Acesso Indices estruturados por B-TREE](https://reader035.vdocuments.net/reader035/viewer/2022081421/552fc105497959413d8c0446/html5/thumbnails/28.jpg)
Juntando folhas
2* 3* 14* 16* 22* 33*34* 39*38*
Suprimindo 24*
7* 8*5*
5 13 30
17
24*
27
27*29*22* 27* 29*
30
Quase vazia !
![Page 29: Métodos de Acesso Indices estruturados por B-TREE](https://reader035.vdocuments.net/reader035/viewer/2022081421/552fc105497959413d8c0446/html5/thumbnails/29.jpg)
Junção de dois nós intermediários
2* 3* 14* 16* 33*34* 39*38*7* 8*5*
5 13 30
17
24*
27
27*22* 27* 29*
305 13 30
São necessários 5 ponteiros
![Page 30: Métodos de Acesso Indices estruturados por B-TREE](https://reader035.vdocuments.net/reader035/viewer/2022081421/552fc105497959413d8c0446/html5/thumbnails/30.jpg)
Junção de dois nós intermediarios
2* 3* 14* 16* 33*34* 39*38*7* 8*5*
30
17
24*
27
27*22* 27* 29*
305 13 30 3027305 13 30
17
![Page 31: Métodos de Acesso Indices estruturados por B-TREE](https://reader035.vdocuments.net/reader035/viewer/2022081421/552fc105497959413d8c0446/html5/thumbnails/31.jpg)
Redistribuição em nós intermediários
13 1755 13 27 30
22
17 20
2* 3* 5* 7* 8* 14*16* 17* 18* 20* 21* 22* 24* 29*27* 33* 34* 38* 39*
![Page 32: Métodos de Acesso Indices estruturados por B-TREE](https://reader035.vdocuments.net/reader035/viewer/2022081421/552fc105497959413d8c0446/html5/thumbnails/32.jpg)
Redistribuição em nós intermediários
13 1755 13 30
22
17 20
2* 3* 5* 7* 8* 14*16* 17* 18* 20* 21* 22* 29*27* 33* 34* 38* 39*
Quase vazia
![Page 33: Métodos de Acesso Indices estruturados por B-TREE](https://reader035.vdocuments.net/reader035/viewer/2022081421/552fc105497959413d8c0446/html5/thumbnails/33.jpg)
Redistribuição em nós intermediários
13 1755 13 30
22
17 20
2* 3* 5* 7* 8* 14*16* 17* 18* 20* 21* 22* 29*27* 33* 34* 38* 39*
??
??
![Page 34: Métodos de Acesso Indices estruturados por B-TREE](https://reader035.vdocuments.net/reader035/viewer/2022081421/552fc105497959413d8c0446/html5/thumbnails/34.jpg)
Redistribuição em nós intermediários
2* 3* 5* 7* 8* 14*16* 17* 18* 20* 21* 22* 29*27* 33* 34* 38* 39*
13 1755 13 13 17520 3017
??
22
![Page 35: Métodos de Acesso Indices estruturados por B-TREE](https://reader035.vdocuments.net/reader035/viewer/2022081421/552fc105497959413d8c0446/html5/thumbnails/35.jpg)
Resumo: Metodologia de Supressão1. Busca a página onde está a tupla a ser removida.
2. Caso após a remoção da tupla, a ocupação não fica abaixo do mínimo, a tupla é removida e nenhum ajuste suplementar é feito nos outros níveis.
3. Caso após a remoção da tupla, a ocupação fica abaixo do mínimo: Há possibilidade de redistrisbuir com um dos vizinhos.
Primeiro elemento do vizinho à direita passa para a folha à esquerda- elimina-se o primeiro elemento do pai do vizinho à direita
Exercicio : Último elemento do vizinho à esquerda passa para a folha- ?
Não há possibilidade de redistribuição com os vizinhos Junta-se com o vizinho à direita Remove do pai do ex-vizinho o elemento cujo ponteiro à direita
apontava para o ex-vizinho da direita.
![Page 36: Métodos de Acesso Indices estruturados por B-TREE](https://reader035.vdocuments.net/reader035/viewer/2022081421/552fc105497959413d8c0446/html5/thumbnails/36.jpg)
Resumo: Metodologia de Supressão Junção de nós intermediários
Caso o nó à esquerda tenha no máximo d elementos Remove-se do pai do ex-nó à direita o elemento cujo ponteiro à
direita apontava para este ex-nó. Insere-se este elemento no nó juntado.
Ajusta-se os ponteiros. Redistribuição de nós intermediários
Caso o nó à esquerda tenha mais de d elementos Ultimo elemento do nó à esquerda passa para o nó à direita. Remove-se do pai do nó à direita o elemento cujo ponteiro à
direita apontava para este nó. Insere-se este elemento no nó juntado.
Transfere-se para o lugar que ocupava o elemento removido, o ultimo elemento do nó à esquerda.
![Page 37: Métodos de Acesso Indices estruturados por B-TREE](https://reader035.vdocuments.net/reader035/viewer/2022081421/552fc105497959413d8c0446/html5/thumbnails/37.jpg)
ExercicioComo tratar o caso em que o nó que ficou abaixo
da ocupação minima é o primeiro nó (não tem nó vizinho à esquerda) ?
![Page 38: Métodos de Acesso Indices estruturados por B-TREE](https://reader035.vdocuments.net/reader035/viewer/2022081421/552fc105497959413d8c0446/html5/thumbnails/38.jpg)
Gerenciando Duplicatas Quando a chave do índice não é chave candidata da
relação Em sistemas comerciais:
Sybase: dados são ordenados pela chave – páginas são ordenadas sequencialmente – acrescenta-se páginas de overflow
DB2, Oracle, MS SQL Server: considera-se um identificador de tuplas, eliminando-se as duplicatas.
Exemplo: (k,*) (k,*) ... (k,id1,*) (k,id2,*),...
![Page 39: Métodos de Acesso Indices estruturados por B-TREE](https://reader035.vdocuments.net/reader035/viewer/2022081421/552fc105497959413d8c0446/html5/thumbnails/39.jpg)
Método Geral para Gerenciamento de Duplicatas
7* 8* 9* 10* 13*17* 23* 23* 41*37* 43* 47*
13 1757 9 13 175- 37
2* 3*
43
5* 23*
17
Primeiro Filho Segundo Filho não contém nenhuma nova chave
Primeira nova Chave é 37*
23*
![Page 40: Métodos de Acesso Indices estruturados por B-TREE](https://reader035.vdocuments.net/reader035/viewer/2022081421/552fc105497959413d8c0446/html5/thumbnails/40.jpg)
Duplicatas : chave não contém chave candidata
7* 8* 9* 10* 13*17* 23* 23* 23* 41*37* 43* 47*
13 1757 9 13 175- 37
2*3*
43
5* 23*
17Busca 17*
![Page 41: Métodos de Acesso Indices estruturados por B-TREE](https://reader035.vdocuments.net/reader035/viewer/2022081421/552fc105497959413d8c0446/html5/thumbnails/41.jpg)
Duplicatas : chave não contém chave candidata
7* 8* 9* 13* 13*17* 23* 23* 23* 41*37* 43* 47*
13 1757 9 13 175- 37
2*3*
43
5* 23*
17Busca 24*
?Não precisa ir mais adiante !
![Page 42: Métodos de Acesso Indices estruturados por B-TREE](https://reader035.vdocuments.net/reader035/viewer/2022081421/552fc105497959413d8c0446/html5/thumbnails/42.jpg)
Duplicatas : chave não contém chave candidata
7* 8* 9* 13* 13*17* 23* 23* 23* 41*37* 43* 47*
13 1757 9 13 175- 37
2*3*
43
5* 23*
17Busca 13*