Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Tema 3.
Indexación de Bases de Datos.
Árboles binarios
Puede ser muy costoso mantener el índice ordenado
para que sea posible efectuar una búsqueda binaria.
La búsqueda binaria en una lista clasificada puede
expresarse como un árbol binario.
Ejemplo:
AX CL DE FB FT HN JD KF NR PA RF SD TK WS YJ
KF
FB SD
CL HN PA WS
AX DE FT JD NR RF TK YJ
3. Árboles
Árboles binarios
Si cada nodo se trata como un registro de longitud
fija en el que los apuntadores contienen
números relativos de registro, podemos colocar
la estructura de árbol en almacenamiento
secundario
3. Árboles
Raíz = 9
Padre H. Izq H Der. Padre H. Izq H. Der
0 FB 10 8 8 HN 7 1
1 JD -1 -1 9 KF 0 3
2 RF -1 -1 10 CL 4 12
3 SD 6 13 11 NR -1 -1
4 AX -1 -1 12 DE -1 -1
5 YJ -1 -1 13 WS 14 5
6 PA 11 2 14 TK -1 -1
7 FT -1 -1
3. Árboles
Árboles binarios
Si llega una nueva llave no hay más que ligarla como una
nueva hoja del árbol. Supongamos que llega la llave EB
H H. H H
Padre Padre
KF Izq Der Izq. Der.
FB SD 0 FB 10 8 8 HN 7 1
CL HN PA WS 1 JD -1 -1 9 KF 0 3
DE FT JD NR RF TK YJ 2 RF -1 -1 10 CL 4 12
AX
3 SD 6 13 11 NR -1 -1
EB
4 AX -1 -1 12 DE -1 15
5 YJ -1 -1 13 WS 14 5
Raíz = 9
6 PA 11 2 14 TK -1 -1
7 FT -1 -1 15 EB -1 -1
3. Árboles
Árboles binarios
Los árboles binarios permiten mantener el orden sin
un excesivo coste.
El número máximo de accesos es log2(n) siendo n el
número de elementos y estando el árbol equilibrado.
El número medio de accesos será log2(n)/2
Tienen el problema de que el árbol puede quedar no
balanceado y puede degenerar en una lista (si los
datos llegan ordenados).
3. Árboles
Árboles AVL (Equilibrados)
Para que el árbol sea efectivo, debe estar equilibrado.
Adisson-Velskii y Laudi, propusieron un método para
equilibrar un árbol en altura (para cada nodo la
diferencia de nodos entre cada subárbol es de como
mucho 1)
El rendimiento de un árbol equilibrado es 1.4xlog2(n+1).
Los árboles AVL permiten como máximo una diferencia
de niveles entre cada rama de como mucho 1.
Cuando se efectúa una operación que modifica la
estructura del árbol se comprueba si éste ha quedado
balanceado.
3. Árboles
Árboles paginados
Otra alternativa para conseguir un mayor rendimiento es
la paginación de los árboles: sustituir los nodos por
páginas de forma que en lugar de considerar en cada
nodo un único elemento, consideraremos una página
con muchos elementos. De esta forma se consigue un
orden de O(logk(n)), siendo k el número de nodos que
entran en una página.
El número de accesos en estos árboles es de log k+1 n
3. Árboles
Árboles paginados
3. Árboles
Árboles paginados
Con no más de dos desplazamientos podremos
acceder a cualquiera de los 63 nodos del árbol.
Si añadimos un nivel más en el árbol: 64 páginas
nuevas con 3 desplazamientos encontramos
cualquiera de los 511 nodos.
Con un nivel más: con 4 desplazamientos
encontramos cualquiera de los 4095 nodos. En una
búsqueda binara necesitaríamos hasta 12
desplazamientos.
3. Árboles
Árboles B. Antecedentes
Los árboles equilibrados tienen el inconveniente de
que son difíciles de reequilibrar pues hay que
romper páginas, lo que es bastante complicado.
Sabemos siempre cual será la raíz de cada subárbol,
pero en el caso de que las llaves lleguen en orden
aleatorio, puede que para que el árbol quede
balanceado tengamos que dividir páginas de claves
y aún así no quedará balanceado completamente.
Este problema surge porque estamos partiendo de
inserciones en el árbol de arriba hacia abajo.
3. Árboles
Árboles B
La solución a este problema llegó de mano de Bayer y
McGreight que propusieron una metodología para
construir árboles equilibrados y paginados: los
árboles B.
Esta metodología se basa en construir el árbol de
abajo a arriba
De esta forma las hojas están siempre al mismo
nivel
La raíz será la que vaya emergiendo, en vez de
fijarla y modificarla si es necesario para reequilibrar.
3. Árboles
Árboles B
En un árbol B cada página o nodo consiste en una
secuencia ordenada de llaves y un conjunto de
apuntadores.
El número de apuntadores siempre excede en uno al
número de llaves.
Los árboles B se basan en que trabajamos con la
página o nodo en memoria RAM, lo que nos permite
tratar el árbol como una lista ordenada en la que
podemos realizar búsqueda binaria.
Llamaron orden del árbol B al número de nodos que
caben en una página, el número máximo de hijos
que puede tener una página (uno más que el
número de claves que puede tener).
3. Árboles
Árboles B. Ejemplo 1, inserción:
Supongamos un árbol de orden cuatro y una página
vacía a la que llegan los siguientes valores 25, 32, 9,
47, 53, 12, 22, 31, 97, 83. Estos valores se van
insertando en orden:
Página 1
9 25 32
3. Árboles
Árboles B
25, 32, 9, 47, 53, 12, 22, 31, 97, 83.
1 25 2
1
2
9 12 22 32 47 53
3. Árboles
25, 32, 9, 47, 53, 12, 22, 31, 97, 83.
3
1 25 2 32 4
1 2 4
9 12 22 31 47 53 97
3
1 25 2 32 4 53 5
1 2 4 5
9 12 22 31 47 83 97
3. Árboles
Árboles B.
Búsquedas en un árbol B
debemos empezar buscando en los separadores de
la página raíz de nuestro índice.
Cuando encontremos un separador con valor mayor
que la clave que buscamos, el apuntador a seguir
será el de su izquierda.
Si la raíz era una página interna, este apuntador nos
llevará a otra página de índice, donde debemos
repetir el mismo proceso, y así sucesivamente hasta
que lleguemos a una página de tipo hoja.
3. Árboles
Árboles B
Propiedades de los árboles B
Un árbol B de orden m debe satisfacer estas propiedades:
1. Todos los nodos salvo la raíz y las hojas deben poseer al
menos (m/2) hijos y a lo sumo m hijos. (Si resultado no
entero el entero mayor)
2. Un nodo con k hijos tiene k-1 claves.
3. La raíz debe poseer al menos dos hijos y a lo sumo m.
4. Las hojas deben tener al menos (m/2) - 1 claves y a lo sumo
m-1 claves. (Si resultado de m/2 no entero el entero mayor)
5. Todas las hojas están al mismo nivel.
Consideremos un árbol con m=6. Tendrán como poco 3 hijos y
como mucho 6 hijos. Cada nodo tendrá 2 claves y como
mucho 5 claves.
3. Árboles
Árboles B
Borrado en un árbol B
Las propiedades de un árbol B deben mantenerse también
cuando se eliminen llaves del árbol.
La eliminación de llaves puede causar situaciones distintas:
– Caso 1: Eliminar una llave de una página hoja.
– Caso 2: Eliminar una llave de una página que no es hoja.
– Caso 3: Eliminación de una llave en una hoja que deje a esta
hoja por debajo del mínimo de llaves. Redistribución
– Caso 4: Eliminación de una llave en una hoja que deje a esta
hoja por debajo del mínimo de llaves. Concatenación.
– Caso 5: Propagación de la insuficiencia.
– Caso 6: La altura del árbol disminuye.
3. Árboles
Árboles B
Caso 1. Eliminar una llave de una página hoja.
La eliminación de la llave NO provoca que el
contenido de la página caiga por debajo del mínimo
de llaves.
Una página hoja contiene por lo menos (m/2) – 1
llaves y no más de m-1 llaves.
La eliminación consiste en eliminar la llave y
reacomodar dentro de la página las llaves que hay
dentro.
3. Árboles
Árboles B
Caso 1:La eliminación de la llave J NO provoca que el contenido
de la página 5 caiga por debajo del mínimo de llaves:
Una página hoja contiene por lo menos (m/2) – 1 = 2 llaves y
no más de m-1 = 5 llaves.
Por lo tanto la eliminación consiste en eliminar la llave J y
reacomodar dentro de la página las llaves que hay dentro.
3. Árboles
Árboles B
Caso 2. Eliminar una llave de una página que no
es hoja.
Hay que reorganizar el árbol para mantener su
estructura.
Una solución es intercambiarla por su sucesor
inmediato.
Tras el intercambio se realiza el borrado en el nodo
hoja.
3. Árboles
Árboles B
Caso 2: Eliminar la llave M que está en la raíz. Hay que
reorganizar el árbol para mantener su estructura.
Se intercambiaría la llave M por la N y luego se borraría la
M. Deja las llaves del árbol en orden, ya que las llaves
que están a la derecha de N son mayores que ella.
3. Árboles
Árboles B
Caso 3. Eliminación de una llave en una hoja que
deje a esta hoja por debajo del mínimo de
llaves. Redistribución.
Ocurre insuficiencia en la página donde se realiza el
borrado.
Redistribuir las llaves entre las páginas hermanas.
La redistribución ocasiona un cambio en la llave que
está en la página padre para que continúe actuando
como separador.
3. Árboles
Rebalanceo.
Hallar un hermano para el nodo deficiente que
tenga más del mínimo número de elementos y
redistribuir los elementos entre los hermanos
para que todos tengan más del mínimo.
– Si el nodo hermano inmediato de la derecha del
nodo deficiente tiene más del mínimo numero de
elementos, se escoge el valor medio entre el
separador y ambos hermanos como nuevo
separador y se coloca como padre. Elementos
restantes a nodos hijos izquierdo y derecho.
3. Árboles
– Si el nodo hermano inmediato de la derecha del
nodo deficiente tiene el mínimo número de
elementos examinar el nodo hermano inmediato
izquierdo.
– Repetir proceso anteriormente explicado con el
nodo derecho.
3. Árboles
Árboles B
Caso 3: Eliminación de la llave R de la página 7.
En este caso, moveríamos U y V a la página 7 y se
promociona W.
3. Árboles
Árboles B
Caso 4. Eliminación de una llave en una hoja que deje a
esta hoja por debajo del mínimo de llaves.
Concatenación.
No puede resolverse por redistribución, ya que las páginas
‘vecinas’ no tienen suficientes llaves para repartir en dos
páginas.
Utilizamos la concatenación, combinando las dos páginas y
la llave de la página padre para hacer una sola página
completa.
La concatenación es lo inverso a la división,
– en el caso de la división se promueve una llave
– en el caso de la concatenación implica el hecho del descenso de
llaves
La concatenación puede causar insuficiencia en la página
padre.
3. Árboles
Árboles B
Caso 4: al eliminar A y concatenar, se produce
insuficiencia en la llave padre concatenación
de nuevo.
3. Árboles
Árboles B
Caso 5. Propagación de la insuficiencia.
La concatenación puede causar insuficiencia en la
página padre.
Esta insuficiencia puede propagarse a través de la
página padre y, sucesivamente, a páginas
antecesoras
3. Árboles
Árboles B
Caso 5: la pérdida de la D de la página padre (al llevarla al
nivel de hoja), crea de nuevo insuficiencia.
La insuficiencia no puede resolverse por redistribución
Volvemos a utilizar la concatenación.
3. Árboles
Árboles B
Caso 6. La altura del árbol disminuye.
La concatenación llega hasta la raíz del árbol B.
La concatenación de las dos ramas que cuelgan de
la raíz absorben la última clave de la página raíz.
El árbol disminuye en altura desapareciendo la
página raíz. La nueva página raíz del árbol B será la
página fruto de la concatenación.
3. Árboles
Árboles B
Caso 6: La concatenación de las páginas 1 y 2
absorbe la única llave de la página raíz,
disminuyendo en un nivel la altura del árbol.
3. Árboles
Árboles B. Resumen del borrado
1. Si la llave que se va a eliminar no está en una hoja,
intercambiarla por su sucesor inmediato, el cual está en
una hoja.
2. Eliminar la llave.
3. Si la hoja contiene el número mínimo de llaves, no se
requiere ninguna acción adicional.
4. Si la hoja contiene menos de las llaves mínimas, se
examinan los hermanos izquierdo y derecho.
Si un hermano tiene más del mínimo de llaves: redistribución.
Si ninguno de los hermanos tiene más del mínimo: se concatenan
las dos hojas y la llave de en medio del padre a una hoja.
5. Si las hojas se concatenaron, aplicar 3-6 al padre.
6. Si se elimina la última llave de la raíz, la altura del árbol
decrece.
3. Árboles
Árboles B+
Los ficheros secuenciales indizados han de permitir el
acceso a los registros de dos formas:
Por el índice, accediendo a un registro concreto.
De forma secuencial, recorriendo todos los registros.
Árboles B+
Las inserciones y borrados en los bloques pueden
realizarse igual que se hace en los árboles B,
de forma que si un bloque presenta
insuficiencia, puede resolverse de la misma
forma que se hace en los árboles B.
Si un nodo vecino está medio lleno, se pueden
concatenar los dos nodos, y se libera uno para que
se pueda usar de nuevo.
Si los nodos adyacentes están llenos hasta más de
la mitad, los registros pueden redistribuirse entre los
nodos para hacer una distribución más equilibrada.
3. Árboles
Árboles B+
No hay necesidad de almacenar llaves reales en el
índice, podemos almacenar sólo separadores.
Por ejemplo:
Álvarez-…-Gómez Gutiérrez-…-Martínez
– Posibles separadores: Gon, González, Guadalupe, Gum...
Si el conjunto índice contiene separadores (los más
cortos) en lugar de almacenar copias de las llaves
enteras, se denomina índice de prefijos simples.
El árbol B (que almacena prefijos simples) y el
conjunto secuencia forman una estructura llamada
árbol B+ de prefijos simples.
3. Árboles
Árboles B+
Diferencia entre árbol B+ de prefijos simples y un árbol B+
sencillo: esta última estructura no implica el uso de
prefijos como separadores sino que los separadores del
conjunto índice son copias de las llaves reales.
3. Árboles
Generar el árbol b+ de orden 3 con las claves: 90, 60,
55, 70, 65, 30, 10 y 69.
3. Árboles
3. Árboles
3. Árboles
Árboles B+. Rendimiento.
Supongamos que tenemos bloques de tamaño 2k, con un tamaño
de clave de 8 bytes y que el apuntador ocupa 4 bytes. El tamaño
del registro es de 200 bytes. ¿Cuál es el factor de bloque (el
número máximo de registros que caben en un bloque)?
Bk _ sz 2048bytes
Bk _ fr = = = 10reg
Re g _ sz 200 bytes
reg
Sabemos que en cada nodo hay m apuntadores de 4 bytes, m-1
claves de 8 bytes e información de control, ¿Cuál sería el orden del
árbol (m)?
4m + 8(m − 1) = 2048
2048 + 8
m= ⇒ m = 171.33
12
m ≅ 170
3. Árboles
Árboles B+. Rendimiento.
Consideraremos que el orden de ocupación es de aprox. el 70%:
m=170, el 70% de 170 es 118.
bytes
11501224reg × 200 = 2300244800bytes = 2.14Gb
reg
bk
mem =
(fo) 2
kb
71290880reg × 2 = 1402581760kb = 135.97Gb
reg
3. Árboles
Si tuviéramos 10 Mb RAM para tener parte del índice,
podemos acceder en 2 accesos en memoria a
aproximadamente 70 millones de registros, lo que se
traduce en 135.97 Gb de datos.