Indexación y Asociación
Database System Concepts, 5th Ed. ©Silberschatz, Korth and Sudarshan See www.db-book.com for conditions on re-use
Capitulo 3: Indexación y Asociación Conceptos Básicos
Índices Ordenados Archivos de Índices de Árbol B+ Archivos con Índices de Árbol B
Asociación estática Asociación dinámica Comparación de la Indexación ordenada y la Asociación Definición de Índices en SQL Accesos multiclave
Database System Concepts - 5th Edition, Oct 4, 2006
12.2
©Silberschatz, Korth and Sudarshan
Conceptos básicos El mecanismo de Indexado es utilizado para el acceso rápido a datos
solicitados.
Ejemplo., Índice de libros
Los atributos o conjunto de atributos usados para buscar en un
archivo se llaman claves de búsqueda Un Archivo de Índice consiste en registros (llamados Entrada de
Índices) de la forma: Puntero
Clave de búsqueda Hay dos tipos básicos de Índices:
Índices ordenados: Estos índices están basados en una disposición ordenada de los valores.
Índices asociativos: (hash Índices). Estos índices están basados en una distribución uniforme de los valores a través de una serie de cajones (buckets). El valor asignado a cada cajón está determinado por una función, llamada función de asociación (hash function).
Database System Concepts - 5th Edition, Oct 4, 2006
12.3
©Silberschatz, Korth and Sudarshan
Criterios de validación de las técnicas de Indexado Tipos de acceso
búsqueda de registros con un valor concreto en un atributo
buscar los registros cuyos atributos contengan valores en un rango especificado.
Tiempo de acceso Tiempo de inserción
Tiempo en buscar un espacio libre
Tiempo en actualizar la estructura
Tiempo de borrado
Tiempo en buscar el elemento a eliminar
Tiempo en actualizar la estructura
Espacio adicional requerido
Database System Concepts - 5th Edition, Oct 4, 2006
12.4
©Silberschatz, Korth and Sudarshan
Índices ordenados Un Índice ordenado almacena de manera ordenada los valores de
las claves de búsqueda, y asocia a cada clave los registros que contienen esa clave de búsqueda. Si el archivo que contiene los registros está ordenado
secuencialmente, el índice cuya clave de búsqueda especifica el orden secuencial del archivo es el Índice primario.
Los Índices primarios también se llaman Índices con Agrupación (clustering Index)
La clave de búsqueda de un índice primario es normalmente la clave primaria, aunque no es así necesariamente.
Los índices cuyas claves de búsqueda especifican un orden diferente
del orden secuencial del archivo se llaman Índices secundarios o Índices sin agrupación (non clustering Index). Los archivos que están ordenados secuencialmente según alguna
clave de búsqueda, estos archivos con Índice primario según una clave de búsqueda se llaman Archivos secuenciales indexados.
Database System Concepts - 5th Edition, Oct 4, 2006
12.5
©Silberschatz, Korth and Sudarshan
Índice de archivos densos
Índice denso. Aparece un registro índice por cada valor de la clave de búsqueda en el archivo.
El registro índice contiene el valor de la clave de búsqueda y un puntero al primer registro con ese valor de la clave de búsqueda. El resto de los registros con la misma clave de búsqueda se almacena consecutivamente después del primer registro dado que son archivos secuenciales indexados en base a la clave de búsqueda.
Sobre archivos secuenciales indexados Database System Concepts - 5th Edition, Oct 4, 2006
12.6
©Silberschatz, Korth and Sudarshan
Índice de archivos dispersos
Índice disperso. Sólo se crea un registro Índice para algunos de los valores.
Para localizar un registro se busca la entrada del Índice con el valor más grande que sea menor o igual que el valor que se está buscando.
Se empieza por el registro apuntado por esa entrada del índice y se continúa con los punteros del archivo hasta encontrar el registro deseado
Sobre archivos secuenciales indexados
Database System Concepts - 5th Edition, Oct 4, 2006
12.7
©Silberschatz, Korth and Sudarshan
Índice de archivos dispersos (Cont.) Comparando con los Índices densos:
Uso de menos espacios, y menos sobrecarga de mantenimiento para insertar y eliminar.
Generalmente mas lento que el Índice denso en localizar registro.
Existe un compromiso que el diseñador del sistema debe mantener
entre el tiempo de acceso el espacio adicional requerido. Buen compromiso: Es tener un índice disperso con una entrada del
índice por cada bloque del archivo, Correspondiente al menor valor de la clave de búsqueda en el bloque.
Sobre archivos secuenciales indexados
Database System Concepts - 5th Edition, Oct 4, 2006
12.8
©Silberschatz, Korth and Sudarshan
Índice multinivel Si el Índice primario no cabe en la memoria principal, el acceso
a las entradas de índice se hacen costosas. Solución: Guardar el Índice primario en el Disco como un
archivo secuencial y construir un Índice disperso sobre él.
Índices externos – un Índice disperso del Índice primario.
Índices internos – archivo del Índice primario.
Si un Índice externo es demasiado inadecuado en la memoria
principal, todavía podemos crear otro nivel de Índice y así sucesivamente. Los Índices de todos los niveles deben ser actualizados en la
inserción o eliminación en el archivo.
Database System Concepts - 5th Edition, Oct 4, 2006
12.9
©Silberschatz, Korth and Sudarshan
Índice multinivel (Cont.)
Sobre archivos secuenciales indexados
Database System Concepts - 5th Edition, Oct 4, 2006
12.10
©Silberschatz, Korth and Sudarshan
Actualización del Índice: Borrado Si el registro borrado es el único registro en el archivo con su particular
clave de búsqueda, la clave de búsqueda es borrado del Índice también. Borrado del Índice en un nivel simple:
Índice denso – Borrado de la clave de búsqueda similar a la eliminación de un registro de Archivo.
Índice disperso –
si una entrada para la clave de búsqueda existe en el índice, se elimina mediante la sustitución de la entrada en el índice con el siguiente valor de clave de búsqueda en el archivo (en orden de búsqueda de clave).
Si el siguiente valor de clave de búsqueda ya tiene una entrada de índice, se suprime la entrada en lugar de ser sustituido.
Sobre archivos secuenciales indexados Database System Concepts - 5th Edition, Oct 4, 2006
12.11
©Silberschatz, Korth and Sudarshan
Actualización del Índice: Inserción Inserción en un nivel simple de Índice:
Primero se realiza una búsqueda usando el valor de la clave de búsqueda del registro a insertar. Luego se emprenden las siguientes acciones:
Índices densos – Si el valor de la clave de búsqueda no aparece en el índice, el sistema inserta en éste un registro índice con el valor de la clave de búsqueda en la posición adecuada.
Índices dispersos – Se asume que el índice almacena una entrada por cada bloque. Si el sistema crea un bloque nuevo, inserta el primer valor de la clave de búsqueda (en el orden de la clave de búsqueda) que aparezca en el nuevo bloque del índice.
Los algoritmos de inserción y borrado para los índices multinivel se
extienden de manera sencilla a partir del esquema descrito anteriormente.
Sobre archivos secuenciales indexados Database System Concepts - 5th Edition, Oct 4, 2006
12.12
©Silberschatz, Korth and Sudarshan
Índices Secundarios Con frecuencia, se quiere encontrar todos los registros cuyos
valores en un determinado campo (que no es la clave de búsqueda del Índice primario) cumplan con alguna condición.
Ejemplo 1: En la relación cuenta los registros se almacenan de forma secuencial por número de cuenta, es posible que desea buscar todas las cuentas de una sucursal en particular.
Ejemplo 2: Del anterior, queremos encontrar todas las cuentas con un saldo o rango de saldos.
No es recomendable hacer una búsqueda registro por registro.
Podemos tener un índice secundario con un registro de índice para
cada valor de clave de búsqueda.
Database System Concepts - 5th Edition, Oct 4, 2006
12.13
©Silberschatz, Korth and Sudarshan
Ejemplo de Índice Secundario
Índice secundario en el campo saldo de la relación cuenta
El registro de Índices apunta a un cajón que contiene los punteros a
todos los registros actuales con un valor particular de clave de búsqueda esto cuando la clave de búsqueda no es clave candidata. (nivel adicional de referencia) Los Índices secundarios tienen que ser densos. Database System Concepts - 5th Edition, Oct 4, 2006
12.14
©Silberschatz, Korth and Sudarshan
Índices Primarios y Secundarios Los Índices ofrecen beneficios sustanciales en la búsqueda de
registros. PERO: la actualización de los índices provoca una sobrecarga en la
base de datos - cuando se modifica un archivo, todos los índices en el archivo debe ser actualizado, Escanear secuencialmente utilizando Índices Primarios es eficiente,
pero escaneando secuencialmente utilizando Índices secundarios resulta costoso.
Cada acceso al registro necesita traer un nuevo bloque de disco
Traer un bloque requiere de 5 a 10 milisegundos.
Comparado con 100 nanosegundos para el acceso a memoria.
Database System Concepts - 5th Edition, Oct 4, 2006
12.15
©Silberschatz, Korth and Sudarshan
Archivo de Índice de Árbol B+ EI Índice de Árbol B+ es una alternativa para archivos de indices secuenciales. Desventajas de archivos secuenciales de Índices
Degradación del rendimiento según crece el archivo, así mismo muchos bloques de desbordamiento son creados. Necesariamente se debe reorganizar periódicamente todo el archivo. Ventajas de Archivo de Índices de Árbol B+:
Pequeña reorganización automática por si misma, Estos Índices mantienen su eficiencia a pesar de la inserción y borrado de datos.
No es necesario la reorganización del todo el archivo para mantener el rendimiento. (Menores) desventajas de Árbol B+: Sobre carga extra al insertar y eliminar, espacio de sobrecarga Mayores ventajas que desventajas de los Árbol B+
Los Árbol B+ son extensamente utilizados.
Database System Concepts - 5th Edition, Oct 4, 2006
12.16
©Silberschatz, Korth and Sudarshan
Archivo de Índice de Árbol (Cont.) Un Árbol B+ es una Árbol balanceado que satisface las siguientes propiedades: Los caminos de la raíz a cada hoja del árbol son de la misma
longitud Cada nodo que no es la raíz o una hoja tiene entre n/2 y n hijos,
donde n es fijo para cada árbol en particular. Un nodo Hoja tiene entre (n–1)/2 y n–1 valores clave Casos especiales:
Si la raíz no es una hoja, entonces la raíz tiene al menos 2 hijos.
Si la raíz es una hoja (No hay otro nodo en el Árbol). La raíz puede tener entre 0 y (n–1) valores clave.
Database System Concepts - 5th Edition, Oct 4, 2006
12.17
©Silberschatz, Korth and Sudarshan
Estructura de Árbol B+ Nodo típico:
Ki representa a los valores de claves de búsqueda
Pi son punteros a los hijos (para nodos que no son hojas) o punteros a registros o cajones de registros (para nodos hojas).
Las claves de búsqueda en un nodo están ordenados.
K1 < K2 < K3 < . . . < Kn–1
Database System Concepts - 5th Edition, Oct 4, 2006
12.18
©Silberschatz, Korth and Sudarshan
Nodos Hoja en el Árbol B+ Propiedades de un nodo hoja: Para i = 1, 2, . . ., n–1, el puntero Pi a punta o bien a un punto de un
registro de archivo con una clave de búsqueda Ki, o bien a un cajón de punteros cada uno de los cuales apunta a un registro del archivo con valor de la clave de búsqueda Ki. La estructura cajón se usa solamente si la clave de búsqueda no forma una clave primaria y si el archivo no está ordenado según la clave de búsqueda. Si Li, Lj son nodos hojas y i < j, el valor de la clave de búsqueda de Li es
menos que el valor de clave de búsqueda de Lj. Pn apunta al siguiente nodo hoja en orden al valor de la clave de
búsqueda.
Database System Concepts - 5th Edition, Oct 4, 2006
12.19
©Silberschatz, Korth and Sudarshan
Nodos internos (no hojas) del Árbol B+ Los nodos internos del Árbol B+ forman un índice multinivel (disperso)
sobre los nodos hoja, para un nodo interno con m punteros sucede:
Todas las claves de búsqueda del sub Árbol, Los cuales son apuntados por P1 son menores que K1.
Para 2 i n – 1, todas las claves de búsqueda del sub Árbol los cuales son apuntados por Pi tienen valores mayores o iguales que Ki–1 y menores que Ki
Todas las claves de búsqueda del sub Árbol, a los cuales Pn apunta tienen valores mayores o iguales a Kn–1
El número de punteros de un nodo se llama grado de salida del nodo.
Database System Concepts - 5th Edition, Oct 4, 2006
12.20
©Silberschatz, Korth and Sudarshan
Ejemplo de Árbol B+
Árbol B+ para el archivo account (n = 3)
Database System Concepts - 5th Edition, Oct 4, 2006
12.21
©Silberschatz, Korth and Sudarshan
Ejemplo de un Árbol B+
Árbol B+ para el archivo account (n = 5) Los Nodos hoja pueden tener entre 2 y 4 valores
((n–1)/2 y n –1, con n = 5). Los Nodos intermedios tienen entre 3 y 5 hijos ((n/2 y n
con n =5). La raíz puede tener al menos 2 hijos
Database System Concepts - 5th Edition, Oct 4, 2006
12.22
©Silberschatz, Korth and Sudarshan
Observaciones de Árboles B+ Los nodos no hojas del Árbol B+ forman una jerarquía de Índices
dispersos. El Árbol B+ contiene relativamente un numero pequeño de niveles
El Nivel debajo de la raíz tiene al menos 2* n/2 valores
El siguiente Nivel tiene al menos 2* n/2 * n/2 valores
.. etc.
Si hay valores K clave de búsqueda en el archivo, la altura del árbol no es más que logn/2(K)
Por lo tanto las búsquedas se pueden realizar de forma eficiente.
Inserciones y eliminaciones en el archivo principal se puede manejar
de manera eficiente, ya que el índice puede ser reestructurada en tiempo logarítmico.
Database System Concepts - 5th Edition, Oct 4, 2006
12.23
©Silberschatz, Korth and Sudarshan
Consultas con Árboles B+
Encontrar todos los registros con un valor de clave de búsqueda de k.
Database System Concepts - 5th Edition, Oct 4, 2006
12.24
©Silberschatz, Korth and Sudarshan
Consultas con Árboles B+ (Cont.) Si hay K valores de la clave de búsqueda en el archivo, este camino
no será más largo que logn/2(K).
Generalmente un nodo se construye para tener el mismo tamaño
que un bloque de disco, típicamente son 4 kilobytes.
Y n esta típicamente alrededor de 100 (40 bytes por entrada de Índice).
Con 1 millón de valores de clave de búsqueda y n = 100
A lo sumo log50(1,000,000) = 4 accesos a nodos en una búsqueda.
Comparando con un Árbol binario equilibrado con 1 millón de valores
de clave de búsqueda – se necesita alrededor de 20 accesos de nodos en una búsqueda.
Database System Concepts - 5th Edition, Oct 4, 2006
12.25
©Silberschatz, Korth and Sudarshan
Actualizaciones en Árboles B+: Inserción 1. Buscar un nodo hoja donde tendría que aparecer el valor de la clave
de búsqueda. 2. Si el valor de la clave de búsqueda ya aparece en el nodo hoja 1.
Se inserta un nuevo registro en el archivo
2.
Si es necesario, añadir un puntero al cajón
3. Si el valor de la clave de búsqueda no aparece 1.
Se inserta el valor en el nodo hoja de tal manera que las claves de búsqueda permanezcan ordenadas.
2.
Luego insertamos el nuevo registro en el archivo y, si es necesario, creamos un nuevo cajón con el puntero apropiado.
Database System Concepts - 5th Edition, Oct 4, 2006
12.26
©Silberschatz, Korth and Sudarshan
Actualizaciones en Árboles B+: Inserción (Cont.) Si no hay sitio para insertar un valor de la clave de búsqueda, se tiene
que dividir el nodo en otros dos nodos. En general, si tenemos n valores de la clave de búsqueda (los n – 1
valores del nodo hoja más el valor a insertar), pondremos [n/2] en el nodo existente y el resto de valores en el nuevo nodo. El menor valor de este nuevo nodo hay que insertarlo en el padre del nodo hoja dividido. La técnica general para la inserción en un árbol B+ es determinar el
nodo hoja h en el cual realizar la inserción. Si es necesario dividir, se inserta el nuevo nodo dentro del padre del nodo h. Si esta inserción produce otra división, procederíamos recursivamente o bien hasta que una inserción no produzca otra división o bien hasta crear una nueva raíz.
Database System Concepts - 5th Edition, Oct 4, 2006
12.27
©Silberschatz, Korth and Sudarshan
Actualizaciones en Árboles B+: Inserción(Cont.)
Árbol B+ Antes y después de insertar “Clearview” Database System Concepts - 5th Edition, Oct 4, 2006
12.28
©Silberschatz, Korth and Sudarshan
Actualizaciones en Árboles B+: Borrado Usando la misma técnica que para buscar, se busca el registro a
borrar y se elimina del archivo. Si no hay un cajón asociado con el valor de la clave de búsqueda o si el cajón se queda vacío como resultado del borrado, se borra el valor de la clave de búsqueda del nodo hoja. En general, para borrar un valor en un árbol B+ se realiza una
búsqueda según el valor y se borra. Si el nodo es demasiado pequeño, se borra desde su padre. Este borrado se realiza como una aplicación recursiva del algoritmo de borrado hasta que se alcanza la raíz, un nodo padre queda lleno de manera adecuada después de borrar, o hasta aplicar una redistribución. Para borrar un nodo hoja se tiene que borrar el puntero que le llega
desde su padre.
Database System Concepts - 5th Edition, Oct 4, 2006
12.29
©Silberschatz, Korth and Sudarshan
Ejemplo de borrado en un Árbol B+
Antes y después de borrar “Daimiel” Database System Concepts - 5th Edition, Oct 4, 2006
12.30
©Silberschatz, Korth and Sudarshan
Ejemplo de borrado en un Árbol B+ (Cont.)
Borrar “Pamplona” del resultado del ejemplo anterior
Database System Concepts - 5th Edition, Oct 4, 2006
12.31
©Silberschatz, Korth and Sudarshan
Ejemplo de borrado en un Árbol B+ (Cont.)
redistribuir
Database System Concepts - 5th Edition, Oct 4, 2006
12.32
©Silberschatz, Korth and Sudarshan
Organización de archivos con árboles B+ Se resuelve la degradación de las búsquedas en el índice mediante
el uso de índices de árbol B+ en el archivo. También se soluciona el problema de la degradación al almacenar los
registros reales utilizando el nivel de hoja del árbol B+ para almacenar los registros reales en los bloques. La estructura del árbol B+ se usa no sólo como un índice, sino también
como un organizador de los registros dentro del archivo. Los nodos hoja del árbol almacenan registros, en lugar de almacenar
punteros a registros. El número máximo de registros que se pueden almacenar en un nodo
hoja es menor que el número de punteros en un nodo interno. Se requiere que los nodos hoja estén llenos al menos hasta la mitad
Database System Concepts - 5th Edition, Oct 4, 2006
12.33
©Silberschatz, Korth and Sudarshan
Organización de archivos con árboles B+ (Cont.)
Ejemplo de la organización de un archivo con un árbol B +
La utilización del espacio es particularmente importante, ya que el
espacio ocupado por los registros es mucho mayor que el espacio ocupado por las claves y punteros. Se puede mejorar la utilización del espacio en un árbol B+ implicando a
más nodos hermanos en la redistribución durante las divisiones y fusiones. La técnica es aplicable a los nodos hoja y nodos internos.
Involucrar a dos hermanos en la redistribución (evitar división / fusión siempre que sea posible) y como resultado en cada nodo tiene por lo menos 2n / 3 entradas.
Database System Concepts - 5th Edition, Oct 4, 2006
12.34
©Silberschatz, Korth and Sudarshan
Índices sobre cadena de caracteres Índices de árboles B+ sobre atributos de tipo cadena plantea dos
problemas:
Las cadenas pueden ser de longitud variable.
Las cadenas pueden ser largas.
Produce una altura de árbol incrementada. Comprensión del prefijo
Los valores clave en los nodos internos pueden ser prefijos de la clave completa
Mantener suficientes caracteres para distinguir las entradas de los subárboles separados por el valor de la clave – Ejemplo: “Silas” y “Silberschatz” pueden ser separados por “Silb”
Claves en el nodo hoja puede ser comprimido mediante el intercambio de prefijos comunes.
Database System Concepts - 5th Edition, Oct 4, 2006
12.35
©Silberschatz, Korth and Sudarshan
Archivos de Índices de árbol B Similar al árbol B+, pero los árboles B permiten que los valores de
clave de búsqueda aparezcan sólo una vez, elimina la redundancia de las claves de búsqueda. Como las claves de búsqueda que aparecen en los nodos internos no
aparecen en ninguna otra parte del árbol B, es necesario incluir un campo adicional para un puntero por clave, estos punteros apuntan a registros de archivos o cajones (a) Nodo Hoja (b) Nodo Interno de un árbol B.
Nodo interno: – los punteros Bi son a un cajón o archivo de registros. Database System Concepts - 5th Edition, Oct 4, 2006
12.36
©Silberschatz, Korth and Sudarshan
Ejemplo de un archivo de Índice de árbol B
Árbol B (arriba) y Árbol B+ (abajo) con os mismos datos
Database System Concepts - 5th Edition, Oct 4, 2006
12.37
©Silberschatz, Korth and Sudarshan
Archivos de Índices de árbol B (Cont.) Ventajas de índices de árbol B:
Se puede usar menos nodos que el árbol B+.
A veces es posible encontrar el valor de la clave de búsqueda antes de alcanzar el nodo hoja.
Desventajas de Índices de árbol B:
Sólo una pequeña cantidad de todos los valores clave de búsqueda se detecta en forma rápida.
Puede que tenga una profundidad mayor que el correspondiente al árbol B+.
La Inserción y borrado es mas complicado que en los arboles B+
Database System Concepts - 5th Edition, Oct 4, 2006
12.38
©Silberschatz, Korth and Sudarshan
Acceso bajo varias claves
Uso de múltiples índices para ciertos tipos de consultas.
select numero_prestamo from cuenta where nombre_sucursal = “Pamplona” and saldo = 1000
Hay tres estrategias posibles para procesar esta consulta: 1. Usar el índice en nombre_sucursal para encontrar todos los registros pertenecientes a la sucursal de “Pamplona”. Luego se examinan estos registros para ver si saldo = 1.000. 2. Usar el índice en saldo para encontrar todos los registros pertenecientes a cuentas con saldos de 1.000. Luego se examinan estos registros para ver si nombre_sucursal = “Pamplona”
3. Usar el índice en nombre_sucursal para encontrar punteros a registros pertenecientes a la sucursal Pamplona. Y también usar el índice en saldo para encontrar los punteros a todos los registros pertenecientes a cuentas con un saldo de 1.000. Se realiza la intersección de estos dos conjuntos de punteros.
La tercera utiliza ambos índices pero podría ser una mala elección cuando:
Hay muchos registros pertenecientes a la sucursal Pamplona.
Hay muchos registros pertenecientes a cuentas con un saldo de 1.000.
Hay solamente unos cuantos registros pertenecientes a ambos, a la sucursal Pamplona y a las cuentas con un saldo de 1.000.
Database System Concepts - 5th Edition, Oct 4, 2006
12.39
©Silberschatz, Korth and Sudarshan
Índices sobre varias claves Claves de búsqueda compuesta son claves de búsqueda que
contienen mas de un atributo.
Ejm. (nombre_sucursal, saldo)
La clave se representa como un tupla de valores: (a1, a2, … an) donde
los atributos indexados son (A1, A2, … An). El orden de los valores de la clave de búsqueda es el Orden
lexicográfico: (a1, a2) < (b1, b2) si se cumple cualquier condición
a1 < b1, ó
a1=b1 y a2 < b2
Database System Concepts - 5th Edition, Oct 4, 2006
12.40
©Silberschatz, Korth and Sudarshan
Temas a investigar Claves de Búsqueda duplicadas
Índices de cobertura Índices secundarios y reubicación de registros Árboles R
Database System Concepts - 5th Edition, Oct 4, 2006
12.41
©Silberschatz, Korth and Sudarshan
Asociación Ing. Hernán Nina Hanco
Database System Concepts, 5th Ed. ©Silberschatz, Korth and Sudarshan See www.db-book.com for conditions on re-use
Asociación estática
Un cajón (bucket) es una unidad de almacenamiento que puede guardar uno o mas registros (generalmente un bucket es un bloque de disco).
En la organización de archivo asociativo (hash file organization) se obtiene un bucket de un registro directamente del valor de su clave de búsqueda usando una función de asociación (hash function)
Formalmente, sea K el conjunto de todos los valores de clave de búsqueda y sea B el conjunto de todas las direcciones de cajón. Una función de asociación h es una función de K a B. Sea h una función asociación.
Para insertar un registro con clave de búsqueda Ki, calcularemos h(Ki), y proporciona la dirección del cajón para insertar el registro.
Para realizar una búsqueda con el valor Ki de la clave de búsqueda, simplemente se calcula h(Ki) y luego se busca el cajón con esa dirección.
Supongamos que dos claves de búsqueda, K5 y K7, tienen el mismo valor de asociación, hay que comprobar el valor de clave de búsqueda de cada registro en el cajón para verificar que el registro es el que queremos.
El borrado es igual de sencillo. Si el valor de clave de búsqueda del registro a borrar es Ki, se calcula h(Ki), después se busca el correspondiente cajón para ese registro y se borra el registro del cajón.
Database System Concepts - 5th Edition, Oct 4, 2006
12.43
©Silberschatz, Korth and Sudarshan
Ejemplo de la organización de un archivo asociativo Organización asociativa del archivo cuenta utilizando nombre_sucursal como clave Hay 10 buckets, Una función de asociación sencilla calcula en primer lugar la suma
de las representaciones binarias de los caracteres de la clave y, luego, devuelve el resto de la división entre la suma y el numero de cajones:
Ejm. h(Perryridge) = 5
Database System Concepts - 5th Edition, Oct 4, 2006
h(Round Hill) = 3 h(Brighton) = 3
12.44
©Silberschatz, Korth and Sudarshan
Ejemplo de la organización de un archivo asociativo Organización asociativa del archivo cuenta utilizando nombre_sucursal como clave
Database System Concepts - 5th Edition, Oct 4, 2006
12.45
©Silberschatz, Korth and Sudarshan
Funciones de asociación La peor función posible asigna todos los valores de clave de búsqueda
al mismo cajón; esto haría que se guarde todos los registros en un mismo cajón. Propiedades de una buena distribución:
Distribución uniforme. Esto es, cada cajón tiene asignado el mismo número de valores de la clave de búsqueda dentro del conjunto de todos los valores posibles de la clave de búsqueda.
Distribución aleatoria. Esto es, en el caso promedio, cada cajón tendrá casi el mismo número de valores asignados a él, sin tener en cuenta la distribución actual de los valores de la clave de búsqueda.
Generalmente las funciones de asociación realizan el cálculo sobre la
representación binaria interna del valor de la clave de búsqueda.
Database System Concepts - 5th Edition, Oct 4, 2006
12.46
©Silberschatz, Korth and Sudarshan
Gestión de desbordamiento de cajones El desbordamiento de cajones puede ocurrir debido a:
Cajones insuficientes
Atasco de cajones: Algunos cajones tienen asignados más registros que otros. Esto puede ocurrir debido a dos razones:
Varios registros podrían tener la misma clave de búsqueda.
La función de asociación elegida podría producir una distribución no uniforme de las claves de búsqueda.
Aunque la probabilidad de desbordamiento de cajones se puede
reducir, no es posible eliminarlo del todo. Por lo tanto, Trataremos el desbordamiento de cajones utilizando cajones de desbordamiento.
Database System Concepts - 5th Edition, Oct 4, 2006
12.47
©Silberschatz, Korth and Sudarshan
Gestión de desbordamiento de cajones (Cont.) Cadena
de desbordamiento: corresponde al tratamiento del desbordamiento utilizando una lista enlazada. Todos los cajones de desbordamiento de un cajón determinado están encadenados juntos en una lista enlazada.
La forma de la estructura asociativa que se acaba de describir se
denomina algunas veces asociación cerrada
Aproximación alternativa, llamada asociación abierta. Tienen menor importancia en la implementación de bases de datos.
Database System Concepts - 5th Edition, Oct 4, 2006
12.48
©Silberschatz, Korth and Sudarshan
Índices asociativos La asociatividad se puede utilizar no solamente para la organización
de archivos sino también para la creación de estructuras de índice. Un índice asociativo (hash index) organiza las claves de búsqueda,
con sus punteros asociados, dentro de una estructura de archivo asociativo. Estrictamente hablando, los índices asociativos son sólo estructuras
de índices secundarios.
Un índice asociativo nunca necesita una estructura de índice primario, ya que si un archivo está organizado utilizando asociatividad, no hay necesidad de una estructura de índice asociativo separada.
Database System Concepts - 5th Edition, Oct 4, 2006
12.49
©Silberschatz, Korth and Sudarshan
Ejemplo de Índices asociativos
La función de asociación utilizada calcula la suma de los dígitos del número de cuenta módulo siete
Database System Concepts - 5th Edition, Oct 4, 2006
12.50
©Silberschatz, Korth and Sudarshan
Problemas con la técnica de asociación estática La función de asociación se debe elegir cuando se implementa el
sistema y no se puede cambiar fácilmente después si el archivo que se está indexando aumenta o disminuye. Ya que la función h asigna valores de la clave búsqueda a un conjunto
fijo C de direcciones de cajón, emplearemos más espacio si C fue concebido para manejar el futuro crecimiento del archivo. Si C es demasiado pequeño, los cajones contienen registros de una gran variedad de valores de la clave búsqueda, pudiendo originar el desbordamiento del cajón. A medida que el archivo aumenta el rendimiento se degrada.
Database System Concepts - 5th Edition, Oct 4, 2006
12.51
©Silberschatz, Korth and Sudarshan
Problemas con la técnica de asociación estática La mayoría de las bases de datos crecen con el tiempo. Si se va a
utilizar la asociación estática para estas bases de datos, tenemos tres clases de opciones.
Elegir una función de asociación basada en el tamaño actual del archivo. Esta opción producirá una degradación del rendimiento a medida que la base de datos crezca.
Elegir una función de asociación basada en el tamaño previsto del archivo con relación a un punto determinado del futuro. Aunque se evite la degradación del rendimiento, inicialmente puede que se pierda una cantidad de espacio significante.
Reorganizar periódicamente la estructura asociativa en respuesta al crecimiento del archivo. Esta reorganización implica elegir una nueva función de asociación, volviendo a calcular la función de asociación de cada registro en el archivo y generando nuevas asignaciones de los cajones. Esta reorganización es una operación masiva que requiere mucho tiempo. Además, es necesario prohibir el acceso al archivo durante la reorganización.
Database System Concepts - 5th Edition, Oct 4, 2006
12.52
©Silberschatz, Korth and Sudarshan
Asociación dinámica
Permiten modificar la función de asociación dinámicamente para acomodarse al aumento o disminución de la base de datos
Asociación extensible (Extendable hashing) – una forma de asociación dinámica
Una Función de asociación genera valores dentro de un rango – Típicamente enteros binarios de b bits. Un valor normal de b es 32
Inicialmente no se utiliza el total de b bits del valor de la función de asociación. En cualquier caso, empleamos i bits, donde 0< i < b. Estos i bits son utilizados como desplazamiento en una tabla adicional con las direcciones de los cajones.
Tamaño de la tabla de direcciones de cajón = 2i. Inicializa i = 0
El valor de i aumenta o disminuye con el tamaño de la base de datos.
Algunas entradas consecutivas de la tabla podrían apuntar al mismo cajón. Todas estas entradas tendrán un prefijo común del valor de la función de asociación.
Así el número de cajones es < 2i
EL número de cajones también cambia dinámicamente, fusionando o separándose.
Database System Concepts - 5th Edition, Oct 4, 2006
12.53
©Silberschatz, Korth and Sudarshan
Estructura asociativa general extensible
En esta estructura, i2 = i3 = i, si i1 = i – 1 Database System Concepts - 5th Edition, Oct 4, 2006
12.54
©Silberschatz, Korth and Sudarshan
Uso de la estructura asociativa extensible Cada cajón j almacena un valor ij
Todas las entradas que apuntan al mismo cajón tienen el mismo valor los primeros ij bits.
Para localizar un cajón que contiene una clave de búsqueda Kj:
1. Calcular h(Kj) = X 2. Tomar los primeros i bits mas significativos de X se busca la entrada de la tabla que corresponda a esta cadena de bits, y se sigue el puntero del cajón en la entrada de la tabla. Para insertar un registro con un valor de la clave de búsqueda Kj se
sigue el mismo procedimiento de búsqueda que antes, llegando a algún cajón j. Si hay sitio en el cajón se inserta el registro en el cajón. Si por el contrario el cajón está lleno, hay que dividir el cajón y redistribuir los registros actuales más uno nuevo. Para dividir el cajón, primero hay que determinar del valor de la función de asociación por si fuera necesario incrementar el número de bits que se están usando.
Database System Concepts - 5th Edition, Oct 4, 2006
12.55
©Silberschatz, Korth and Sudarshan
Inserción en la estructura asociativa extensible (Cont) Para dividir un cajón j cuando se inserta registros con un valor de clave de búsqueda Kj: Si i > ij (más de una entrada en la tabla de direcciones de cajones
apunta al cajón j) Se asigna un nuevo cajón z, y se cambia ij = iz = (ij + 1) La primera mitad de todas las entradas se dejan como estaban (apuntando al cajón j) y el resto de entradas se ponen apuntando al cajón recién creado (cajón z). Por último, se vuelve a calcular la función de asociación para cada registro en el cajón j y se colocan o bien en el cajón j o bien en el cajón z recién creado. Luego se vuelve a intentar la inserción. En el caso poco probable de que vuelva a fallar.
Database System Concepts - 5th Edition, Oct 4, 2006
12.56
©Silberschatz, Korth and Sudarshan
Inserción en la estructura asociativa extensible (Cont) Para dividir un cajón j cuando se inserta registros con un valor de clave de búsqueda Kj: Si i = ij (solamente una entrada en la tabla de direcciones de los cajones
apunta al cajón j) Es necesario incrementar el tamaño de la tabla de direcciones de los cajones para incluir los punteros a los dos cajones que resultan de la división del cajón j. Esto se hace considerando un bit adicional en el valor de la función de asociación. Luego se incrementa el valor de i en uno, duplicando el tamaño de la tabla de direcciones de cajones. Cada entrada se sustituye por dos entradas, cada una de las cuales con el mismo puntero que la entrada original. Ahora dos entradas en la tabla de direcciones de cajones apuntan al cajón j. Así pues, se asigna un nuevo cajón (cajón z) y hacemos que la segunda entrada apunte al nuevo cajón. Se pone ij e iz a i. A continuación se vuelve a calcular la función de asociación para cada registro del cajón j y, dependiendo de los primeros i bits, se mantiene en el cajón j o se coloca en el cajón recién creado.
Si todos los registros en el cajón j tienen el mismo valor de la clave de búsqueda, ningún número de divisiones servirá. En estos casos se usan cajones de desbordamiento para almacenar los registros, como en la asociación estática.
Database System Concepts - 5th Edition, Oct 4, 2006
12.57
©Silberschatz, Korth and Sudarshan
Borrar en la estructura asociativa extensible Para borrar un registro con valor de la clave de búsqueda Kl se sigue el
mismo procedimiento de búsqueda anterior, finalizando en algún cajón, llamémosle j. Se borran ambos, el registro del archivo y la clave de búsqueda del cajón. El cajón también se elimina si se queda vacío. Nótese que en este momento, varios cajones se pueden fusionar,
reduciendo el tamaño de la tabla de direcciones de cajones a la mitad.
Database System Concepts - 5th Edition, Oct 4, 2006
12.58
©Silberschatz, Korth and Sudarshan
Ejemplo de Uso de la estructura asociativa extensible
Estructura de Asociación inicial, tamaño del cajón = 2 Database System Concepts - 5th Edition, Oct 4, 2006
12.59
©Silberschatz, Korth and Sudarshan
Ejemplo (Cont.) Estructura asociativa después de tres inserciones
Database System Concepts - 5th Edition, Oct 4, 2006
12.60
©Silberschatz, Korth and Sudarshan
Ejemplo (Cont.) Estructura asociativa después de cuatro inserciones
Database System Concepts - 5th Edition, Oct 4, 2006
12.61
©Silberschatz, Korth and Sudarshan
Ejemplo (Cont.)
Estructura asociativa después de siete inserciones
Database System Concepts - 5th Edition, Oct 4, 2006
12.62
©Silberschatz, Korth and Sudarshan
Ejemplo (Cont.) Estructura asociativa extensible para el archivo cuenta
Database System Concepts - 5th Edition, Oct 4, 2006
12.63
©Silberschatz, Korth and Sudarshan