Está en la página 1de 59

Universidad de Extremadura

Centro Universitario de Mérida


Departamento de Ingeniería en Sistemas Informáticos y Telemáticos.
Área de Lenguajes y Sistemas Informáticos

Tema 3.
Indexación de Bases de Datos.

Sistem as de I nform ación


Indexación de Bases de Datos.
1. Introducción
2. Índice simple
2.1. Características
2.2. Operaciones
2.3. Índices demasiado grandes para almacenarse en
memoria
3. Árboles
3.1 Árboles Binarios
3.1 Árboles AVL
3.1 Árboles Paginados
3.1 Árboles B
3.1 Árboles B+
3. Árboles

Á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 AVL (Equilibrados)


Para comprobar si el árbol está o no balanceado,
se empieza a mirar las diferencias de niveles, a partir
de los nodos que son padres de las hojas (el
penúltimo nivel del árbol).
Si la diferencia de niveles es 1 ó 0, subimos al nivel
anterior, y así hasta llegar a la raíz.
Si en un subárbol, la diferencia de niveles es más
que 1, hacemos una serie de reajustes:
3. Árboles
Rotación derecha.
Rotación izquierda.
Doble rotación derecha.
Doble rotación izquierda.
3. Árboles
 Rotación derecha.
 De un árbol de raíz (r) y de hijos izquierdo (i) y derecho (d), lo
que haremos será formar un nuevo árbol cuya raíz sea la raíz
del hijo izquierdo, como hijo izquierdo colocamos el hijo
izquierdo de i (nuestro i’) y como hijo derecho construimos un
nuevo árbol que tendrá como raíz, la raíz del árbol (r), el hijo
derecho de i (d’) será el hijo izquierdo y el hijo derecho será el
hijo derecho del árbol (d).
3. Árboles
 Rotación izquierda.
 De un árbol de raíz (r) y de hijos izquierdo (i) y derecho (d),
consiste en formar un nuevo árbol cuya raíz sea la raíz del hijo
derecho, como hijo derecho colocamos el hijo derecho de d
(nuestro d’) y como hijo izquierdo construimos un nuevo árbol
que tendrá como raíz la raíz del árbol (r), el hijo izquierdo de d
será el hijo derecho (i’) y el hijo izquierdo será el hijo izquierdo
del árbol (i). Precondición : Tiene que tener hijo derecho no
vacío.
3. Árboles
Doble rotación derecha.
Si la inserción se produce en el hijo derecho
del hijo izquierdo del nodo desequilibrado (o
viceversa) hay que realizar una doble
rotación derecha.
3. Árboles
Doble rotación izquierda.
Si la inserción se produce en el hijo izquierdo
del hijo derecho del nodo desequilibrado (o
viceversa) hay que realizar una doble
rotación izquierda.
3. Árboles

Árboles AVL (Equilibrados)


Ejemplos de árboles AVL

Ejemplos de árboles no AVL


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. Ejemplo 2, inserción:


insertar en un árbol B de orden 4.
CSDTAMPIBWNGURKEHOLJYQZFXV
3. Árboles
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.

Un fichero indizado estará dividido en dos partes:


 Conjunto secuencia
 Conjunto índice
El árbol B+ es una estructura de archivo formada por un
índice en forma de árbol B (conjunto índice) y un
conjunto secuencia.
3. Árboles

Árboles B+. El conjunto secuencia.


El bloque es la unidad básica de entrada/salida, y
cuando se lee o se escribe, se lee o escribe un
bloque entero.
Al cargar un bloque en RAM podemos manejar los
registros de una forma más rápida.
En cada bloque se guardará un campo de unión que
apunte al bloque siguiente y al precedente, de
forma que entre si estén doblemente enlazados.
3. Árboles

Á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+. El conjunto índice.


El conjunto índice es el que nos va a decir dónde
tenemos que buscar para encontrar una clave
determinada dentro del conjunto secuencia.
Podemos utilizar un árbol B para almacenar el
conjunto índice.
El árbol B y el conjunto secuencia forman una
estructura de archivo llamada árbol B+.
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.

Nivel Nodos Tamaño


Raíz 1 2k * cada nodo tiene 118 hijos
2º 118 118x2K = 236K
3º 118x118=13.924 13.924x2K = 27 MB
4º 1183 = 1,6 millones .... Consideramos que nivel 4
son las hojas

Los dos primeros niveles ocupan 236+2=238k y los


podemos tener en memoria RAM. Con esto sólo
hacemos dos accesos a disco (para el 3er y 4º nivel).
3. Árboles
 Árboles B+. Rendimiento.
Si consideramos que las hojas también están al 70%:
reg reg
10 × 0 .7 = 7 1183 × 7 = 11501224reg
bloque bloque

bytes
11501224reg × 200 = 2300244800bytes = 2.14Gb
reg

2.14 Gb de datos puramente dichos sin considerar ese


30% de desperdicio. Con 238k de RAM podemos indexar
un fichero de 2,30 Gb de datos llegando a cualquier dato
en 2 accesos a disco.
3. Árboles
 Árboles B+. Rendimiento.
Una fórmula para estimar cuántos bloques direccionar con una
memoria RAM determinada es:

bk
mem =
(fo) 2

donde MEM = RAM en bloques, bk = nº de bloques y fo =


fan-out medio (descendencia media).
3. Árboles
 Árboles B+. Rendimiento.
Para el ejemplo anterior y con 10 Mb de RAM:
kb
10 Mb = 10 Mb *1024 = 10240 Kb
Mb
10240 Kb
= 5120registros.
Kb
2
registro
bk bk
mem = ⇒ 5120 = ⇒ bk = 71290880registros
( fo )2
118 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.

También podría gustarte