1 / 20

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. 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

Download Presentation

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

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. 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.

  3. Exemplo Ordem da b-tree = 1 3* 4* 6* 9* 10* 11* 12* 13* 20* 22* 23* 31* 35* 36* 38* 41* 44* Páginas restantes a alocar

  4. Exemplo 6* 10* Ordem da b-tree = 1 3* 4* 6* 9* 10* 11* 12* 13* 20* 22* 23* 31* 35* 36* 38* 41* 44* Páginas restantes a alocar

  5. Exemplo Precisa dividir 6* 10* 12* 20* 3* 4* 6* 9* 10* 11* 12* 13* 20* 22* 23* 31* 35* 36* 38* 41* 44*

  6. Exemplo 6* 10* 12* 20* 3* 4* 6* 9* 10* 11* 12* 13* 20* 22* 23* 31* 35* 36* 38* 41* 44* Páginas restantes a alocar

  7. Exemplo 10* Precisa dividir 6* 12* 20* 23* 35* 3* 4* 6* 9* 10* 11* 12* 13* 20* 22* 31* 35* 36* 38* 41* 44* 23*

  8. Exemplo 10* 20* 6* 12* 23* 35* 3* 4* 6* 9* 10* 11* 12* 13* 20* 22* 31* 35* 36* 38* 41* 44* 23* Páginas restantes a alocar

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

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

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

  12. 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 Bde 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

  13. 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 excetonos ú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.

  14. 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

  15. Exemplo: Entrada: Arquivo de indice de 9 páginas com 4 registros em cada uma. d = 2, k = 0, x = 1 Saí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

  16. Exemplo: Entrada: Arquivo de indice de 9 páginas com 4 registros em cada uma. d = 2, k = 0, x = 1 Saí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

  17. Método Controi_Btree • 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. • M = número de páginas do arquivo de índice reestruturado • Ult_Nivel := 0 • Para i = 2, ..., M • C = primeiro registro de Pi • Insere(C,1,x,d,Pi-1,Pi) • Retorna (Ult_Nivel, Btree) Atenção:Ult_Nível = número de níveis da Btree retornada (variável global)

  18. 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. • Verifica se existe algum nó no nível N • Se não existir: • constrói primeiro nó No_1 no nível N • Incrementa Ult_Nivel • Insere ponteiro Pt1 em No_1 apontando para PgE • Insere C em No_1 após Pt1 • Insere ponteiro Pt2 em No_1 após C apontando para PgD • Se existir: • No_Final = último nó do nível N • y = ocupação de No_Final • Se y ≤ d + x • Insere C na última posição de No_Final • Insere ponteiro Pt à direita de C apontando para PgD

  19. Cont. 4.Se y = d + x + 1 • Pt = último ponteiro de No_Final • Ult_chave = última chave de No_Final • Cria novo nó No_New à direita de No_Final no nível N • Remove Pt de No_Final e insere em No_New • Remove chave Ult_chave de No_Final • Insere C em No_New logo após Pt • Insere ponteiro Pt_New em No_New logo após C, apontando para PgD • Insere(Ult_chave, N+1,x,d,No_Final, No_New)

  20. Exemplo: Entrada: Arquivo de indice de 9 páginas com 4 registros em cada uma. d = 2, k = 0, x = 1 Saí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

More Related