Baixe o app para aproveitar ainda mais
Prévia do material em texto
Pesquisa em Arquivos Árvore B Gilda Aparecida de Assis Pesquisa em Arquivos Pesquisa em Árvore B Algoritmo iterativo Carrega uma página do disco para a memória primária e então pesquisa dentro da página, até chegar no nível folha A árvore B garante que pelo menos 50% da página (exceção da raiz) é utilizada no armazenamento dos dados (chave-referência) do arquivo de índices ou do arquivo de dados Todo nodo tem pelo menos m/2 descendentes, exceto raiz e folhas Árvore B é balanceada Nos nodos folha estão as referências para os registros do arquivo de dados, mas não há referências para esses registros de dados nos nodos internos. Isso gera chaves duplicadas nos níveis mais altos da árvore. Pesquisa em Arquivos Inserção em Árvore B Inicia com pesquisa que percorre todo o caminho da raiz até uma folha Após localizar o nodo folha, o seguinte procedimento se repete da folha até a raiz: Detecção de overflow Divisão Inserção Atualizar nodo pai (promover chaves) Se a raiz foi dividida, criar uma nova raiz Pesquisa em Arquivos Remoção em Árvore B Garantir que todo nodo terá pelo menos m/2 chaves após a remoção, exceto raiz e folhas Situações: Remover chave da folha sem gerar underflow no nodo e sem mudar seu maior valor: Apenas remover chave do nodo D G I A B C D E F G H I Remover chave C da árvore D G I A B D E F G H I Pesquisa em Arquivos Remoção em Árvore B Situações: Remover chave da folha sem gerar underflow no nodo mas causando mudança no maior valor: Remover chave da folha e atualizar o maior nos níveis anteriores N O P I P Z M P Remover chave P N O I O Z M O Pesquisa em Arquivos Remoção em Árvore B Situações: Remover chave da folha que gera underflow no nodo: Remover chave da folha, inserir chaves restantes no vizinho(merge) e remover nodo folha. Níveis superiores devem refletir isso. D G I A B C D E F G H I Remover chave H D I A B C D E F G I Pesquisa em Arquivos Remoção em Árvore B Situações: Merge pode se propagar até a raiz. Se a raiz fica com somente 1 chave e 1 filho, ela pode ser eliminada e seu filho se torna a nova raiz. D E F G D E F G Pesquisa em Arquivos Remoção em Árvore B Situações: Se o nodo i tem exatamente o número mínimo de chaves e algum de seus nodos vizinhos tem chaves sobrando, redistribua as chaves do vizinho para o nodo i e modifique os índices dos níveis superiores para refletir isso. E N U Z P R S T U V W Z Remover W da árvore de ordem 5, redistribuição das chaves entre vizinhos (mesmo pai) E N T Z P R S T U V Z Pesquisa em Arquivos Complexidade de busca em Árvore B Ex: 1.000.000 chaves Árvore B de ordem 512 No pior caso, qual será o número máximo de acessos ao disco para encontrar uma chave? Em outras palavras, quão profunda a árvore será? Todas chaves aparecem nas folhas, portanto, são 1.000.000 chaves nas folhas Pior caso ocorre quando todas as páginas têm o número mínimo de descendentes m/2, ou seja, largura mínima e altura máxima da árvore Pesquisa em Arquivos Redistribuição em Árvore B Redistribuição pode ser utilizada tanto na remoção quanto na inserção de novas chaves O uso da redistribuição no lugar da divisão quando ocorre overflow na inserção pode tornar a árvore B mais eficiente quanto ao uso do espaço, evitando ou pelo menos postergando, a criação de novas páginas. Dividir uma página somente quando ambos os vizinhos estão cheios Pesquisa em Arquivos Complexidade de busca em Árvore B • Para árvore B com n chaves nas folhas: n≥ 2xm/2d-1 , ou seja, n/2 ≥ m/2d-1, aplicando logaritmo na equação • d -1 ≤ log m/2 (n/2), ou seja, d ≤ 1 + log m/2 (n/2), • No exemplo d ≤ 1 + log 512/2(1.000.000/2), d ≤ 3.37 • Indexar 1.000.000 de chaves em não mais que 3 seeks é o desempenho que precisamos para indexação em arquivo. Nível Número mínimo de descendentes 1 (raiz) 2 2 2 x m/2 3 2 x m/2 x m/2 = 2xm/22 4 2xm/23 ... ... d 2xm/2d-1 Pesquisa em Arquivos Árvore B* Criada por Knuth em 1973, explora a redistribuição na inserção e estabelece novas regras para a divisão Redistribuição é utilizada até que o nodo e pelo menos um vizinho estejam cheios A divisão é feita partindo dos dois nodos cheios e gerando 3 novos nodos Os novos nodos são cada um cerca de 2/3 cheios ao invés de 1/2 cheios como ocorre na divisão de um nodo apenas Pesquisa em Arquivos Propriedades da Árvore B* Toda página tem no máximo m descendentes Toda página exceto a raiz tem pelo menos (2m-1)/3 descendentes A raiz tem pelo menos 2 descendentes, exceto se ela é uma folha Todas as folhas estão no mesmo nível Pesquisa em Arquivos Otimização da busca em árvore B ou B* Como reduzir ainda mais os acessos ao disco para recuperar chaves de um nodo folha? Manter uma parte do índice na memória principal pode reduzir para um acesso ao disco ou menos Criar um buffer de páginas na memória Quando uma nova pesquisa é feita, inicia-se pelas páginas que já estão no buffer da RAM Se a página desejada não está na memória, ela é lida do disco para o buffer, substituindo uma das páginas do buffer. Como? LRU – Least Recently Used (Menos Recentemente Usada), ou seja, a página que sai é a que ficou mais tempo sem requisição de uso. Substituição baseada no nível da página : Manter na RAM as páginas dos níveis mais altos da árvore
Compartilhar