GESTIÓN DE DATOS 2012
- Clase 2 -
1
Búsqueda de información. Manejo
de índices
Cuando se realiza la búsqueda de un dato, se
deben considerar:
• La cantidad de accesos a disco en pos de
encontrarlo. Costo alto.
• La cantidad de comparaciones. Costo
relativamente bajo (despreciable).
2
Búsqueda de información. Manejo
de índices
El proceso de búsqueda implica un análisis de
situaciones en función del tipo de archivo sobre el
que se quiere buscar información:
• Archivo sin orden preestablecido (peor caso N
accesos).
• Archivo físicamente ordenado y el argumento
de búsqueda coincide con el criterio de
ordenación (peor caso N accesos).
• Archivo físicamente ordenado y registros de
longitud fija (peor caso log2 (N) + 1).
3
Búsqueda de información. Manejo
de índices
Supongamos ahora que tenemos el problema de encontrar libros en una biblioteca por autor, título o tema.
• Compramos 3 copias de cada libro y 3 edificios de biblioteca separados. Edificio1: libros ordenados por autor; edificio 2: libros ordenados por título, y Edificio 3: libros ordenados por tema (absurdo).
Supongamos que tenemos el problema de buscar un tema en un libro, ¿cómo lo resolvemos?
• Recorremos página por página.
• Utilizamos el índice temático.
4
Búsqueda de información. Manejo
de índices
Índice: Estructura de datos adicional que permite agilizar el acceso a la información almacenada en un archivo.
En el índice se almacenan las claves de los registros del archivo, junto con la referencia de acceso a cada registro asociado a la clave. Es necesario que las claves permanezcan ordenadas.
El índice es otro archivo con registros de longitud fija, independiente de la estructura del archivo original.
5
Búsqueda de información. Manejo
de índices
Un índice posibilita imponer un orden en un archivo
sin que realmente este se reacomode.
Índice, ¿cómo se genera y mantiene?
Índice primario: Creado a partir de la clave
primaria.
Trabajemos con el siguiente archivo de datos,
organizado con registros de longitud variable.
6
Búsqueda de información. Manejo
de índices
Dir. Reg. Cía. Código Título Grupo musical
compositor Interprete
15 WAR 23 Early Morning A-ha A-ha
36 SON 13 Just a Like a Corner Cock Robin Cock Robin
83 BMG 11 Selva La Portuaria La Portuaria
118 SON 15 Take on Me A-ha A-ha
161 VIR 2310 Land of Confusion Genesis Phil Colins
209 VIR 1323 Summer Moved On A-ha A-ha
248 AME 2323 Africa Toto Toto
275 RCA 1313 Leave of Ney York REM REM
313 ARI 2313 Here Come The Rain Aigan Eurythmics Anni lennox
7
Búsqueda de información. Manejo
de índices
Con los datos anteriores, formamos la clave
primaria con los atributos Cía + Código.
Al crearse el archivo, se creará el índice primario
asociado.
Veamos cómo queda armado en índice primario.
8
Búsqueda de información. Manejo
de índices
Clave Ref.
AME2323 248
ARI2313 313
BMG11 83
RCA1313 275
SON13 36
SON15 118
VIR1323 209
VIR2310 161
WAR23 15
9
Búsqueda de información. Manejo
de índices
Teniendo creado el índice primario, hay que
considerar las siguientes operaciones:
• Altas.
• Modificaciones.
• Bajas.
10
Búsqueda de información. Manejo
de índices
Retomando nuestro ejemplo, ¿cuántos de Uds.
buscarían al grupo musical de la canción “África”
por la clave primaria VIR1323?
No es natural ni intuitivo solicitar un dato por clave
primaria, sino por otros atributos (por ej. nombre de
canción o grupo musical). Estos atributos podrían
contener valores repetidos en el archivo original,
por lo tanto no pueden ser clave primaria.
11
Búsqueda de información. Manejo
de índices
Clave secundaria: Clave que soporta valores repetidos.
Es necesario crear otro tipo de índice para acceder a la información de un archivo, pero con datos fáciles de recordar.
Índice secundario: Estructura adicional que permite relacionar una clave secundaria con una o más claves primarias.
A continuación se presenta un índice secundario.
12
Búsqueda de información. Manejo
de índices
Clave Secundaria Clave primaria
A-ha SON15
A-ha VIR1323
A-ha WAR23
Cock Robin SON13
Eurythmics ARI2313
Genesis VIR2310
La Portuaria BMG11
REM RCA1313
Toto AME2323
13
Índices: Problemas
• Índices grandes -> memoria secundaria.
• Acceso a memoria secundaria -> lento.
• Búsqueda binaria -> demasiados desplaza-mientos.
En un índice de 1000 ítems se requieren, aproximadamente, 9.5 desplazamientos en promedio.
• Costo de mantener índice ordenado.
14
Búsqueda de información. Manejo
de índices
Árboles 15
Un árbol es una estructura que se caracteriza por
estar formada por una serie de nodos conectados
por una serie de aristas que verifican que:
• Hay un único nodo raíz.
• Cada nodo, excepto la raíz, tiene un único
padre.
• Hay un único camino (desde la raíz hasta cada
nodo).
Las estructuras tipo árbol presentan algunas
mejoras tanto para la búsqueda como para el
mantenimiento del orden de la información.
Los árboles binarios representan la alternativa más
simple.
Árbol binario: Estructura de datos dinámica no lineal,
en la cual cada nodo puede tener a lo sumo dos hijos.
Árboles 16
Árboles binarios 17
GT
KL HI CD AB ZR TR RX OP
MN
ST
UV PR JF BC
Búsqueda: La performance para buscar un
elemento es del orden log2 (N) accesos a disco,
siendo N la cantidad de nodos (elementos de
datos) que contiene el árbol.
Inserción: Se deben realizar log2 (N) lecturas,
necesarias para localizar al padre del nuevo
elemento, y dos operaciones de escritura.
Borrado: Deben realizarse log2 (N) lecturas para
localizar el dato a eliminar y luego dos escrituras.
Árboles binarios 18
Para poder utilizar un árbol como soporte de
índices de búsqueda, es necesario que se implanten
sobre almacenamiento secundario.
El registro contendrá tres campos: elemento,
hijo_izquierdo e hijo_derecho (sus valores indican el
NRR del hijo dentro del archivo).
Árboles binarios 19
20
MN 1 2
GT 3 4
ST 8 11
BC 5 6
JF 7 14
AB -1 -1
CD -1 -1
HI -1 -1
PR 9 10
OP -1 -1
RX -1 -1
UV 12 13
TR -1 -1
ZR -1 -1
KL -1 -1
Raíz -> 0 Hijo Hijo
Clave Izq. Der.
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
¿Qué sucedería si insertamos las claves NI, OC, OA
y NZ?
• La performance de búsqueda decae,
transformándose en orden lineal.
¿En qué situaciones un árbol binario resulta una
buena organización para un índice?
• La respuesta es cuando el árbol binario está
balanceado.
Árboles binarios 21
AVL: Es un árbol binario de búsqueda balanceado en
altura, en el cual la máxima diferencia entre las alturas
de cualquiera de dos subárboles que tiene raíz común
no supera uno.
Para lograr el balanceo, los costos computacionales
de acceso a disco aumentan considerablemente,
por lo que su implantación deja de ser viable.
AVL 22
¿Por qué quedarnos sólo con árboles binarios?
¿Cómo sería los árboles ternarios?
Árboles multicamino 23
34 95
99 95 60 76
85 90 40 95
10 30
15 95
Árbol multicamino: Estructura de datos en la cual cada
nodo puede contener k elementos y k+1 hijos.
Se define el concepto de orden de un árbol
multicamino como la cantidad de descendientes
directos posibles de un nodo.
El orden del árbol dependerá del tamaño de la
página y de los elementos que se coloquen en ella.
Aún queda latente el problema del balanceo.
Árboles multicamino 24
Los árboles B son árboles multicamino con una construcción especial que permite mantenerlos balanceados a bajo costo.
Un árbol B de orden M posee las siguientes propiedades:
1. Cada nodo del árbol puede contener, como máximo, M descendientes directos.
2. La raíz no posee descendientes directos o tiene al menos dos.
3. Un nodo con x descendientes directos contiene x-1 elementos.
4. Los nodos hojas tienen, como mínimo, [M/2]-1 elementos, y como máximo, M-1 elementos.
5. Los nodos no hojas ni raíz tienen, como mínimo, [M/2] descendientes directos.
6. Todos los nodos hojas se encuentran al mismo nivel.
Árboles B 25
El formato gráfico de un nodo para un árbol B de orden M será:
Por lo tanto, cada registro del archivo contendrá:
• Un arreglo con las direcciones de los nodos que son descendientes directos.
• Un arreglo ordenado con las claves que forman el índice del árbol.
• Un valor entero que indica la cantidad efectiva de claves.
Árboles B 26
P0 Dato 1 P1 Dato 2 P2 … PM-1 Dato M-1 PM
Crear/Insertar.
Buscar.
Borrar.
Modificar (se asume como una baja del elemento
anterior y un alta del nuevo elemento).
Árboles B 27
Performance de la búsqueda: Se requieren como
máximo H accesos para localizar un dato o para
determinar que no se encuentra, siendo H la altura
del árbol. ¿Cómo acotamos h?
Nivel # mínimo de descendientes
1 2
2 2 * [M/2]
3 2 * [M/2] * [M/2]
………………………………………………….
h 2 * [M/2]h-1
Árboles B 28
Axioma: “Un árbol B asociado a un archivo de datos que contiene N registros contendrá un total de N+1 punteros nulos en sus nodos terminales”.
Por lo tanto:
N+1 >= 2 * [M/2]h-1
h <= 1 + log[M/2] ((N+1)/2)
Por ejemplo, para M = 512 y N = 1.000.000 h <= 3,37 (en el peor caso, con 4 lecturas se
encuentra un registro)
Árboles B 29
Performance de la inserción:
• Estudios empíricos realizados han demostrado que,
generando árboles B de orden M=10, la cantidad de
overflow es de 25% aproximadamente. En tanto, si el
orden es de M=100, la cantidad de overflow se
reduce al 2%. Analizando esta última situación, 98 de
cada 100 inserciones se tratan por el mejor caso.
Árboles B 30
Mejor caso Peor caso
Cantidad de lecturas H H
Cantidad de escrituras 1 (2*H) + 1
Performance de la eliminación:
• El peor caso está dado cuando el borrado necesite
concatenar. La concatenación implica leer un nodo
adyacente hermano. Por cada nivel que se deba
concatenar habrá dos lecturas, salvo en la raíz. La
cantidad de escrituras se limita a una por nivel.
Árboles B 31
Mejor caso Peor caso
Cantidad de lecturas H 2*H - 1
Cantidad de escrituras 1 H - 1
Árboles B* 32
Representan una variante sobre los árboles B, produciendo nodos completos en 2/3 en vez de nodos con sólo la mitad de los elementos.
Un árbol B* de orden M posee las siguientes propiedades: 1. Cada nodo del árbol puede contener, como máximo, M descendientes.
2. La raíz no posee descendientes directos o tiene al menos dos.
3. Un nodo con x descendientes directos contiene x-1 elementos.
4. Los nodos hojas tienen, como mínimo, [(2M-1)/3] elementos, y como máximo, M-1 elementos.
5. Los nodos no hojas ni raíz tienen, como mínimo, [(2M-1)/3] descendientes.
6. Todos los nodos hojas se encuentran al mismo nivel.
Árboles B* 33
Búsqueda: Como en el árbol B.
Inserción: Antes de dividir se intenta redistribuir. Hay cuatro casos posibles: • Derecha: Redistribuir con nodo adyacente
hermano de la derecha (o izquierda si es el último).
• Izquierda
• Derecha o izquierda: Si el nodo de la derecha está lleno y no se puede redistribuir, se busca el de la izquierda.
• Izquierda o derecha.
Borrado: Como en el árbol B.
Performance de la inserción: Dependerá de cada
política. Ante la ocurrencia de overflow, como
mínimo cada una de las políticas requiere dos
lecturas (el nodo que se satura y un hermano) y tres
escrituras (cada nodo hijo y el padre.
En caso de necesitar realizar una división, se
requieren cuatro escrituras (el nodo padre, los dos
nodos que estaban completos y el nuevo que se
genera).
Árboles B* 34
Árboles B+ 35
Un archivo con acceso secuencial indizado es aquel que permite dos formas para visualizar la información:
• Indizada: El archivo puede verse como un conjunto de registros accedidos por una clave.
• Secuencial: Se puede acceder secuencialmente a la información ordenada por dicha clave.
Los árboles B o B* permiten la localización rápida de registros, pero si se requiere mucho acceso secuencial a través del orden de las claves, la solución resulta muy ineficiente.
Árboles B+ 36
Un árbol B+ es una árbol B que incorpora la siguiente propiedad: 7. Los nodos hojas representan un conjunto de datos y son enlazados entre ellos.
Está compuesto por dos partes:
• Índice: Nodos interiores.
• Secuencia: Páginas hojas enlazadas secuencial-mente en las que se repiten las claves anteriores.
Árboles B+ 37
Árboles B+ 38
Todas las claves se encuentran en las hojas (duplicándose en la raíz y nodos interiores, aquellas necesarias para definir los caminos de búsqueda).
Las hojas están vinculadas, obteniéndose de ese modo una trayectoria secuencial para recorrer las claves del árbol.
Ocupan más espacio que los árboles B (ya que algunas claves se encuentran más de una vez en el árbol).
Árboles B+ 39
Búsqueda: La búsqueda no debe detenerse cuando se encuentre la clave en la raíz o nodo interior, sino que debe seguir en la página apuntada por la rama derecha de dicha clave.
Árboles B+ 40
Inserción: El proceso de inserción es similar al de los árboles B, excepto cuando se desea insertar una clave en donde la página se encuentra llena.
• Cuando se inserta una nueva clave en una nueva página llena, ésta se divide también en otras dos, pero ahora la primera contendrá m/2 claves y la segunda 1+m/2 y lo que subirá al padre será una copia de la clave central.
Árboles B+ 41
Para M=5, supongamos el siguiente nodo inicial Se inserta 15
10 25 29 31
10 15 55 80 25 29 31 80
25 20 55 80
Árboles B+ 42
Inserción clave 13
• En caso de dividir un nodo no terminal, se debe promocionar hacia el padre el elemento en sí y no una copia del mismo.
Árboles B+ 43
Eliminación: Este proceso es más simple que en los árboles B, porque todas las claves se encuentran en las páginas hojas.
• Las claves de la raíz o nodos internos no se modifican pues siguen siendo un separador válido entre las claves de las páginas descendientes.
• Si al eliminar la clave (siempre en una hoja) la cantidad de claves < m/2, es necesario una fusión y redistribución de las mismas, en las hojas y el índice.
Árboles B+ 44
Árboles B+ 45
Familia de árboles B - Conclusiones 46
Tiene una gran aplicabilidad en situaciones en las que resulta necesario acceder a un archivo tanto para búsquedas aleatorias eficientes como para acceso secuencial.
En particular, los árboles B* mejoran la eficiencia de los árboles B, aumentando la cantidad mínima de elementos en cada nodo y, por consiguiente, ayudando a disminuir la altura final del árbol (a costa de operaciones de inserción un poco más lentas).
En los árboles B+, toda la información de las claves está contenida en los nodos terminales. Los nodos no terminales actúan como separadores, y poseen una copia de los elementos contenidos en los nodos terminales.