En un árbol b puede almacenar claves y datos en los nodos interno y hoja , pero en un árbol b + debe almacenar los datos solo en los nodos hoja .
¿Hay alguna ventaja de hacer lo anterior en un árbol b +?
¿Por qué no usar b-trees en lugar de b + trees en todas partes, ya que intuitivamente parecen mucho más rápidos?
Quiero decir, ¿por qué necesitas replicar la clave (datos) en un árbol b +?
database
data-structures
simplfuzz
fuente
fuente
Respuestas:
La imagen a continuación ayuda a mostrar las diferencias entre los árboles B + y los árboles B.
Ventajas de los árboles B +:
Ventaja de los árboles B:
fuente
La principal ventaja de los árboles B + sobre los árboles B es que le permiten agrupar más punteros a otros nodos al eliminar los punteros a los datos, lo que aumenta el despliegue y potencialmente disminuye la profundidad del árbol.
La desventaja es que no hay salidas tempranas cuando podría haber encontrado una coincidencia en un nodo interno. Pero dado que ambas estructuras de datos tienen grandes despliegues, la gran mayoría de sus coincidencias estarán en nodos hoja de todos modos, lo que hace que, en promedio, el árbol B + sea más eficiente.
fuente
Los árboles B + son mucho más fáciles y de mayor rendimiento para hacer un escaneo completo, como en la observación de cada dato que indexa el árbol, ya que los nodos terminales forman una lista vinculada. Para hacer un escaneo completo con un B-Tree, debe hacer un recorrido completo del árbol para encontrar todos los datos.
B-Trees, por otro lado, puede ser más rápido cuando realiza una búsqueda (buscando un dato específico por clave), especialmente cuando el árbol reside en la RAM u otro almacenamiento sin bloques. Como puede elevar los nodos de uso común en el árbol, se requieren menos comparaciones para llegar a los datos.
fuente
fuente
Ejemplo de conceptos del sistema de base de datos 5to
B + -tree
árbol B correspondiente
fuente
Clearview bucket
aMianus Bucket
. No tendría mucho sentido hacer eso de todos modos porque entre los dos tienes loDowntown bucket
que se debe buscar en caso de que quieras hacer un Escaneo de índice en un árbol B (requiere retroceso). ¿De dónde has sacado esto?Definir "mucho más rápido". Asintóticamente son casi lo mismo. Las diferencias radican en cómo hacen uso del almacenamiento secundario. Los artículos de Wikipedia sobre árboles B y árboles B + parecen bastante confiables.
fuente
Adegoke A, Amit
Supongo que un punto crucial que le falta a la gente es la diferencia entre los datos y los punteros como se explica en esta sección.
Puntero: puntero a otros nodos.
Datos: - En el contexto de los índices de la base de datos, los datos son solo otro puntero a los datos reales (fila) que residen en otro lugar.
Por lo tanto, en el caso del árbol B, cada nodo tiene tres claves de información, punteros a los datos asociados con las claves y puntero a los nodos secundarios.
En el árbol interno B +, mantenga las claves y los punteros en el nodo secundario, mientras que el nodo hoja mantiene las claves y los punteros en los datos asociados. Esto permite más número de clave para un tamaño de nodo dado. El tamaño del nodo está determinado principalmente por el tamaño del bloque.
La ventaja de tener más clave por nodo se explica más arriba, por lo que ahorraré mi esfuerzo de escritura.
fuente
Los árboles B + son especialmente buenos en el almacenamiento basado en bloques (por ejemplo: disco duro). Con esto en mente, obtienes varias ventajas, por ejemplo (desde la parte superior de mi cabeza):
alto abanico / baja profundidad: eso significa que debe obtener menos bloques para acceder a los datos. Con los datos entremezclados con los punteros, cada lectura obtiene menos punteros, por lo que necesita más búsquedas para llegar a los datos.
almacenamiento de bloques simple y consistente: un nodo interno tiene N punteros, nada más, un nodo hoja tiene datos, nada más. eso facilita analizar, depurar e incluso reconstruir.
La alta densidad de claves significa que los nodos superiores están casi seguramente en caché, en muchos casos todos los nodos internos se almacenan en caché rápidamente, por lo que solo el acceso a datos debe ir al disco.
fuente
En B + Tree, dado que solo los punteros se almacenan en los nodos internos, su tamaño se vuelve significativamente más pequeño que los nodos internos del árbol B (que almacenan ambos datos + clave). Por lo tanto, los índices del árbol B + se pueden obtener del almacenamiento externo en una sola lectura de disco, procesada para encontrar la ubicación del destino. Si ha sido un árbol B, se requiere una lectura de disco para todos y cada uno de los procesos de toma de decisiones. Espero haber aclarado mi punto! :)
fuente
** **
** ref: Estructuras de datos 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+difficulty+of+Traversing+the+keys+sequentially&source=bl&ots=pGcPQSEJMS&sig= F9MY7zEXYAMVKl_Sg4W-0LTRor8 & hl = en & sa = X & ei = nD5AUbeeH4zwrQe12oCYAQ & ved = 0CDsQ6AEwAg # v = onepage & q = drawback% 20of% 20B-Tree% 20is% 20%% 20%% 20%% 20%% 20%% 20%% 20%
fuente
Tome un ejemplo: tiene una tabla con grandes datos por fila. Eso significa que cada instancia del objeto es grande.
Si usa el árbol B aquí, la mayor parte del tiempo se dedica a escanear las páginas con datos, lo que no sirve de nada. En las bases de datos, esa es la razón de usar B + Trees para evitar escanear datos de objetos.
B + Los árboles separan las claves de los datos.
Pero si el tamaño de sus datos es menor, puede almacenarlos con la clave, que es lo que hace el árbol B.
fuente
La distinción principal entre el árbol B y el árbol B + es que el árbol B elimina el almacenamiento redundante de valores de clave de búsqueda. Dado que las claves de búsqueda no se repiten en el árbol B, es posible que no podamos almacenar el índice utilizando menos nodos de árbol que en el índice del árbol B + correspondiente. Sin embargo, dado que la clave de búsqueda que aparece en los nodos no hoja no aparece en ningún otro lugar en el árbol B, nos vemos obligados a incluir un campo de puntero adicional para cada clave de búsqueda en un nodo no hoja. Son ventajas de espacio para el árbol B, ya que la repetición no ocurre y puede usarse para índices grandes.
fuente
Un árbol B + es un árbol equilibrado en el que cada camino desde la raíz del árbol hasta una hoja es de la misma longitud, y cada nodo no hoja del árbol tiene entre [n / 2] y [n] hijos, donde n es arreglado para un árbol en particular. Contiene páginas de índice y páginas de datos. Los árboles binarios solo tienen dos hijos por nodo padre, los árboles B + pueden tener un número variable de hijos por cada nodo padre
fuente
Un posible uso de los árboles B + es que es adecuado para situaciones en las que el árbol crece tanto que no cabe en la memoria disponible. Por lo tanto, generalmente esperaría estar haciendo múltiples E / S.
A menudo sucede que se usa un árbol B + incluso cuando de hecho cabe en la memoria, y luego su administrador de caché podría mantenerlo allí permanentemente. Pero este es un caso especial, no general, y la política de almacenamiento en caché es independiente del mantenimiento del árbol B + como tal.
Además, en un árbol B +, las páginas de hoja están vinculadas entre sí en una lista vinculada (o lista doblemente vinculada), que optimiza los recorridos (para búsquedas de rango, clasificación, etc.). Entonces, el número de punteros es una función del algoritmo específico que se utiliza.
fuente