Está en la página 1de 46

Universidad Nacional del Altiplano

Escuela de PosGrado
Doctorado en Estadística e Informática
Base de Datos 1
Tema 6: Diseño Físico de Bases de Datos

Docente: Dr. Milton López Cueva


Agenda

• Requerimientos para el almacenamiento de datos


• Estructuras de almacenamiento y archivos
• Árboles B, Árboles B+

2
Introducción

• El procesamiento de información en dispositivos


de almacenamiento secundario decrementa
significativamente la velocidad de un programa
– La transferencia de información de y hacia el disco se
encuentra en el orden de los milisegundos
– Por otro lado el procesamiento de los datos en la CPU
se cuentra en el orden de los microsegundos (1000
veces más rápido)
– Dependiendo de las caracteristicas de la CPU esta
podría procesar datos en el orden de los nanosegundos
(1000000 de veces más rápido)

DROZDEK, A. Data structures and algorithms in C++. 2. CA, USA: Brooks/Cole Publishing Co., 2001. 3
ISBN 0 534-37597-9.
Introducción

• Si un programa constantemente usa la información


almacenada en un dispositivo secundario, las
características del dispositivo deben ser tomadas
en cuenta cuando se diseña el programa
– Por ejemplo se puede usar un árbol binario de búsqueda
sobre los diferentes bloques del disco

DROZDEK, A. Data structures and algorithms in C++. 2. CA, USA: Brooks/Cole Publishing Co., 2001. 4
ISBN 0 534-37597-9.
Introducción

DROZDEK, A. Data structures and algorithms in C++. 2. CA, USA: Brooks/Cole Publishing Co., 2001. 5
ISBN 0 534-37597-9.
Introducción

• Cuando el árbol es usado frecuentemente en un


programa, los accesos a los bloques pueden
significativamente reducir el tiempo de ejecución
– Por otro lado, insertar y eliminar las llaves de búsqueda
en este árbol requerirá muchos accesos a los bloques de
datos
– El árbol binario de búsqueda, el cual es una estructura
eficiente cuando reside enteramente en la memoria,
resulta ser una carga
– Una mejor estrategia sería accesar una gran cantidad de
datos una vez que saltar de una posición del disco a otra
para recuperar pequeñas porciones de datos
DROZDEK, A. Data structures and algorithms in C++. 2. CA, USA: Brooks/Cole Publishing Co., 2001. 6
ISBN 0 534-37597-9.
Árboles B

7
Árboles B

• En el contexto de las bases de datos, donde los


datos son almacenados en el disco, la penalidad
por accesar a los datos en los dispositivos de
almacenamiento secundarios, puede ser
significantemente reducida por la apropiada
selección de la estructura de datos usada.
• En este contexto suelen utilizarse
– Árboles B
– Árboles B+

DROZDEK, A. Data structures and algorithms in C++. 2. CA, USA: Brooks/Cole Publishing Co., 2001. 8
ISBN 0 534-37597-9.
Árboles B

• Los árboles B operan de forma cercana a los


dispositivos de almacenamiento secundarios y
pueden ser configurados para reducir los
impedimentos impuestos por el dispositivo
– Una importante propiedad de los árboles B es que el
tamaño de cada nodo puede hacerse tan grande como el
tamaño de un bloque
– El número de llaves en un nodo puede variar
dependiendo del tamaño de la llave, organización de los
datos y por supuesto del tamaño del bloque
– El tamaño de los bloque varia de sistema a sistema, este
puede ser de 512 bytes, 4KB, etc.
DROZDEK, A. Data structures and algorithms in C++. 2. CA, USA: Brooks/Cole Publishing Co., 2001. 9
ISBN 0 534-37597-9.
Árboles multiway

• A diferencia de los árboles binarios, los árboles


multiway poseen m hijos
• Un árbol multiway de orden m posee las siguientes
características:
– Cada nodo posee m hijos y m-1 llaves de búsqueda
– Las llaves de búsqueda en cada nodo están ordenadas
en forma ascendente
– Las llaves de búsquedas en los primeros i hijos son
menores que la i-ésima llave des búsqueda
– Las llaves de búsqueda de los m-i hijos son mayores
que la i-ésima llave de búsqueda

DROZDEK, A. Data structures and algorithms in C++. 2. CA, USA: Brooks/Cole Publishing Co., 2001. 10
ISBN 0 534-37597-9.
árbol multiway de órden 4 / árbol 4-way

DROZDEK, A. Data structures and algorithms in C++. 2. CA, USA: Brooks/Cole Publishing Co., 2001. 11
ISBN 0 534-37597-9.
árbol multiway de órden 5 / árbol 5-way

KRUSE, R. L.; RYBA, A. J. Data Structures and Program Design in C++. New Jersey: Prentice Hall, 12
2000. ISBN 0–13–087697–6.
Árboles B

• Un árbol B de orden m es un árbol multiway con


las siguientes características:
– La raiz tiene por lo menos dos hijos al menos que este
sea una hoja
– Cada nodo que no sea la raiz y no sea una hoja
almacena k-1 llaves de búsqueda y k referencias a sus
hijos donde |m/2| ≤ k ≤ m
– Cada hoja almacena k-1 llaves de búsqueda donde
|m/2| ≤ k ≤ m
– Todas las hojas se encuentran en el mismo nivel

DROZDEK, A. Data structures and algorithms in C++. 2. CA, USA: Brooks/Cole Publishing Co., 2001. 13
ISBN 0 534-37597-9.
Árboles B

• De acuerdo con las características de un árbol B:


– Por lo menos está lleno a la mitad
– Posee pocos niveles
– Está perfectamente balanceado
• Un nodo de un árbol B es tipicamente
implementado usando una clase conteniendo
– Un arreglo de m-1 celdas para almacenar las llaves de
búsqueda
– Un arreglo de m celdas para almacenar las referencias a
sus hijos
– Información para facilitar el mantenimiento del árbol:
número de llaves almacenadas, es hoja?, etc

DROZDEK, A. Data structures and algorithms in C++. 2. CA, USA: Brooks/Cole Publishing Co., 2001. 14
ISBN 0 534-37597-9.
Árboles B

template <class T, int M>


class NodoArbolB{
private:
bool hoja;
int llaves_usadas;
T llaves[M-1];
NodoArbolB* hijos[M];
public:
NodoArbolB();
NodoArbolB(const T&);
};
DROZDEK, A. Data structures and algorithms in C++. 2. CA, USA: Brooks/Cole Publishing Co., 2001. 15
ISBN 0 534-37597-9.
Árboles B de orden 5

DROZDEK, A. Data structures and algorithms in C++. 2. CA, USA: Brooks/Cole Publishing Co., 2001. 16
ISBN 0 534-37597-9.
Inserción de una llave en un árbol B

• Tanto la inserción como la eliminación de una


llave en un árbol B son tareas no triviales debido a
que todas las hojas deben encontrarse en el último
nivel
– Ni siquiera los árboles binarios de búsqueda
balanceados tienen esta restricción

DROZDEK, A. Data structures and algorithms in C++. 2. CA, USA: Brooks/Cole Publishing Co., 2001. 17
ISBN 0 534-37597-9.
Inserción de una llave en un árbol B

• La implementación de la inserción se convierte en


una tarea sencilla cuando la estrategia de
construcción del árbol es cambiada
– Cuando se inserta en un árbol binario de búsqueda, el
árbol es siempre construído a partir de arriba hacia
abajo, resultando en un árbol desbalanceado
– Si la primera llave en llegar es la menor de todas, esta
será colocada en la raiz, y esta raiz nunca tendrá un hijo
izquierdo
– En este caso se tendría que realizar una serie de
operaciones para dejar el árbol balanceado (rotación
simple/doble a la derecha o izquierda)
DROZDEK, A. Data structures and algorithms in C++. 2. CA, USA: Brooks/Cole Publishing Co., 2001. 18
ISBN 0 534-37597-9.
Inserción de una llave en un árbol B

• Un árbol puede también ser construído desde abajo hacia


arriba, de esta forma solamente al final de todas las
inserciones se podrá conocer el contenido de la raiz
– Esta es la estrategia usada para realizar las inserciones en un
árbol B
– En esta estrategia , dada una llave a ser insertada, se va
directamente a una hoja y se coloca la llave en ella, si existe
espacio
– Cuando la hoja se llena, otra hoja es creada y las llaves son
divididas entre las dos hojas, y una llave es promovida al
padre
– Si el padre se llena, el proceso se repite hasta que la nueva
raiz es creada

DROZDEK, A. Data structures and algorithms in C++. 2. CA, USA: Brooks/Cole Publishing Co., 2001. 19
ISBN 0 534-37597-9.
Inserción de una llave en un árbol B

• Para manejar la inserción de un llave en un árbol


B, se tienen que analisar 3 situaciones comunes:
– La llave es almacenada en una hoja en donde todavía
existe espacio
– La hoja en donde la llave debe ser almacenada se
encuentra llena
– La raiz del árbol está llena

DROZDEK, A. Data structures and algorithms in C++. 2. CA, USA: Brooks/Cole Publishing Co., 2001. 20
ISBN 0 534-37597-9.
Inserción de una llave en un árbol B

• La llave es almacenada en una hoja en donde


todavía existe espacio
– Es el caso más simple.
– La llave a insertar se coloca en el nodo manteniendo el
orden ascendente
– La siguiente figura presenta un árbol B de orden 5, en
donde se desea insertar la llave 7

DROZDEK, A. Data structures and algorithms in C++. 2. CA, USA: Brooks/Cole Publishing Co., 2001. 21
ISBN 0 534-37597-9.
Inserción de una llave en un árbol B

• La llave es almacenada en una hoja en donde


todavía existe espacio
– Se mueve la llave 8 una posición a la derecha para
mantener el orden en la hoja

DROZDEK, A. Data structures and algorithms in C++. 2. CA, USA: Brooks/Cole Publishing Co., 2001. 22
ISBN 0 534-37597-9.
Inserción de una llave en un árbol B

• La hoja en donde la llave debe ser almacenada se


encuentra llena
– En este caso la hoja es dividida, creándose una nueva
hoja, la mitad de las llaves son movidas de la hoja llena
a la nueva hoja
– La nueva hoja ahora tiene que ser incorporada dentro
del árbol B
– La última llave de la hoja antigua es movida al padre y
la referencia a la nueva hoja es almacenada en el padre

DROZDEK, A. Data structures and algorithms in C++. 2. CA, USA: Brooks/Cole Publishing Co., 2001. 23
ISBN 0 534-37597-9.
Inserción de una llave en un árbol B

• La hoja en donde la llave debe ser almacenada se


encuentra llena
– A continuación se presenta un árbol B, en donde se
desea insertar la llave 6

DROZDEK, A. Data structures and algorithms in C++. 2. CA, USA: Brooks/Cole Publishing Co., 2001. 24
ISBN 0 534-37597-9.
Inserción de una llave en un árbol B

• La hoja en donde la llave debe ser almacenada se


encuentra llena
– La hoja en donde se debe insertar la llave 6 se
encuentra llena, se procede crear una nueva hoja, la
cual todavía no se ha vinculado al árbol

DROZDEK, A. Data structures and algorithms in C++. 2. CA, USA: Brooks/Cole Publishing Co., 2001. 25
ISBN 0 534-37597-9.
Inserción de una llave en un árbol B

• La hoja en donde la llave debe ser almacenada se


encuentra llena
– Se actualiza el padre de las hojas, incluyendo la última
llave de la hoja antigua de forma ordenada y creando la
referencia a la nueva hoja

DROZDEK, A. Data structures and algorithms in C++. 2. CA, USA: Brooks/Cole Publishing Co., 2001. 26
ISBN 0 534-37597-9.
Inserción de una llave en un árbol B

• La raiz del árbol está llena


– En este caso una nueva raiz y un nuevo hermano de la
existente raiz debe ser creada
– Esta división resulta en la creación de dos nuevos nodos
en el árbol B

DROZDEK, A. Data structures and algorithms in C++. 2. CA, USA: Brooks/Cole Publishing Co., 2001. 27
ISBN 0 534-37597-9.
Inserción de una llave en un árbol B

• La raiz del árbol está llena


– A continuación se presenta un árbol B, en donde se
desea insertar la llave 13

DROZDEK, A. Data structures and algorithms in C++. 2. CA, USA: Brooks/Cole Publishing Co., 2001. 28
ISBN 0 534-37597-9.
Inserción de una llave en un árbol B

• La raiz del árbol está llena


– Se inserta la llave 13 en una nueva hoja

DROZDEK, A. Data structures and algorithms in C++. 2. CA, USA: Brooks/Cole Publishing Co., 2001. 29
ISBN 0 534-37597-9.
Inserción de una llave en un árbol B

• La raiz del árbol está llena


– Como el padre está lleno, se divide en dos hojas

DROZDEK, A. Data structures and algorithms in C++. 2. CA, USA: Brooks/Cole Publishing Co., 2001. 30
ISBN 0 534-37597-9.
Inserción de una llave en un árbol B

• La raiz del árbol está llena


– Se crea una nueva raiz usando la última llave de la que
era la raiz antigua

DROZDEK, A. Data structures and algorithms in C++. 2. CA, USA: Brooks/Cole Publishing Co., 2001. 31
ISBN 0 534-37597-9.
Inserción de una llave en un árbol B
InsertaEnArbolB (K)
encontrar la hoja nodo para insertar K
fin ← falso
mientras fin=false hacer
si nodo no está lleno
insertar K en la hoja nodo
fin ← true
caso contrario
dividir nodo en nodo1 y nodo2
distribuir las llaves y referencias a los nodos nodo1 y nodo2
K ← última llave del nodo1
si nodo era la raiz del árbol
crear una nueva raiz como padre de nodo1 y nodo2
insertar K en la nueva raiz
actualizar las referencias de la nueva raiz
fin ← true
caso contrario
nodo ← el padre del nodo
fin mientras

DROZDEK, A. Data structures and algorithms in C++. 2. CA, USA: Brooks/Cole Publishing Co., 2001. 32
ISBN 0 534-37597-9.
Eliminación de una llave en un árbol B

• En la eliminación existen dos casos que tienen que


analisarse:
– La eliminación de una llave a partir de una hoja
– La eliminación de una llave a partir de un nodo que no
es una hoja

DROZDEK, A. Data structures and algorithms in C++. 2. CA, USA: Brooks/Cole Publishing Co., 2001. 33
ISBN 0 534-37597-9.
Eliminación de una llave en un árbol B

• La eliminación de una llave a partir de una hoja


– Si después de eliminar una llave K, la hoja tiene por lo
menos la mitad de elementos llenos, solamente las
llaves mayores que K son movidas a la izquierda para
llenar el vacio dejado por la eliminación de la llave K

DROZDEK, A. Data structures and algorithms in C++. 2. CA, USA: Brooks/Cole Publishing Co., 2001. 34
ISBN 0 534-37597-9.
Eliminación de una llave en un árbol B

• La eliminación de una llave a partir de una hoja

DROZDEK, A. Data structures and algorithms in C++. 2. CA, USA: Brooks/Cole Publishing Co., 2001. 35
ISBN 0 534-37597-9.
Eliminación de una llave en un árbol B

• La eliminación de una llave a partir de una hoja


– Si después de eliminar K, el número de llaves en la hoja
es menor que |m/2|-1
• Si existen hermanos con que poseen un número de
llaves que exceden el mínimo|m/2|-1, entonces todas
las llaves de la hoja y su hermano son redistribuidos
entre ellos moviendo la llave que los separa del
padre a la hoja y moviendo una llave del hermano al
padre

DROZDEK, A. Data structures and algorithms in C++. 2. CA, USA: Brooks/Cole Publishing Co., 2001. 36
ISBN 0 534-37597-9.
Eliminación de una llave en un árbol B

• La eliminación de una llave a partir de una hoja

DROZDEK, A. Data structures and algorithms in C++. 2. CA, USA: Brooks/Cole Publishing Co., 2001. 37
ISBN 0 534-37597-9.
Eliminación de una llave en un árbol B

• La eliminación de una llave a partir de una hoja


– Si después de eliminar K, el número de llaves en la hoja
es menor que |m/2|-1
• Si el número de llave de sus hermanos es |m/2|-1,
entonce la hoja y el hermano son fusionados
• Las llaves de la hoja, del hermano y la llave que los
separa del padre, son colocados en la hoje y el
hermano se elimina

DROZDEK, A. Data structures and algorithms in C++. 2. CA, USA: Brooks/Cole Publishing Co., 2001. 38
ISBN 0 534-37597-9.
Eliminación de una llave en un árbol B

• La eliminación de una llave a partir de una hoja

DROZDEK, A. Data structures and algorithms in C++. 2. CA, USA: Brooks/Cole Publishing Co., 2001. 39
ISBN 0 534-37597-9.
Eliminación de una llave en un árbol B

• La eliminación de una llave a partir de una hoja


– Un caso particular resulta en fusionar un nodo hoja o
nodo no hoja con su hermano cuando el padre es la raiz
que contiene solamente una llave
– En este caso las llaves del nodo y su hermano,
juntamente con la llave de la raiz son colocadas en un
nuevo nodo que se convierte en la nueva raiz del árbol
y tanto el hermano cuanto la antigua raiz son
eliminados
– Este es el único caso en que dos nodos desaparecen al
mismo tiempo
– Además la altura del árbol se decremente en uno
DROZDEK, A. Data structures and algorithms in C++. 2. CA, USA: Brooks/Cole Publishing Co., 2001. 40
ISBN 0 534-37597-9.
Eliminación de una llave en un árbol B

• La eliminación de una llave a partir de una hoja

DROZDEK, A. Data structures and algorithms in C++. 2. CA, USA: Brooks/Cole Publishing Co., 2001. 41
ISBN 0 534-37597-9.
Eliminación de una llave en un árbol B

• La eliminación de una llave a partir de un nodo


que no es una hoja
– La llave eliminada solo puede ser reemplazada por su
inmediado sucesor o predecesor, el cual solo se puede
encontrar en una hoja
– El sucesor o predeceso es eliminado de la hoja

DROZDEK, A. Data structures and algorithms in C++. 2. CA, USA: Brooks/Cole Publishing Co., 2001. 42
ISBN 0 534-37597-9.
Eliminación de una llave en un árbol B

• La eliminación de una llave a partir de un nodo


que no es una hoja

DROZDEK, A. Data structures and algorithms in C++. 2. CA, USA: Brooks/Cole Publishing Co., 2001. 43
ISBN 0 534-37597-9.
EliminaDeArbolB(K, raiz)
nodo ← busqueda(K, raiz)
si nodo no es nulo
si nodo no es una hoja
S ← sucesor de K
copiar S sobre K en el nodo
nodo ← hoja que contiene S
elimnar S del nodo
caso contrario
elimnar K del nodo
fin ← falso
Mientras fin = false hacer
si la cantidad de elementos del nodo ≥ |m/2|-1
fin ← true
caso contrario
si existe un hermano del nodo con suficientes llaves
redistribuir las llaves entre el hermano y el nodo
fin ← true
caso contrario
si el padre del nodo es la raiz
si el padre tiene una sola llave
fusionar nodo, padre y hermano para formar una nueva raiz
caso contrario
fusionar nodo y su hermano
fin ← true
else
fusionar nodo y su hermano
nodo ← padre del nodo
Ejercicio 1
• Se tiene un árbol de orden 4, diseñar el esquema que
representa el árbol B que resulta luego de insertar las
siguientes llaves de búsqueda K, en el siguiente orden
(el árbol inicialmente se encuentra vacio)
a)K=20 i)K=15
b)K=30 j)K=7
c)k=40 k)k=6
d) k=35 l) k=1
e)K=36 m)K=4
f)K=25 n)K=8
g)k=22 ñ)k=18
h) k=5 o) k=50
Ejercicio 2
• Dado el árbol resultante de la pregunta anterior, se
solicita que diseñe el esquema del árbol B que resulta
de eliminar las siguientes llaves de búsqueda K, en el
siguiente orden.

a) K=40
b)K=1
c)k=6
d) k=35
e) k=25

También podría gustarte