Em uma árvore b, você pode armazenar chaves e dados nos nós interno e folha , mas em uma árvore b + você precisa armazenar os dados apenas nos nós folha .
Existe alguma vantagem de fazer o acima em uma árvore b +?
Por que não usar árvores b em vez de árvores b + em todos os lugares, pois intuitivamente elas parecem muito mais rápidas?
Quero dizer, por que você precisa replicar a chave (dados) em uma árvore b +?
database
data-structures
simplfuzz
fonte
fonte
Respostas:
A imagem abaixo ajuda a mostrar as diferenças entre as árvores B + e as árvores B.
Vantagens das árvores B +:
Vantagem de árvores B:
fonte
A principal vantagem das árvores B + sobre as árvores B é que elas permitem incluir mais ponteiros para outros nós, removendo os ponteiros dos dados, aumentando assim o fanout e potencialmente diminuindo a profundidade da árvore.
A desvantagem é que não há saídas antecipadas quando você pode encontrar uma correspondência em um nó interno. Porém, como as duas estruturas de dados têm grandes fanouts, a grande maioria das suas correspondências ocorrerá nos nós das folhas, tornando a árvore B + em média mais eficiente.
fonte
As árvores B + são muito mais fáceis e com melhor desempenho para fazer uma varredura completa, como em todos os dados indexados pela árvore, uma vez que os nós dos terminais formam uma lista vinculada. Para fazer uma varredura completa com uma B-Tree, é necessário fazer uma travessia completa da árvore para encontrar todos os dados.
As árvores B, por outro lado, podem ser mais rápidas quando você faz uma busca (procurando por um dado específico por chave), especialmente quando a árvore reside na RAM ou em outro armazenamento sem bloco. Como você pode elevar nós comumente usados na árvore, são necessárias menos comparações para obter os dados.
fonte
fonte
Exemplo dos conceitos de sistema do banco de dados
B + -árvore
árvore B correspondente
fonte
Clearview bucket
para oMianus Bucket
. Não faria muito sentido fazer isso de qualquer maneira, porque entre os dois você tem oDowntown bucket
que muito deve ser pesquisado no caso de querer fazer uma Verificação de Índice em uma árvore B (requer retrocesso). Onde você conseguiu isso?Defina "muito mais rápido". Assintoticamente, eles são iguais. As diferenças estão em como eles usam o armazenamento secundário. Os artigos da Wikipedia sobre árvores B e árvores B parecem bastante confiáveis.
fonte
Adegoke A, Amit
Acho que um ponto crucial que falta às pessoas é a diferença entre dados e indicadores, conforme explicado nesta seção.
Ponteiro: ponteiro para outros nós.
Dados: - No contexto de índices de banco de dados, os dados são apenas mais um ponteiro para dados reais (linha) que residem em outro lugar.
Portanto, no caso da árvore B, cada nó possui três chaves de informações, ponteiros para dados associados às chaves e ponteiro para nós filhos.
Na árvore B +, o nó interno mantém chaves e ponteiros no nó filho, enquanto o nó folha mantém chaves e ponteiros nos dados associados. Isso permite mais número de chaves para um determinado tamanho de nó. O tamanho do nó é determinado principalmente pelo tamanho do bloco.
A vantagem de ter mais chave por nó é explicada bem acima, portanto, pouparei meu esforço de digitação.
fonte
As árvores B + são especialmente boas no armazenamento baseado em bloco (por exemplo: disco rígido). com isso em mente, você obtém várias vantagens, por exemplo (do alto da minha cabeça):
fanout alta / baixa profundidade: isso significa que você precisa obter menos blocos para acessar os dados. com os dados misturados com os ponteiros, cada leitura recebe menos ponteiros; portanto, você precisa de mais pesquisas para chegar aos dados
armazenamento em bloco simples e consistente: um nó interno possui N ponteiros, nada mais, um nó folha possui dados, nada mais. isso facilita a análise, depuração e até reconstrução.
alta densidade de chaves significa que os nós principais estão quase certamente no cache; em muitos casos, todos os nós internos são armazenados em cache rapidamente, portanto, apenas o acesso aos dados precisa ir para o disco.
fonte
Na Árvore B +, como apenas os ponteiros são armazenados nos nós internos, seu tamanho se torna significativamente menor que os nós internos da árvore B (que armazenam os dados + chave). Portanto, os índices da árvore B + podem ser buscados no armazenamento externo em uma única leitura de disco, processada para encontrar o local do destino. Se for uma árvore B, é necessária uma leitura do disco para cada processo de tomada de decisão. Espero ter esclarecido meu argumento! :)
fonte
**
** ref: Estruturas de Dados Usando C // Autor: Aaro M Tenenbaum
http://books.google.co.in/books?id=X0Cd1Pr2W0gC&pg=PA456&lpg=PA456&dq=drawback+of+B-Tree+is+the+diffitivity+of+Traversing+the+keys+sequentially&source=bl&ots=pGcPQSEJMS&sig= F9MY7zEXYAMVKl_Sg4W-0LTRor8 & hl = pt-BR & sa = X & ei = nD5AUbeeH4zwrQe12oCYAQ & ved = 0CDsQ6AEwAg # v = onepage & q = desvantagem 20% de% 20B-Tree% 20is% 20% 20d%
fonte
Tomemos um exemplo - você tem uma tabela com enormes dados por linha. Isso significa que toda instância do objeto é grande.
Se você usa a árvore B aqui, passa a maior parte do tempo digitalizando as páginas com dados - o que é inútil. Nos bancos de dados, esse é o motivo do uso de Árvores B + para evitar a verificação de dados do objeto.
Árvores B + separam chaves dos dados.
Mas se o tamanho dos seus dados for menor, você poderá armazená-los com a chave, que é o que a árvore B faz.
fonte
A principal diferença entre a árvore B e a árvore B + é que a árvore B elimina o armazenamento redundante dos valores das chaves de pesquisa. Como as chaves de pesquisa não são repetidas na árvore B, talvez não seja possível armazenar o índice usando menos nós da árvore No entanto, como a chave de pesquisa que aparece nos nós não folheados não aparece em nenhum outro lugar na árvore B, somos forçados a incluir um campo de ponteiro adicional para cada chave de pesquisa em um nó não foliar. Existem vantagens de espaço para a árvore B, pois a repetição não ocorre e pode ser usada para índices grandes.
fonte
Uma árvore B + é uma árvore balanceada, na qual todo caminho da raiz da árvore até uma folha tem o mesmo comprimento e cada nó não-folha da árvore tem entre [n / 2] e [n] filhos, onde n é fixo para uma árvore em particular. Ele contém páginas de índice e páginas de dados. As árvores binárias têm apenas dois filhos por nó pai, as árvores B + podem ter um número variável de filhos para cada nó pai
fonte
Um possível uso das árvores B + é que elas são adequadas para situações em que a árvore cresce tanto que não cabe na memória disponível. Portanto, você geralmente espera fazer várias E / Ss.
Muitas vezes acontece que uma árvore B + é usada mesmo quando ela se encaixa na memória e, em seguida, seu gerenciador de cache pode mantê-la lá permanentemente. Mas este é um caso especial, não o geral, e a política de armazenamento em cache é separada da manutenção da árvore B +, como tal.
Além disso, em uma árvore B +, as páginas folha são vinculadas juntas em uma lista vinculada (ou lista duplamente vinculada), que otimiza as travessias (para pesquisas de intervalo, classificação etc.). Portanto, o número de ponteiros é uma função do algoritmo específico usado.
fonte