¿Por qué elegir MySQL como una estructura de índice de árbol B +?

Comparación de diversas estructuras

Traslado: http: //www.gxlcms.com/mysql-366759.html

1, equilibrada árbol binario (AVL): rotación consume tiempo

Desventajas: Debido a la rotación del árbol de tiempo, AVL es ineficiente cuando se los datos de borrado

AVL árbol binario equilibrada es estricta, a la izquierda y subárboles derecho de todos los nodos de la diferencia de altura no debe exceder de 1; búsqueda de árbol AVL, inserción y deleción en la media y peor caso es O (LGN).

AVL es la clave para lograr una rotación equilibrada: Insertar y eliminar pueden socavar un árbol binario equilibrado, en el que caso de que uno o más rotación de árboles para reequilibrar la necesidad árbol. Cuando se inserta de datos, un máximo de sólo una rotación (rotación de un simple o doble rotación); sin embargo, cuando se eliminan los datos, los resultados de desequilibrio en un árbol, el nodo AVL se elimina de la necesidad de mantener el equilibrio de todos los nodos en esta raíz camino, la rotación el orden de O (LGN).

Cuando hay más de borrado operación, los costos de mantenimiento puede ser mayor que el necesario equilibrio de sus beneficios, por lo AVL uso real no está muy extendido.

2, rojo-negro árbol: el árbol es demasiado alto

Ventajas: en el caso de la memoria de datos (por ejemplo, un TreeMap Java y HashMap), el rendimiento de árbol rojo-negro es muy excelente.

Contras: Sin embargo, para el caso de los datos (como bases de datos MySQL, etc.) en el dispositivo de almacenamiento auxiliar de disco, árbol rojo-negro no es bueno, ya que el árbol rojo-negro todavía se ve demasiado alto.

Cuando los datos en el disco, el disco IO se convertirá en el mayor cuello de botella de rendimiento, el objetivo del diseño debe ser reducir al mínimo el número de IO; cuanto mayor sea la altura del árbol y ABM requiere más el número de IO, que afectará seriamente el rendimiento.

En comparación con el árbol AVL, árbol rojo-negro no persigue un equilibrio estricto, pero más o menos equilibrado.

En comparación con el árbol AVL, rojo-negro eficiencia de la consulta del árbol se reducirá, ya que el equilibrio se deteriora la altura del árbol más alto. Retire árbol rojo-negro, pero la eficiencia se mejora en gran medida, ya que el color rojo-negro árbol mientras que la introducción, cuando el inserto o los datos de borrado, sólo requiere el balance de color básico O (1) y el número de revoluciones puede garantizar.

Por lo tanto, en aplicaciones prácticas, utilizando un número relativamente pequeños árboles AVL, árbol rojo-negro se utiliza ampliamente. Por ejemplo, Java TreeMap utilizando un árbol rojo-negro en memoria de la clave de ordenación, el Java8 HashMap utilizando la lista de hash + árbol rojo-negro para resolver conflictos (cuando hay menos nodo de conflicto, listas enlazadas, cuando hay muchos nodos en conflicto, el uso del color rojo árbol negro).

3, B árbol: nacido en el disco (también llamado árbol de B-)

ventajas:

  1. En comparación con el árbol binario, cada uno no hoja nodo B-árbol puede tener múltiples sub-árbol. Por lo tanto, cuando el número total de nodos es el mismo, la altura del árbol B es mucho más pequeño que los árboles AVL y árbol rojo-negro (B-árbol es un "robusto"), lo que reduce en gran medida el número de disco IO.
  2. árbol B-árbol ventaja superior principal de, así como el uso del principio de localidad (es decir, el sistema operativo de memoria de paginación) además.

El llamado principio de localidad, significa que cuando se usan los datos, los datos en su vecindad tienen una probabilidad mayor de ser utilizado en un corto tiempo. Cuando uno, dirección S de disco no sólo los datos actuales, sino también los datos adyacentes se lee en la memoria intermedia.
La clave similares de datos de árbol B almacenado en el mismo nodo, en el que cuando un acceso de datos al nodo de base de datos va a leer toda la memoria caché, cuando se accede a él inmediatamente adyacentes de datos pueden ser leídos directamente de la memoria caché sin necesidad de disco IO; en otras palabras, una caché mayor tasa de árboles B golpeó.

El concepto más importante es el orden del árbol B se define (el orden), para una orden m árbol B, se requiere lo siguiente:

  1. Cada nodo contiene un máximo de nodos m niño.
  2. Si el nodo raíz que comprende un nodo hijo, los nodos secundarios que comprende al menos 2, a excepción del nodo raíz, cada nodo no hoja comprende por lo menos nodos m / 2 niño.
  3. K tiene un nodo hijo del nodo no hoja contendrá k - 1 registros.
  4. Todos los nodos de hoja están en la misma capa.

Como puede verse, la definición del árbol B, y sobre todo para limitar el número de nodos secundarios que registran el número de nodos que no son hojas.
Aquí Insertar imagen Descripción
Árbol B hay algunas aplicaciones, tales como el uso de la estructura de árbol B índice de mongodb en la base de datos. Sin embargo, en muchas aplicaciones de bases de datos, utilizando un árbol B es una variante del árbol B +.

4, árbol B +

B + árboles son más equilibrada árbol de búsqueda, la diferencia radica sobre todo con el árbol B :

  1. Cada nodo B-árbol, incluyendo los nodos de hoja y nodos que no son hojas se almacenan datos reales, B + nodos de hoja del árbol de almacenar solamente datos reales, tiendas de nodo no hoja única clave.
  2. B-árbol en un registro sólo una vez, no se va a repetir, mientras que la tecla B + árbol es probable que se repita reproducen - aparecerá en el nodo hoja, se puede repetir en los nodos que no son hojas.
  3. Entre los nodos hoja del árbol B + unidos por una lista doblemente enlazada.

B nodos no hoja en el árbol, un número de registros menor que el número de nodos secundarios; el B + árbol en el mismo número de registros y el número de nodos secundarios.
Aquí Insertar imagen Descripción
Esta es la clave! ! !
Por lo tanto, B + árbol en comparación con el B-árbol, tiene las siguientes ventajas :

  1. Menos veces el IO : B + nodo no hoja del árbol contiene única clave, no contiene datos reales, así que muchas (es decir, orden más grande m) almacenados en cada nodo registra el número mayor que el número B, la altura de la B + árbol es más baja, menos el número de acceso io cuando sea necesario. Además, debido al número de registros almacenados en cada nodo más, a fin de tomar ventaja de un mejor acceso al principio de localidad, una mayor tasa de acierto de caché.
  2. consulta rango más adecuado : cuando el rango de una consulta en el árbol B, en primer lugar encontrar el límite inferior de buscar, y luego la secuencia de recorrido de árbol B, hasta que encuentra el límite superior de las operaciones de búsqueda y consultas lapso de árbol B + sólo para atravesar lista enlazada puede ser.
  3. Más estable eficiencia de la consulta : B consulta árbol tiempo complejidad de la altura de los árboles entre 1 (registrado, respectivamente, en los nodos nodo raíz y las hojas), y la complejidad de consulta de la B + árbol es un árbol de estabilidad alta, ya que todos los datos son en nodo hoja.

B + árbol también tiene una desventaja: Debido a que se repetirá la clave, y por lo tanto ocupan más espacio . Sin embargo, en comparación con las ventajas de rendimiento, desventajas espaciales a menudo aceptable, por lo tanto B + árbol se utiliza en la base de datos es más extenso que B-árbol.

5, el principio de localidad (razones de cuidado de alta de los árboles)

En los sistemas operativos modernos, la memoria externa para leer datos de la unidad de memoria utilizada se denomina generalmente como "páginas", cada uno de las necesidades de datos de lectura para ser leídos en un número entero de "páginas", y no puede leer una página medio o 0.8. tamaño de la página se determina por el sistema operativo, por lo general de tamaño de página de 4 KB común = 4096 bytes. Así que si estamos para leer un byte o 2 KB, y finalmente toda necesidad de leer una página de 4 KB de tamaño completo, entonces el costo de la lectura de un nodo depende del número de páginas que se lee.

En tal caso, si un nodo de tamaño más pequeño que el tamaño de la página, entonces habrá una parte del tiempo dedicado a la lectura (datos fuera del nodo) que no necesitamos los datos.
árbol binario en este sentido será un desperdicio de una gran cantidad de tiempo, lo que es un nodo en sólo un dato por IO sólo se puede conseguir datos útiles, y más datos si un nodo incluido en un conjunto de datos más útiles IO, la eficiencia voluntad mucho mayor.

Publicado 67 artículos originales · ganado elogios 32 · Vistas a 60000 +

Supongo que te gusta

Origin blog.csdn.net/weixin_43751710/article/details/104671783
Recomendado
Clasificación