Dans un b-tree vous pouvez stocker les deux clés et les données dans les nœuds internes et terminaux , mais dans un b + tree vous devez stocker les données dans les nœuds feuille uniquement .
Y at-il un avantage à faire ce qui précède dans un arbre b +?
Pourquoi ne pas utiliser les b-arbres au lieu d'arbres b + partout, car ils semblent intuitivement beaucoup plus rapides?
Je veux dire, pourquoi avez-vous besoin de répliquer la clé (données) dans un arbre b +?
L'image ci-dessous permet de montrer les différences entre les arbres B + et les arbres B.
Avantages des arbres B +:
Avantage des arbres B:
L'avantage principal des arbres B + par rapport aux arbres B est qu'ils vous permettent d'intégrer davantage de pointeurs vers d'autres nœuds en supprimant les pointeurs vers les données, ce qui augmente le déploiement et diminue potentiellement la profondeur de l'arbre.
L'inconvénient est qu'il n'y a pas de sortie anticipée lorsque vous avez peut-être trouvé une correspondance dans un nœud interne. Mais comme les deux structures de données ont d'énormes fanouts, la grande majorité de vos correspondances seront de toute façon sur des nœuds d'extrémité, ce qui rendra en moyenne l'arborescence B + plus efficace.
Les arbres B + sont beaucoup plus faciles et plus performants pour effectuer une analyse complète, comme dans l’analyse de chaque donnée indexée par l’arbre, car les nœuds terminaux forment une liste chaînée. Pour effectuer une analyse complète avec un arbre B, vous devez effectuer une traversée complète de l'arborescence afin de rechercher toutes les données.
Les arbres B, d’autre part, peuvent être plus rapides lorsque vous effectuez une recherche (recherche d’une donnée spécifique par clé), en particulier lorsque l’arbre réside dans RAM ou dans une autre mémoire non bloquée. Comme vous pouvez élever des nœuds couramment utilisés dans l'arborescence, le nombre de comparaisons nécessaires pour accéder aux données est réduit.
- Dans une arborescence B, les clés et les données sont stockées dans des nœuds internes ou terminaux. Mais dans le stockage de données B +, ne stockez que les nœuds d'extrémité.
- L'analyse complète dans une arborescence B + est très simple car toutes les données se trouvent dans les nœuds d'extrémité. L'analyse complète d'un arbre B nécessite un parcours complet.
- Dans un arbre B, les données peuvent se trouver dans des nœuds terminaux ou internes. La suppression des nœuds internes est très compliquée. Dans une arborescence B +, les données ne se trouvent que dans les nœuds feuilles. La suppression des nœuds feuilles est facile.
- L'insertion dans l'arborescence B est plus compliquée que l'arborescence B +.
- Les arbres B + stockent la clé de recherche redondante, mais l’arbre B n’a aucune valeur redondante.
- Dans une arborescence B +, les données des nœuds feuilles sont classées sous forme de liste chaînée séquentielle, mais dans l'arborescence B, le nœud feuille ne peut pas être stocké à l'aide d'une liste chaînée. De nombreuses implémentations de systèmes de bases de données préfèrent la simplicité structurelle d'un arbre B +.
Exemple de concepts de système de base de données 5e
B + -tree
arbre B correspondant
Définir "beaucoup plus vite". Asymptotiquement, ils sont à peu près les mêmes. La différence réside dans la manière dont ils utilisent le stockage secondaire. Les articles de Wikipédia sur arbres B et arbres B + sont plutôt fiables.
Adegoke A, Amit
Je suppose que l’un des points cruciaux qui vous échappe est la différence entre les données et les pointeurs, comme expliqué dans cette section.
Pointeur: pointeur vers d'autres nœuds.
Données: - Dans le contexte des index de base de données, les données sont simplement un autre pointeur sur des données réelles (lignes) qui résident ailleurs.
Ainsi, dans le cas d’un arbre B, chaque nœud a trois clés d’information, des pointeurs sur les données associées aux clés et un pointeur sur les nœuds enfants.
Dans l'arborescence B +, le nœud interne conserve les clés et les pointeurs vers le nœud enfant tandis que le nœud feuille conserve les clés et les pointeurs vers les données associées. Cela permet plus de nombre de clé pour une taille donnée de nœud. La taille du nœud est déterminée principalement par la taille du bloc.
L'avantage d'avoir plus de clés par nœud est expliqué ci-dessus, je vais donc économiser mon effort de frappe.
Les arbres B + conviennent particulièrement bien au stockage basé sur des blocs (par exemple, un disque dur). dans cet esprit, vous bénéficiez de plusieurs avantages, par exemple (du haut de ma tête):
fanout élevé/faible profondeur: cela signifie que vous devez obtenir moins de blocs pour accéder aux données. avec les données mélangées aux pointeurs, chaque lecture reçoit moins de pointeurs, vous avez donc besoin de plus de recherches pour accéder aux données
stockage de blocs simple et cohérent: un nœud interne a N pointeurs, rien d'autre, un nœud feuille a des données, rien d'autre. cela facilite l'analyse, le débogage et même la reconstruction.
la haute densité de clés signifie que les nœuds supérieurs sont presque certainement sur le cache. Dans de nombreux cas, tous les nœuds internes sont rapidement mis en cache, de sorte que seul l'accès aux données doit aller sur le disque.
Dans l'arborescence B +, seuls les pointeurs étant stockés dans les nœuds internes, leur taille est considérablement réduite par rapport aux nœuds internes de l'arborescence B (qui stocke les données et la clé). Par conséquent, les index de l’arborescence B + peuvent être extraits de la mémoire externe sur un seul disque lu, puis traités pour trouver l’emplacement de la cible. S'il s'agit d'une arborescence B, une lecture de disque est requise pour chaque processus de prise de décision. J'espère que j'ai fait mon point clair! :)
**
L'inconvénient majeur de B-Tree est la difficulté de parcourir les touches séquentiellement. L’arbre B + conserve la propriété d’accès aléatoire rapide du B-Tree tout en permettant un accès séquentiel rapide
** ref: Structures de données utilisant C // Auteur: Aaro M Tenenbaum
La principale distinction entre B-tree et B + tree est que B-tree élimine le stockage redondant des valeurs de clé de recherche. Comme les clés de recherche ne sont pas répétées dans B-tree, nous ne pourrons peut-être pas stocker l'index en utilisant moins de nœuds d'arborescence. Cependant, comme la clé de recherche apparaissant dans des nœuds non-feuilles n’apparaissant nulle part ailleurs dans B-tree, nous sommes obligés d’inclure un champ de pointeur supplémentaire pour chaque clé de recherche dans un nœud non-feuille. Ce sont des avantages d'espace pour B-tree, car la répétition ne se produit pas et peut être utilisée pour les grands index.
Un arbre B + est un arbre équilibré dans lequel chaque chemin allant de la racine de l'arbre à une feuille a la même longueur et où chaque nœud non en feuille de l'arbre a entre [n/2] et [n] enfants, où n est fixe pour un arbre particulier. Il contient des pages d'index et des pages de données. Les arbres binaires n'ont que deux enfants par noeud parent, les arbres B + peuvent avoir un nombre variable d'enfants pour chaque noeud parent
Une des utilisations possibles des arbres B + est qu’il convient aux situations dans lesquelles l’arbre pousse si gros qu’il ne rentre pas dans la mémoire disponible. Ainsi, vous vous attendez généralement à utiliser plusieurs E/S.
Il arrive souvent qu'une arborescence B + soit utilisée même si elle est effectivement stockée dans la mémoire. Votre gestionnaire de cache peut alors la conserver en permanence. Mais il s’agit d’un cas spécial, et non du cas général, et la politique de mise en cache est distincte de la maintenance de l’arbre B + en tant que telle.
De plus, dans une arborescence B +, les pages feuille sont liées entre elles dans une liste liée (ou liste doublement liée), ce qui optimise les parcours (pour les recherches par plage, le tri, etc.). Le nombre de pointeurs dépend donc de l'algorithme spécifique utilisé.
Prenons un exemple: vous avez une table avec d’énormes données par ligne. Cela signifie que chaque instance de l'objet est Big.
Si vous utilisez l'arborescence B ici, vous passez la plupart du temps à numériser les pages avec des données, ce qui est inutile. Dans les bases de données, c'est la raison d'utiliser B + Trees pour éviter d'analyser les données d'objet.
B + Les arbres séparent les clés des données.
Mais si votre taille de données est inférieure, vous pouvez les stocker avec la clé, ce que fait l’arborescence B.