criação do indice b-tree (ou isam) carregamento em massa (bulk loading)

20
Criação do Indice B-tree (ou ISAM) Carregamento em Massa (Bulk Loading) AULA 14 – Parte II Profa. Sandra de Amo GBC053 – BCC

Upload: allegra-obrien

Post on 03-Jan-2016

20 views

Category:

Documents


0 download

DESCRIPTION

Criação do Indice B-tree (ou ISAM) Carregamento em Massa (Bulk Loading). AULA 14 – Parte II Profa. Sandra de Amo GBC053 – BCC. Construção de uma B-Tree – Bulk Loading. Ordena-se as entradas do índice pela chave de busca Aloca-se uma página vazia para a raiz - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Criação do Indice B-tree   (ou ISAM) Carregamento em Massa (Bulk Loading)

Criação do Indice B-tree (ou ISAM)

Carregamento em Massa (Bulk Loading)

AULA 14 – Parte II

Profa. Sandra de Amo

GBC053 – BCC

Page 2: Criação do Indice B-tree   (ou ISAM) Carregamento em Massa (Bulk Loading)

Construção de uma B-Tree – Bulk Loading

• Ordena-se as entradas do índice pela chave de busca

• Aloca-se uma página vazia para a raiz

• Insere nesta página um ponteiro para a primeira página do arquivo contendo as entradas.

Page 3: Criação do Indice B-tree   (ou ISAM) Carregamento em Massa (Bulk Loading)

Exemplo

3* 4* 6* 9* 10* 11* 12* 13* 20* 22* 23* 31* 35* 36* 38* 41* 44*

Páginas restantes a alocar

Ordem da b-tree = 1

Page 4: Criação do Indice B-tree   (ou ISAM) Carregamento em Massa (Bulk Loading)

Exemplo

3* 4* 6* 9* 10* 11* 12* 13* 20* 22* 23* 31* 35* 36* 38* 41* 44*

Ordem da b-tree = 16* 10*

Páginas restantes a alocar

Page 5: Criação do Indice B-tree   (ou ISAM) Carregamento em Massa (Bulk Loading)

Exemplo

3* 4* 6* 9* 10* 11* 12* 13* 20* 22* 23* 31* 35* 36* 38* 41* 44*

6* 10* 12*

Precisa dividir

20*

Page 6: Criação do Indice B-tree   (ou ISAM) Carregamento em Massa (Bulk Loading)

Exemplo

3* 4* 6* 9* 10* 11* 12* 13* 20* 22* 23* 31* 35* 36* 38* 41* 44*

6* 12*10* 20*

Páginas restantes a alocar

Page 7: Criação do Indice B-tree   (ou ISAM) Carregamento em Massa (Bulk Loading)

Exemplo

3* 4* 6* 9* 10* 11* 12* 13* 22* 31* 35* 36* 38* 41* 44*

6* 12*

10*

20*

20*

23*

23*

Precisa dividir

35*

Page 8: Criação do Indice B-tree   (ou ISAM) Carregamento em Massa (Bulk Loading)

Exemplo

3* 4* 6* 9* 10* 11* 12* 13* 22* 31* 35* 36* 38* 41* 44*

6* 12*

10*

20*

23*

23*

20*

35*

Páginas restantes a alocar

Page 9: Criação do Indice B-tree   (ou ISAM) Carregamento em Massa (Bulk Loading)

Exemplo

3* 4* 6* 9* 10* 11* 12* 13* 22* 31* 35* 36* 38* 41* 44*

6* 12*

10*

20*

23*

23*

20*

35* 38* 44*

Precisa dividir

Page 10: Criação do Indice B-tree   (ou ISAM) Carregamento em Massa (Bulk Loading)

Exemplo

3* 4* 6* 9* 10* 11* 12* 13* 22* 31* 35* 36* 38* 41* 44*

6* 12*

10*

20*

23*

23*

20*

38* 44*

35*

Precisa dividir

Page 11: Criação do Indice B-tree   (ou ISAM) Carregamento em Massa (Bulk Loading)

Exemplo

3* 4* 6* 9* 10* 11* 12* 13* 22* 31* 35* 36* 38* 41* 44*

6* 12*

10*

20*

23*

23*

38* 44*

35*

20*

Page 12: Criação do Indice B-tree   (ou ISAM) Carregamento em Massa (Bulk Loading)

Método – Carregamento em Massa

Dados de entrada: Relação R(A1,...,An)

Chave = Ai1,...,Aik

– Ordena-se a relação R pelos atributos da chave– Constrói-se o arquivo de índice I com registros (chave,rid)– Executa rotina Constroi_BTree(I,d,k,x), que retorna uma estrutura

de BTree B de ordem d, contendo nas folhas o arquivo de índice I, e o número N de níveis da BTree B construída. (O número N é importante para construir depois a rotina de busca na b-tree B)

Dados de saída: N = número de níveis da Btree

B = <B0, B1,..., Bn-1> , onde cada Bi = sequência de páginas do nível i da Btree

Page 13: Criação do Indice B-tree   (ou ISAM) Carregamento em Massa (Bulk Loading)

Método – Carregamento em Massa

Observações:– No carregamento em massa, a b-tree B retornada

pela rotina Constroi_BTree(I,d,k,x), respeita as restrições de ocupação máxima e mínima exceto nos últimos nós de cada nível. A ocupação de tais nós pode ser qualquer número de registros entre 1 e 2d.

– Quando a b-tree começar a ser utilizada e sofrer modificações (inserções e deleções), ela tenderá a ter seus nós extremos (em cada nível) respeitando as condições de ocupação mínima e máxima.

Page 14: Criação do Indice B-tree   (ou ISAM) Carregamento em Massa (Bulk Loading)

Os parâmetros de Constroi_BTree

• I = arquivo de indice ordenado

• d = ocupação mínima (ordem da b-tree)

• 0 ≤ k ≤ d = o quanto a mais queremos de ocupação inicial nas folhas (as folhas serão construídas com ocupação = d + k), exceto pela última folha, que terá ocupação entre 1 e 2d.

• 0 ≤ x ≤ d - 1 = o quanto a mais queremos de ocupação inicial nos nós intermediários (os nós serão construídos com ocupação = d + x), exceto nos últimos nós de cada nível que terão ocupação entre 1 e 2d

Page 15: Criação do Indice B-tree   (ou ISAM) Carregamento em Massa (Bulk Loading)

Exemplo:Entrada: Arquivo de indice de 9 páginas com 4 registros em cada uma. d = 2, k = 0, x = 1Saída: (3, <B0,B1,B2>) B0 = 18 páginas (folhas em amarelo) contendo 2 (= d + k) registros em cada uma B1 = Nível 1 da Btree = 5 páginas (azuis) de 3 (= d + x) registros cada (exceto a última) B2 = Nível 2 da Btree (raiz) = 1 página com 4 registros

Page 16: Criação do Indice B-tree   (ou ISAM) Carregamento em Massa (Bulk Loading)

Exemplo:Entrada: Arquivo de indice de 9 páginas com 4 registros em cada uma. d = 2, k = 0, x = 1Saída: (3, <B0,B1,B2>) B0 = 18 páginas (folhas em amarelo) contendo 2 (= d + k) registros em cada uma B1 = Nível 1 da Btree = 5 páginas (azuis) de 3 (= d + x) registros cada (exceto a última) B2 = Nível 2 da Btree (raiz) = 1 página com 4 registros

Page 17: Criação do Indice B-tree   (ou ISAM) Carregamento em Massa (Bulk Loading)

Método Controi_Btree1. Reestrutura(I,d,k): transforma arquivo I em um arquivo cujas

páginas (P1, P2, ..., Pm) têm no máximo d+k registros. A ordem dos registros é a mesma do arquivo I original.

2. M = número de páginas do arquivo de índice reestruturado

3. Ult_Nivel := 0

4. Para i = 2, ..., M

1. C = primeiro registro de Pi

2. Insere(C,1,x,d,Pi-1,Pi)

3. Retorna (Ult_Nivel, Btree)

Atenção: Ult_Nível = número de níveis da Btree retornada (variável global)

Page 18: Criação do Indice B-tree   (ou ISAM) Carregamento em Massa (Bulk Loading)

Insere(Chave,Nivel,d,x,PgE,PgD)

Insere(C,N,d,x,PgE,PgD)Input: C = chave, N = nivel da inserção, d = ocupação mínima, x = qte a mais, PgE =

página do nivel N-1 (abaixo de N), à esquerda de C, PgD = página do nível N-1(abaixo de N), à direita de C.

1. Verifica se existe algum nó no nível N2. Se não existir:

1. constrói primeiro nó No_1 no nível N2. Incrementa Ult_Nivel3. Insere ponteiro Pt1 em No_1 apontando para PgE4. Insere C em No_1 após Pt15. Insere ponteiro Pt2 em No_1 após C apontando para PgD

3. Se existir:1. No_Final = último nó do nível N2. y = ocupação de No_Final3. Se y ≤ d + x

1. Insere C na última posição de No_Final2. Insere ponteiro Pt à direita de C apontando para PgD

Page 19: Criação do Indice B-tree   (ou ISAM) Carregamento em Massa (Bulk Loading)

Cont. 4. Se y = d + x + 1

1. Pt = último ponteiro de No_Final2. Ult_chave = última chave de No_Final3. Cria novo nó No_New à direita de No_Final no nível N4. Remove Pt de No_Final e insere em No_New5. Remove chave Ult_chave de No_Final6. Insere C em No_New logo após Pt7. Insere ponteiro Pt_New em No_New logo após C,

apontando para PgD8. Insere(Ult_chave, N+1,x,d,No_Final, No_New)

Page 20: Criação do Indice B-tree   (ou ISAM) Carregamento em Massa (Bulk Loading)

Exemplo:Entrada: Arquivo de indice de 9 páginas com 4 registros em cada uma. d = 2, k = 0, x = 1Saída: (3, <B0,B1,B2>) B0 = 18 páginas (folhas em amarelo) contendo 2 (= d + k) registros em cada uma B1 = Nível 1 da Btree = 5 páginas (azuis) de 3 (= d + x) registros cada (exceto a última) B2 = Nível 2 da Btree (raiz) = 1 página com 4 registros