Tema 6. Organización interna y diseño físico Almacenamiento de

Anuncio
Almacenamiento de datos
Tema 6. Organización interna y diseño físico
•
Almacenamiento de registros y organizaciones
de ficheros primarios Elmasri/Navathe 02
• Introducción
• Dispositivos de almacenamiento secundario
• Acceso paralelo al disco mediante tecnología RAID
• Almacenamiento intermedio de bloques
• Grabación de registros de un fichero en disco
• Operaciones con ficheros
• Ficheros de registros no ordenados (ficheros de montón)
• Ficheros de registros ordenados (ficheros ordenados)
• Técnicas de direccionamiento calculado
• Otras organizaciones primarias de ficheros
Estructuras de índices para ficheros
•
•
Elmasri/Navathe 02
•Índices basados en árboles B+
•Índices sobre claves múltiples
•Otros tipos de índices
Diseño y ajuste práctico de bases de datos
Elmasri/Navathe 02
•Factores que influyen en el diseño físico de BD
•Pautas para diseño físico de BD relacionales
© A. Jaime 2005
DBD Tema 6
1
Almacenamiento primario de datos
– La CPU puede acceder a los datos directamente
– Acceso rápido pero capacidad limitada
– Memoria principal: DRAM (Dynamic Random
Access Memory), bajo coste, volátil
– Memoria caché: RAM estática, más pequeña, más
rápida y más cara
Almacenamiento secundario de datos
– La CPU no puede acceder directamente: hay que
copiarlos antes a memoria principal
– Más lento, mayor capacidad y más baratos
– Discos ópticos
– Discos magnéticos
– Cintas
Memorias flash
– Algo menos que primario y más que secundario
– Se usa como disco con conexión USB, en cámaras de
fotos digitales o en MP3 players
– Es no volátil
– Tecnología EEPROM (Electrically Erasable
Programmable Read-Only Memory)
– Lectura rápida pero escritura lenta
– Escribe la información por bloques. Si se quiere
modificar algo de un bloque, hay que leerlo entero,
modificarlo y sobreescribirlo
© A. Jaime 2005
Almacenamiento secundario de datos
•
•
•
•
DBD Tema 6
2
Almacenamiento de BD
Discos ópticos:
– 640 MB
– CD-ROM (Compact Disk Read-Only Memory): vienen
pregrabados y no pueden sobrescribirse
– CD-R grabables.
– CD-RW regrabables. Estos dos últimos se han hecho
populares para respaldos.
– Juke-boxes: array de CD-ROM extraíbles. Capacidad de
cientos de GB. Más lentos que los discos magnéticos
– DVD (Digital Video Disk): entre 4,5 y 15GB
Cintas:
– Se usan para respaldos periódicos (por ej. de las BD)
– Acceso secuencial (lento)
– Muy barato y gran capacidad pero NO son datos on-line
(almacenamiento terciario)
– Juke-boxes: banco de cintas catalogadas que pueden ser
cargadas automáticamente en la unidad.
Las BD normalmente residen en almacenamiento secundario
y se van leyendo porciones a memoria
BD en memoria principal:
– Cuando es posible descargar toda la BD en memoria
– Se mantiene una copia de respaldo en disco
– Es útil en aplicaciones de tiempo real, que necesitan
tiempos de respuesta muy rápidos
© A. Jaime 2005
DBD Tema 6
3
•
•
•
•
•
•
Las BD se almacenan en ficheros de registros
Un registro es una colección de valores de datos
(por ejemplo una tupla del modelo relacional)
Los registros deben almacenarse de modo que sea
posible localizarlos de manera eficiente
El SGBD ofrece varias opciones para organizar los
datos
El diseño físico de BD consiste en elegir entre estas
opciones las más adecuadas para los requisitos de la
aplicación
Estudiaremos las principales:
– Organizaciones de datos, que determinan la
forma en la que se colocan los registros en el
disco y por tanto cómo se puede acceder a ellos:
• Ficheros de montón
• Ficheros ordenados
• Ficheros de direccionamiento calculado
• Ficheros con índices (primarios, de
agrupación, secundarios)
– Métodos de acceso
© A. Jaime 2005
DBD Tema 6
4
Discos magnéticos
•
•
Discos magnéticos (2)
Almacenan gran cantidad de datos (40GB, ... en
continuo aumento y en continua reducción de precio)
Hechos de material magnético, con una o varias
superficies de una o dos caras cada una.
Cabeza de
Impulsor Brazo lectura/escritura
•
•
Los sectores (opcional) son divisiones físicas del disco
Densidad de grabación:
– Puede ser la misma en todas las pistas
– También puede ser mayor en pistas centrales y
menor en las más extremas
•
Los bloques (o páginas) son divisiones creadas por el
sistema operativo al formatear el disco (no cambia
dinámicamente)
Todos los bloques del disco tienen el mismo tamaño
(entre 512 y 4.096 bytes)
Los bloques están separados por espacios interbloque
con información de control (grabada en el formateo)
Rotación del disco
Eje
•
Pistas del
mismo
cilindro
...
•
Sector
Movimiento
impulsor
•
Pista
•
bloques de datos
•
•
Una cabeza móvil o varias cabezas fijas sobre las pistas
•
Nº pistas: varía de cientos a miles de pistas por
superficie
(lo segundo es más rápido pero más caro y menos utilizado)
© A. Jaime 2005
DBD Tema 6
5
•
•
•
•
•
•
bloques
registros
Búfer
DISCO
•
•
Tiempo para transferir un bloque entre disco y memoria (o
viceversa): entre 12 y 60 mseg.
Tiempo bastante alto en comparación con lo que tarda la
CPU en procesar sus registros (cuando están en el búfer)
La localización de datos en disco es un cuello de botella
importante en las aplicaciones de BD
© A. Jaime 2005
DBD Tema 6
6
7
Tiempo de búsqueda (tb)
– Para colocar la cabeza sobre la pista (mecánico)
– Depende de la distancia a recorrer
– Es el principal retardo: 10-14 mseg en PCs y 8-9
mseg en servidores
Retardo rotacional (rr) (o latencia)
– Esperar a que el principio del bloque pase bajo la
cabeza
– Caso mejor: acceso inmediato
– Caso peor: una vuelta entera
– Principal retardo en discos de cabeza fija
Tiempo de transferencia de bloque (ttb)
– Depende del tamaño del bloque, de las pistas y rpm
– Suele costar 1-2 ms/bloque
•
Ejemplos:
– Tiempo medio para encontrar y transferir 1 bloque:
(tb + rr +ttb) mseg → entre 12 – 60 mseg.
– Al transferir varios bloques del mismo cilindro se
reduce el tiempo:
• k bloques no contiguos del mismo cilindro:
tb + k * (rr + ttb ) mseg.
• k bloques contiguos del mismo cilindro:
tb + rr + k * ttb mseg.
•
Las organizaciones de ficheros tratan de minimizar el nº
de transferencias de disco a memoria
MEMORIA
El bloque es la unidad de transferencia entre disco y memoria
y entre memoria y disco
•
DBD Tema 6
Tiempo de acceso a los datos del disco
Registro: entidad (E/R), tupla (relacional), fila
(SQL), ...
Bloque:
– Unidad de transferencia entre disco y memoria
– Formado por uno o varios registros
Acceso directo (o aleatorio) a un bloque:
– La dirección de un bloque la forman: el nº de
superficie, nº de pista y nº de bloque
Búfer: espacio en memoria principal en el que cabe
un bloque
una pista
El controlador de disco hace de interfaz entre el disco y
el sistema computador. Son muy utilizados los
controladores SCSI, IDE ...
© A. Jaime 2005
Registro, bloque y búfer
•
El paquete de discos gira continuamente a una
velocidad que suele estar entre 3.600 y 7.200 rpm
Los disquetes, sin embargo, dejan de girar tras
completarse cada transferencia de datos
© A. Jaime 2005
DBD Tema 6
8
Tecnología RAID
Cómo mejorar la fiabilidad en RAID
•
La probabilidad de error en banco de n discos es n
veces mayor que para un disco
Hay n impulsores de cabeza y no solo uno (es más
probable que se produzca un error mecánico)
•
•
Originalmente: Redundant Arrays of Inexpensive Disks
Posteriormente “I” = Independent
•
•
•
Capacidad de RAM: se cuadruplica cada 2 o 3 años
Mejoras en disco:
– Tiempo de acceso: <10% anual Magnitudes
– Transferencia :
≈20% anual muy inferiores
– Capacidad:
>50% anual
•
•
Tiempo medio de fallo = 200.000 horas = 22,8 años
En banco de 100 discos = 2.000 horas = 83.3 días !
•
Una sola copia en un banco de discos: poco fiable
•
•
Solución obvia: redundancia de datos
Desventajas:
•
Solución natural:
– Array (grande) de discos pequeños e independientes
– Que funcione como un solo disco lógico
– De mayor rendimiento
•
Franjeo de datos (Data striping):
– Uso de paralelismo para mejora del rendimiento
(una operación en cada disco al mismo tiempo)
– Datos distribuidos en varios discos de forma
transparente
– Aparentemente es un solo disco, grande y rápido
– También puede mejorar la fiabilidad almacenando
información redundante
Franjeo
de datos Fichero
A
– Espacio de disco extra
– Operaciones E/S extra
– Computación extra para:
• Mantener coherente los datos redundantes
• Recuperación ante fallos
Disco 0 Disco 1 Disco 2 Disco 3
A1
A2
A3
A4
Los 4 discos se ven como un disco grande
© A. Jaime 2005
DBD Tema 6
9
Cómo mejorar la fiabilidad en RAID (2)
© A. Jaime 2005
DBD Tema 6
10
Cómo mejorar la fiabilidad en RAID (3)
La introducción de redundancia debe considerar
dos problemas:
Dos técnicas para introducir redundancia:
1. Reflejo o sombra (Mirroring o shadowing):
– Mantener 2 discos con idénticos datos
– Lectura: sobre el disco con menor retardo de
cola, búsqueda y rotacional
– Si un disco se estropea se usa el otro hasta su
reparación
– Gestiona el doble de lecturas en el mismo
tiempo que un disco normal (una lectura en
cada disco)
– La velocidad de transferencia es la misma que
con un único disco.
1. Elegir una técnica que calcule la información
redundante.
– Propuestas (códigos de corrección de errores):
• Bits de paridad
• Códigos de Hamming
– Con bits de paridad: un disco contiene la suma
de todos los demás.
Reconstrucción: proceso similar a una resta
2. Guardar información de control extra:
– Para reconstruir la información perdida en caso
de fallos
2. Elegir un método de distribución de información
redundante en el array de discos.
– Propuestas:
• Almacenar la información redundante en
un nº pequeño de discos
• Distribuirla uniformemente entre los
discos
© A. Jaime 2005
© A. Jaime 2005
DBD Tema 6
11
DBD Tema 6
12
Mejora del rendimiento con RAID
•
•
Organizaciones RAID y niveles
Franjeo de datos en el nivel de bit:
– Cada bit de 1 byte se guarda en 1 disco distinto
– Para bytes de 8 bits podemos tener 8 discos
– Los 8 discos participan en toda operación de E/S
– La cantidad de datos leídos en cada solicitud es
como mucho 8 veces mayor.
– Se puede generalizar la división a un múltiplo o
divisor de 8 (ejemplo: array de 4 discos)
•
Se diferencian 7 niveles numerados del 0 al 6
•
La diferencia se basa en distintas combinaciones de:
– Granularidad de intercalado de datos (franjeo)
– Patrones usados para calcular la información
redundante (bits de paridad, códigos de
Hamming, de Reed-Solomon)
Franjeo de datos en el nivel de bloque:
– Puede dar servicio a la vez a varias solicitudes de
E/S sobre discos diferentes
– Baja el tiempo de espera en cola
– Puede servir en paralelo a 1 petición que implique
varios bloques (si están en distintos discos)
– A mayor nº de discos mejor es la respuesta
Franjeo
de datos
en el nivel
de bloque
Disco 0 Disco 1 Disco 2 Disco 3
Fichero
A
A1
A2
A3
A4
Los 4 discos se ven como un disco grande
© A. Jaime 2005
DBD Tema 6
13
© A. Jaime 2005
Técnica del doble búfer
Procesador de E/S (controlador de disco):
– Independiente de la CPU (en paralelo)
– Transfiere datos entre disco y memoria
•
Mediante la técnica del doble búfer:
– La CPU procesa el bloque del búfer
– Mientras, el procesador de E/S transfiere otro
bloque desde el disco a otro búfer
Bloque de
disco: PROCESAMIENTO
i+1
llenar B
i+2
llenar A
i
proc. A
i+1
proc. B
14
Tipos de registro
•
i
Bloque de llenar A
disco: E/S
DBD Tema 6
•
•
•
Los datos se almacenan en registros
Un registro es un conjunto de valores llamados campos
Cada campo es de un tipo de datos (entero, string,
boolean, fecha, etc.)
•
Ejemplo:
Tipo de registro EMPLEADO con campos
NOMBRE: String(1..30)
SALARIO: Integer, …
•
Un campo puede contener objetos binarios grandes
como imágenes, video, audio o texto libre (tipo BLOB)
Se guardan aparte y en el campo contiene el apuntador
al BLOB
•
i+2
proc. A
•
tiempo
Los lenguajes de programación (Ada, C, …) permiten
definir registros (record, struct,…)
Fig. 5.6 Empleo de dos búferes (A y B) para leer del disco
© A. Jaime 2005
DBD Tema 6
15
© A. Jaime 2005
DBD Tema 6
16
Registros: longitud fija o variable
•
•
Factor de bloques
Fichero: secuencia de registros
Un registro tendrá longitud variable porque existe:
–
–
–
–
•
Campo de tamaño variable
Campo repetitivo
Campos opcionales
Registros de diferentes tipos en el mismo fichero
NOMBRE
NSS
DPTO
...
•
Bloque: unidad de transferencia de datos entre disco
y memoria
Programas: trabajan con registros
⇒ situar los registros en bloques
⇒ 1 bloque puede contener varios registros
•
Factor de bloques: registros que entran en 1 bloque
fbl = ⎣(B/R)⎦ registros por bloque
donde:
B= nº bytes por bloque
R= nº bytes por registro (tamaño fijo)
...
60
1
31
40
Fig. 5.7 a. Registro de longitud fija con 3 campos y 60 bytes
•
Carácter separador
NOMBRE
Puede quedar espacio desocupado en los bloques:
Carácter separador
NSS
DPTO
B - (fbl * R) bytes
SALARIO
Fig. 5.7 b. Registro con 2 campos de longitud fija (NSS y DPTO)
y 2 de longitud variable(NOMBRE y SALARIO)
Todos los bloques de
un mismo disco son
del mismo tamaño
una pista
Separador
fin campo
NOMBRE=Juan Sánchez
Separador
fin campo
NSS=113
Sólo entran 3
registros en el
bloque. ¿fbl?
bloques
Separador
fin registro
Búfer 1
DPTO=LSI
Búfer 2
Separador
nombre-valor
Separador
nombre-valor
Separador
nombre-valor
DISCO
Sólo entran 2
registros en el
bloque. ¿fbl?
Fig. 5.7c. Registro con campos de longitud variable y varios
tipos de carácter separador
© A. Jaime 2005
DBD Tema 6
© A. Jaime 2005
17
Organización extendida:
– Aprovecha los espacios desocupados en los bloques
– Parte de un registro está en un bloque y el resto en
otro
– Un apuntador al final del bloque apunta al bloque
donde continúa el registro
– Es preciso usarla si el registro es mayor que el
bloque
Bloque
i
Bloque
i+1
•
Registro 1
Registro 2 Registro 3 Registro 4
Registro 4 (cont) Registro 5
Registro 6
DBD Tema 6
18
Técnicas de asignación de los bloques de
un fichero en disco
Organizaciones extendida y no extendida
•
MEMORIA
•
Contigua: bloques consecutivos de disco. Facilita el
doble búfer y dificulta el expandir el fichero
•
Enlazada: cada bloque tiene un apuntador al siguiente
bloque. Facilita la expansión y dificulta la lectura
•
Grupos de bloques: combinación de las anteriores, un
grupo de bloques consecutivos enlazado con el
siguiente grupo consecutivo
•
Indexada: bloques que contienen sólo índices. Los
índices son apuntadores a los bloques que realmente
contienen los datos
Organización NO extendida:
– los registros no se parten en distintos bloques
– El proceso de los registros es más simple
Bloque
i
Bloque
i+1
Registro 1
© A. Jaime 2005
Registro 2 Registro 3
Registro 4
Registro 5
DBD Tema 6
19
© A. Jaime 2005
DBD Tema 6
20
Descriptor o cabecera de un fichero
•
•
Operaciones con ficheros
Información sobre el fichero, necesaria para los
programas que lo usan:
– Direcciones en disco de los bloques del
fichero
– Descripciones de formato de los registros como:
• Longitud y orden de campos en registros de
longitud fija
• Códigos de tipo de campo, separadores,
códigos de tipo de registro, en registros de
longitud variable
Se encuentra en bloques de disco asociados al
fichero
– Varían de unos sistemas a otros.
– Abrir:
• Prepara el fichero para leer y asigna los búferes
adecuados
• Recupera el descriptor y pone el puntero de lectura
al comienzo (primer registro)
– Volver al principio:
• Pone el puntero de lectura al comienzo (primer
registro)
– Buscar:
• Busca el siguiente registro que cumple la condición.
• Transfiere el bloque al búfer (si no estaba ya)
• Localiza el registro y lo convierte en registro actual.
– Leer:
• Copia el registro actual del búfer en una variable del
programa de usuario y avanza el puntero de lectura
al siguiente registro.
– Eliminar:
• Elimina el registro actual
• Actualiza el registro en el disco
© A. Jaime 2005
DBD Tema 6
21
© A. Jaime 2005
Operaciones con ficheros (2)
22
Organización del fichero:
– Cómo se colocan los
registros y bloques
– Cómo interconectan
•
Método de acceso:
•recorrer en secuencia,
– Programas que permiten
•localizar uno concreto,
realizar ciertas operaciones •buscar los que cumplan
sobre el fichero
una condición, ...
•
Es posible aplicar varios métodos de acceso a una
misma organización de fichero
Hay métodos de acceso que NO se pueden aplicar a
algunas organizaciones de fichero
•
23
•de montón,
•ordenado,
•de direccionamiento
calculado,
•indexado (primario,
de agrupación,
secundario)
•
•
•
Interesa encontrar la organización idónea en cada caso
Será la que permita realizar de manera más eficiente
las operaciones más frecuentes
•
En muchos casos ninguna organización permite que
todas esas operaciones se implementen eficientemente.
Entonces se elige una solución de compromiso entre la
importancia de lo que se espera y la mezcla de
operaciones de recuperación y actualización
•
DBD Tema 6
DBD Tema 6
Organización y método de acceso
– Modificar:
• Modifica valores en el registro actual
• Actualiza el registro en el disco
– Insertar:
• Localiza el bloque donde insertar
• Transfiere el bloque al búfer
• Escribe el registro nuevo en el búfer
• Escribe el búfer en el disco
– Cerrar:
• Libera los búferes
• Realiza operaciones de limpieza
© A. Jaime 2005
Caso simple:
reescribiendo en
disco el bloque
donde está el
registro
© A. Jaime 2005
DBD Tema 6
24
Ficheros de montón
Eliminación en ficheros de montón
•
•
Ficheros de registros NO ordenados (secuenciales)
Organización más simple:
– Registros en el orden en el que se insertan
– Inserciones siempre al final del fichero
•
Inserción
– Poner en el búfer el último bloque del fichero
– Añadir al búfer el registro a insertar
– Reescribir el búfer en el disco
– Guardar la dirección del bloque en el descriptor
•
•
– Problema: deja espacios desocupados en el disco
(pueden ser muchos, si se borran muchos registros)
– Otra técnica: usar un bit del registro como
marcador de eliminación y usar sólo los NO
borrados
Búsqueda
– Lineal: bloque a bloque hasta que un registro
cumpla la condición (costoso)
– Costo medio: acceso a b/2 bloques
– Costo caso peor: b
b = nº de bloques
– Solución 1: reorganización periódica del fichero
(para recuperar el espacio desocupado)
• Recorrer secuencialmente los bloques
• Recolocar los registros quitando los huecos
del fichero
Ningún registro cumple
la condición
© A. Jaime 2005
Hay que obtener todos
los que la cumplen
DBD Tema 6
– Solución 2: intentar insertar sobre huecos y si no
se puede insertar al final
• Cálculos adicionales para encontrar bloques
con huecos
25
© A. Jaime 2005
Modificación
– Buscar el registro a modificar
– Transferir el bloque al búfer
– Modificar el registro en el búfer
– Reescribir el búfer en el disco
Con registros de longitud fija
•
NO ordenados
•
Bloques NO extendidos y de asignación continua
•
En este caso es muy sencillo tener acceso a
cualquier registro por la posición que ocupa en el
fichero:
– Los registros se numeran como 0, 1, 2, 3, ..., r-1
– Los registros en cada bloque se numeran como
0, 1, ..., fbl-1
•
Así el registro i-ésimo estará en:
– Bloque ⎣(i/fbl)⎦
– Registro (i mod fbl) del bloque (mod es el
resto de la división)
•
Esta idea no ayuda a localizar un registro según una
condición de búsqueda
– Solución:
• Eliminar el registro a modificar
• Insertar el registro modificado
DBD Tema 6
26
•
– Problema: registros de tamaño variable
© A. Jaime 2005
DBD Tema 6
Caso especial de ficheros de montón:
ficheros relativos o directos
Modificación en ficheros de montón
•
Eliminación
– Buscar el registro a borrar
– Transferir el bloque al búfer
– Eliminar el registro del búfer
– Reescribir el búfer en el disco
27
© A. Jaime 2005
DBD Tema 6
28
Ficheros ordenados
•
•
•
NO se trata de un
fichero de montón
recién ordenado
Secuencial o secuencial ordenado
Registros se mantienen físicamente ordenados según
los valores de un campo: el campo de ordenación
Si el campo de ordenación es clave, se llama clave de
ordenación
Ficheros ordenados: ventajas
•
•
•
NOMBRE
Aaron, Ed
Abbott, Diane
...
Bloque 1
NSS F_NCTO SALARIO SEXO
Acosta, Marc
Búsqueda binaria (dicotómica)
• Se efectúa sobre bloques
• Ejemplo: bloques 1, 2, …, b
• Las direcciones de 1, 2, ..., b, están en el descriptor
• Se desea encontrar un registro con valor K en su
campo clave de ordenación
• Costo medio: acceso a log2(b) bloques
• Costo medio con búsqueda lineal: b/2 (b si no está)
Adams, John
Adams, Robin
...
Bloque 2
Akers, Jan
...
Wright, Pam
Wyatt, Charles
...
Bloque n
Zimmer, Byron
Fig. 5.9 Bloques de un fichero ordenado (secuencial) de registros
EMPLEADO con NOMBRE como campo clave de ordenación
•
•
© A. Jaime 2005
DBD Tema 6
29
Ficheros ordenados: operaciones
•
•
Inserción
• Buscar el bloque donde insertar en orden el campo
de ordenación
• Abrir espacio, desplazando el resto de registros del
fichero
• Media: lectura y reescritura de b/2 bloques !!
• Insertar el nuevo registro y reescribir el bloque
• Alternativas:
– Bloques con espacio desocupado: cuando se
llena tenemos el mismo problema
– Fichero de desbordamiento:
• NO está ordenado
• Los nuevos registros se insertan al final
• Periódicamente: reconstruir el fichero
ordenado, colocando en su posición los
registros del fichero de desbordamiento
• Inserción más eficiente
• Búsqueda más ineficiente
DBD Tema 6
También se puede buscar por <, >, <=, >= sobre el
campo de ordenación.
Estos ficheros NO ofrecen ventajas para búsquedas
por campos distintos al de ordenación
© A. Jaime 2005
DBD Tema 6
30
Ficheros ordenados: operaciones (2)
Se debe mantener el orden de los registros
Inserción y eliminación: operaciones costosas
© A. Jaime 2005
Lectura eficiente en orden del campo de ordenación
Acceso eficiente al siguiente en el orden del campo
de ordenación:
– Estará en el búfer (si quedan registros por leer)
– Si no, trae el siguiente bloque (si hay)
Posibilidad de búsqueda binaria:
– Mucho más rápida
– Sólo si la condición de búsqueda se basa en un
valor del campo clave de ordenación
31
Eliminación
• Similar a la inserción para la eliminación física
• Más sencillo si sólo se marca como borrado y se
reorganiza periódicamente
Modificación
• Según el caso podrá realizarse búsqueda binaria
• Si se modifica el campo de ordenación puede
precisar cambiar de posición el registro. Eso supone
hacer una eliminación y una inserción
• Si los registros son de longitud fija se podrá
reescribir el bloque en la misma posición
Uso de ficheros ordenados en BD
• Estos ficheros se usan poco en aplicaciones de BD
• Se usan más con un índice primario: ficheros
secuenciales indexados
© A. Jaime 2005
DBD Tema 6
32
Técnicas de direccionamiento calculado
(hashing)
Direccionamiento calculado interno
NOMBRE
0
1
2
•
Acceso muy rápido para ciertas búsquedas
•
Los ficheros de direccionamiento calculado se llaman
también ficheros dispersos o directos
– Condición de búsqueda: igualdad sobre el campo
de direccionamiento calculado (c.dir.cal.)
– El c.dir.cal. en la mayor parte de los casos es clave
(valores únicos)
– Función de direccionamiento calculado o de
aleatorización (f. hash)
• Se aplica a valores del c.dir.cal. del registro
• Resultado: dirección de un bloque de disco
• En el bloque está el reg. con ese valor de
c.dir.cal.
• El registro se busca en el búfer
• Suele bastar con un acceso a bloques de disco
•
Direccionamiento calculado interno:
– Estructura de datos (en memoria principal) muy útil
en programación
– A continuación se hace un paréntesis para repasar
esta estructura de datos (no se trata de ficheros)
– Los ficheros de direccionamiento calculado de los
que se hablaba en esta página los estudiamos
después como direccionamiento calculado externo
© A. Jaime 2005
DBD Tema 6
33
Direccionamiento abierto:
búsqueda uno a uno en las direcciones siguientes a la
devuelta por la función de direccionamiento calculado
hasta encontrar un hueco libre
•
Encadenamiento:
– Con áreas de desbordamiento
– Registros con un apuntador (campo nuevo)
– Registros de igual dirección: encadenados
•
•
•
•
Espacio
de
desbordamiento
m-2
m-1
m
m+1
m+2
-1
-1
-1
m
Técnicas para las funciones de direccionamiento
calculado:
– Plegado (folding): operación aritmética (ej. suma)
ó lógica (ej. O exclusiva) en partes del c.dir.cal.
para calcular la dirección
– Escoger dígitos
•
Problemas con la mayoría de funciones de
direccionamiento calculado:
– No garantiza direcciones distintas a claves
distintas
– Espacio c.dir.cal. >> 0 . . M-1
– Colisión: la dirección obtenida ya está ocupada
– Búsqueda de otra dirección: resolución de
colisiones
© A. Jaime 2005
m+1
-1
m+2
-1
-1
-1
m+k-1
Fig. 5.10 (b) Resolución de colisiones por encadenamiento
•
Direccionamiento calculado múltiple:
– 2ª función de direccionamiento calculado en caso
de colisión
– Caso de una 2ª colisión: uso de 3ª función
– Al final se usa direccionamiento abierto
© A. Jaime 2005
DBD Tema 6
DBD Tema 6
•
Buscar, insertar y eliminar:
– Encadenamiento: algoritmos más simples
– Direccionamiento abierto: eliminación
complicada
•
Objetivo de una buena función de direccionamiento calculado:
– Distribuir uniformemente
– Mínimo de colisiones
– Máxima ocupación de posiciones en el array
•
Resultado de simulaciones y análisis:
– Mejor 70%-90% de ocupación:
• Número bajo de colisiones
• Poco espacio desperdiciado
– Funciones con mod:
• Mejor distribución si M es primo
– Algunas funciones:
Apunta al siguiente
registro de la lista
enlazada.
-1 = puntero a nulo
...
Espacio
de
direcciones
NSS FNAC SALARIOSEXO
Array de 0..M-1 registros
Elegir función de direccionamiento calculado:
h(k)= k mod M
k valor de
campo
dir.cal.
k real: conversión previa a entero
k string: conversión a entero usando los códigos
•
Apuntador
desbordamiento
...
NOM
...
34
Direccionamiento calculado interno (3)
•
0
1
2
3
SALARIO
M-1
Direccionamiento calculado interno (2)
Métodos para resolución de colisiones
Campos de datos
NSS
35
• Conviene que M=2
© A. Jaime 2005
k
DBD Tema 6
36
Direccionamiento calculado externo
Direccionamiento calculado externo (2)
•
En ficheros de disco
•
Proporciona el acceso más rápido a un registro
concreto (por c.dir.cal.): en general un acceso a bloque
•
Dirección: nº relativo de cubeta
•
Una cubeta consta de 1 o varios bloques contiguos
•
Tabla en descriptor: convierte el nº relativo de cubeta
en dirección de bloque en disco
Nº relativo
de cubeta
•
•
•
Colisiones: sin problema hasta llenar cubeta
Cubeta llena: lista enlazada de cubetas de desborde
Punteros: dirección de bloque + nº de registro en el
bloque
Cubetas
principales
Datos
Datos
340
460
580
1
...
...
M-1
321
761
91
652
nulo
nulo
Tabla contenida en el descriptor
del fichero de direccionamiento
calculado
En
descriptor
Cubeta M-1
Punteros
a registro
399
89
630
Fig. 5.12 Manejo de desbordamiento de cubeta por encadenamiento
37
Problemas y operaciones en
direccionamiento calculado externo
© A. Jaime 2005
DBD Tema 6
38
Direccionamiento calculado con expansión
dinámica
Problemas:
– Las funciones de direccionamiento calculado, en
general, NO preservan el orden de la clave
– Cantidad de espacio prefijada:
• M cubetas * m registros/cubeta
• Si nº reg. mucho menor: desperdicio de espacio
• Si es bastante mayor:
– Muchas colisiones
– Listas de cubetas de desbordamiento largas
• En ambos casos es preferible:
– Cambiar el espacio asignado
– Cambiar la función de dir. calculado
– Recolocar los registros
•
•
•
•
El fichero crece según se necesita más espacio
Soluciona el problema de espacio de direcciones fijo
Dirección: se usa en forma de número binario
Distribución: según bits de mayor peso
•
Direccionamiento calculado extensible:
– Mediante listas
Direccionamiento calculado lineal:
– No precisa estructura de datos
•
Operaciones:
– Búsqueda:
• Por campo ≠ c.dir.cal. es tan costoso como en
fichero no ordenado
– Eliminación:
• Cubeta: pasar un registro del área de
desbordamiento
• Área de desbordamiento: eliminación en lista
enlazada
– Modificación:
• C.dir.cal: eliminar e insertar
• Otro campo: reescritura
DBD Tema 6
Puntero a
registro
Puntero a
registro
Fig. 5.11 Correspondencia entre número de cubeta y
dirección de bloque en disco
DBD Tema 6
...
Nº de
cubeta
© A. Jaime 2005
Puntero a
registro
Cubeta 1
M-1
•
nulo
...
0
1
2
•
981
182
0
© A. Jaime 2005
Datos
Datos
Cubeta 0
Dirección
de bloque
en disco
Dirección de bloque en disco
Cubetas de
desbordamiento
39
(no los vamos a estudiar)
© A. Jaime 2005
DBD Tema 6
40
Ficheros de registros mixtos
•
Índices
Hasta aquí: ficheros con todos sus registros del mismo
tipo
•
•
•
Campos de conexión:
– Para representar relaciones (vínculos): claves
extranjeras en el modelo relacional y referencias
a objeto en el modelo orientado a objetos (OO)
– Constituyen referencias lógicas de campos entre
registros de ficheros distintos
•
–
–
–
–
•
•
•
Modelos OO, jerárquico y en red:
– Relaciones físicas: registros físicamente contiguos
o mediante punteros
– Suelen asignar un área de disco que almacena
registros de distintos tipos, que pueden estar
agrupados físicamente
•
•
Fichero mixto (registros de varios tipos):
– En OO contiene agrupados físicamente objetos
relacionados
– Con un campo para almacenar el tipo de registro
– El SGBD una vez determinado el tipo de registro
utiliza el catálogo para conocer los campos del
registro y sus tamaños
© A. Jaime 2005
DBD Tema 6
•
•
Vin2
War1
Vel3
Vin1
Vel1
Vel2
Vel2 Vin1
Rem1
Van1
Mun1
Pic1
Gri1
Man1
Goy1
Goy2
Dal1
Deg1
Buo2
Can1
Ang1
Buo1
Van1 Girasoles
1889 Van Gohg Impresionismo 095x073
Vel3 Lanzas
1634 Velázquez Barroco
307x367
Goy1 Maja desnuda 1800 Goya
null
097x190
1823 Goya
null
140x435
1497 Da Vinci Renacimiento 480x880
1541 Buonarroti Renacimiento 1370x1220
1913 Gris
Cubismo
061x050
1877 Degas
Impresionismo 024x044
1434 Angelico,F. Gótico
175x080
1750 Canaletto
1866 Manet
Goy2 Aquelarre
Vin2 Última cena
Buo2 Juicio final
Gri1 Guitarra
Deg1 Cabaret
Ang1 Anunciación
Can1 Pz. S. Marco
Man1 El flautista
5
6
7
Barroco
068x112
Impresionismo 161x097
Mun1 El grito
1893 Munch
Dal1 Pers. memoria 1924 Dalí
War1 Marilyn
1964 Warhol
4
Expresionismo091x073
Surrealismo 024x033
Pop Art
101x101
Vin1 Gioconda
1506 Da Vinci Renacimiento 077x053
Buo1 Creación Adán 1510 Buonarroti Renacimiento null
Pic1 Guernica
349x776
1937 Picasso
Cubismo
3
318x276
222x293
363x437
2
1656 Velázquez Barroco
1644 Velázquez Barroco
1642 Rembrandt Barroco
Tamaño
Estilo
Pintor
Año
Título
ID
Vel1 Meninas
Vel2 Hilanderas
Rem1 Ronda noche
ÍNDICE sobre el campo ID
(con árbol B+)
Fichero de DATOS
– Índice compuesto
– Direccionamiento
partido
– Ficheros rejilla
DBD Tema 6
42
Índice secundario sobre campo clave
con árbol B+ (2)
1
DBD Tema 6
También se distingue entre índices:
© A. Jaime 2005
•
© A. Jaime 2005
Un fichero puede tener varios índices pero sólo puede
tener uno primario o uno de agrupación. El resto serán
secundarios.
Se puede construir un índice sobre cualquier:
– Físicos (con punteros)
– Lógicos (con valores de clave primaria)
Goy2 Van1
Bloque nº:
Los índices secundarios (o caminos de acceso
secundario) admiten cualquier organización primaria
Los índices primarios y los de agrupación exigen
que la organización primaria sea fichero ordenado
(por el campo o campos de indexación)
– Conjunto de campos del fichero
•
41
Man1 Pic1
Índices secundarios sobre clave
Índices secundarios sobre no clave
Índices primarios (sobre clave)
Índices de agrupación (sobre no clave)
– Campo del fichero
Índice secundario sobre campo clave
con árbol B+
Buo1 Can1 Deg1
Estructuras de acceso que aceleran la obtención de
registros (para ciertas condiciones de búsqueda)
La mayoría de SGBD implementan sus índices con
árboles B+. Estudiaremos exclusivamente estos índices
Se distinguen cuatro tipos de índice:
43
•
•
Índice secundario sobre campo(s) clave (IS-c):
– En el ejemplo se ha definido sobre ID
– Hojas: una entrada por cada registro del fichero de
datos. Cada una tiene un valor de ID y un puntero al
registro con ese valor. Las entradas están ordenadas
en las hojas. Las hojas están enlazadas y se pueden
recorrer de izda a dcha.
Fichero de datos: Puede tener cualquier organización
primaria (montón, ordenado, dir. calculado, etc). Por
tanto, pueden definirse varios IS-c sobre el un fichero
Ordenamiento lógico: el IS-c permite leer los registros
del fichero en orden ascendente de los valores de ID. Esa
lectura puede suponer muchas transferencias de bloque
(caso peor: tantas como registros)
Búsqueda del registro con ID= “Mun1”: se parte de la raíz
y se sigue su puntero central que lleva a los x tales que
“Goy1”<x≤ “Van1”. En el nodo intermedio se sigue el puntero
central, que lleva a los x que “Man1”<x ≤”Pic1”. En el nodo
hoja se encuentra el valor buscado “Mun1” (si no estuviera,
sería porque no existe). Se sigue el puntero del valor “Mun1”
para obtener todos los campos del registro con ID=“Mun”
•
•
Toda búsqueda recorre un nodo de cada nivel (una
transferencia de bloque cada nodo) y transfiere el bloque
del fichero de datos encontrado
Inserción/eliminación de registros: supone actualizar y
reorganizar el índice
© A. Jaime 2005
DBD Tema 6
44
Árboles B+
Terminología de árboles
SUBÁRBOL
DEL NODO B
B
E
Nodos del
nivel 1
•
•
•
•
Siempre equilibrado
Conlleva un desperdicio de espacio aceptable
Inserción y eliminación de cierta complejidad
Los nodos internos y las hojas son diferentes.
I
Nodos del
nivel 2
•
En nodos internos sólo apuntadores a otros nodos:
K
Nodos del
nivel 3
Nodo raíz
(nivel 0)
A
C
F
D
G
H
J
P1 K1
(Los nodos E, J, C, G, H y K
son los nodos hoja del árbol)
Ki-1 Pi Ki
...
puntero
a árbol
...
Kq-1 Pq
puntero
a árbol
X
puntero
a árbol
X
X
Ki-1<X≤Ki
X≤K1
Kq-1<X
– En un nodo los Ki ordenados: K1<K2< . . . <Kq-1
– Todos los nodos internos tienen el mismo tamaño:
entran p punteros y p-1 valores Ki como mucho
– Como mínimo debe haber ⎡p/2⎤ punteros en cada
nodo. La raíz tendrá como mínimo 2 punteros
(cuando es nodo interno, ya que podría ser hoja)
– Cada Ki del nodo estará repetido en el subárbol
situado a su izquierda (en general será el mayor
valor accesible en el subárbol al que apunta)
© A. Jaime 2005
DBD Tema 6
45
© A. Jaime 2005
Árboles B+ (2)
•
puntero
a datos
•
K2 Pr2
... Ki Pri ... Kq-1 Prq-1
puntero
a datos
puntero
a datos
puntero
a datos
DBD Tema 6
Campo de
indexación
•
•
Psiguiente
Puntero
a datos
Puntero
a nodo
Nodo: V=9 bytes, Pr = 7 bytes, P = 6 bytes
B=512 bytes/bloque
Puntero al siguiente
nodo hoja del árbol B+
P1 K1
– En una hoja los Ki ordenados: K1<K2< . . . <Kq-1
– Todos los nodos hoja tienen el mismo tamaño:
entran p punteros y p valores Ki como mucho
– Cada puntero Pri apunta a un registro de clave Ki
(o al bloque que lo contiene, o al bloque de
punteros en el que hay punteros que llevan a
registros con Ki )
– Como mínimo debe haber ⎡p/2⎤ punteros (y
valores) en cada nodo.
– Todas las hojas estarán en el mismo nivel
– Las hojas están enlazadas entre sí: permiten
recorrer los registros en orden ascendente del
campo de indexación
– Algunos valores de las hojas aparecen repetidos en
nodos internos
– En algunos índices se incluyen punteros a la hoja
anterior (recorridos en orden descendente)
Si el campo de indexación no es clave: nivel extra de
indirección (a bloques de punteros)
© A. Jaime 2005
46
Ejemplo con árboles B+
En nodos hoja sólo apuntadores a bloques de datos:
K1 Pr1
DBD Tema 6
47
Ki-1 Pi Ki
...
puntero
a árbol
Kq-1 Pq
puntero
a árbol
X
puntero
a árbol
X
X
Ki-1<X≤Ki
X≤K1
•
...
Kq-1<X
¿Máximo de punteros (p) a árbol (nodo interno)?:
p=34
p*P+(p-1)*V≤B → 15p ≤521
K1 Pr1
puntero
a datos
K2 Pr2
... Ki Pri ... Kq-1 Prq-1
puntero
a datos
puntero
a datos
Psiguiente
puntero
a datos
•
¿Máximo de punteros (phoja) a dato (nodo hoja)?:
phoja*(Pr+V)+P≤B → 16 phoja≤506
phoja=31
•
Puede precisar información adicional por nodo:
– tipo de nodo (interno/hoja)
– q: nº de entradas
– puntero al nodo padre y hermanos
© A. Jaime 2005
DBD Tema 6
48
Ejemplo con árboles B+(2)
Árbol B+: inserciones
Apuntadores:
a nodo
•
•
Ocupación nodos: 69%
p=34
Promedio:
– p*0,69=23 punteros a nodo (y 22 valores) por cada
phoja=31 nodo interno
– phoja*0,69=21 punteros por hoja
0
5
Raíz:
1 nodo, 22 valores, 23 punteros
Nivel 1:
23 nodos, 506 valores, 529 punteros
Nivel 2:
529 “, 11.638 “,
12.167 “
Hojas: 12.168 “, 255.507 “, 255.507 “ registros
•
Algoritmos de búsqueda e inserción (pg. 168): ver los
Insertar 1: desborde
(nuevo nivel)
0
a datos
a árbol nulo
5
1
•
•
•
•
8
0
5
0
8
0
Insertar 7
0
5
Insertar 3: desborde
(división)
1
5
0
7
0
8
0
0
ejemplos de las 3 páginas siguientes
3
•
•
Todo valor del árbol existe en alguna hoja
Todo valor de nodo interno es un valor extremo derecho
del subárbol situado a su izquierda
1
3
0
5
0
Insertar 12: desborde
(división y se propaga
nuevo nivel)
5
7
0
0
8
0
5
3
1
© A. Jaime 2005
DBD Tema 6
0
3
5
0
8
7
0
© A. Jaime 2005
49
Árbol B+: inserciones (2)
8
12 0
0
DBD Tema 6
50
Árbol B+: eliminaciones
Apuntadores:
a nodo
0
0
Insertar 9
7
a datos
1
9
6
a árbol nulo
5
1
0
5
6
0
0
7
8
0
9
0
12 0
0
Eliminar 5
3
1
0
3
5
0
8
7
0
0
8
9
0
0
7
12 0
Insertar 6: desborde
(división y se propaga)
1
1
0
6
9
6
7
0
8
0
9
0
12 0
0
Eliminar 12: Insuficiencia
(redistribuir)
5
3
1
0
3
0
5
0
7
7
6
0
7
0
8
1
8
0
9
0
12 0
1
0
6
8
6
7
0
8
0
9
0
0
Eliminar 9: insuficiencia
(mezclar con izquierdo, persiste la
insuficiencia, reducción de niveles)
1
1
© A. Jaime 2005
DBD Tema 6
51
© A. Jaime 2005
0
6
6
0
DBD Tema 6
7
0
8
0
52
•
•
•
•
•
© A. Jaime 2005
DBD Tema 6
Fichero de datos: En IS-c e IS-nc se puede tener
cualquier organización primaria (montón, ordenado,
dir. calculado, etc). Pueden definirse varios índices
secundarios (IS-c ó IS-nc) sobre el mismo fichero
Ordenamiento lógico: o poder leer los registros en
orden del campo(s) de indexación. Sólo para índices
secundarios (los primarios y de agrupación tienen otra
opción mejor)
Búsqueda de un registro: igual que IS-c, salvo que
aquí hay que visitar el nivel con bloques de punteros.
Toda búsqueda visita un nodo de cada nivel, un bloque
de punteros (o varios, si no caben todos los punteros
en un bloque) y uno por cada bloque que tenga
registros con el valor buscado (puede haber varios, ya
que no es clave)
Inserción/eliminación de registros: como con cualquier
índice, supone actualizar y reorganizar el índice
55
© A. Jaime 2005
null
null
Cubismo
Impresionismo 161x097
Expresionismo091x073
349x776
Cubismo
Goy1 Maja desnuda 1800 Goya
Goy2 Aquelarre
1823 Goya
Gri1 Guitarra
1913 Gris
1866 Manet
1893 Munch
1937 Picasso
363x437
1642 Rembrandt Barroco
1889 Van Gohg Impresionismo 095x073
318x276
1656 Velázquez Barroco
222x293
1644 Velázquez Barroco
307x367
1634 Velázquez Barroco
1506 Da Vinci Renacimiento 077x053
1497 Da Vinci
1964 Warhol
Man1 El flautista
Mun1 El grito
Pic1 Guernica
Rem1 Ronda noche
Van1 Girasoles
Vel1 Meninas
Vel2 Hilanderas
Vel3 Lanzas
Vin1 Gioconda
Vin2 Última cena
War1 Marilyn
DBD Tema 6
DBD Tema 6
Man1 Pic1
Vel2
Vin2
War1
1750 Canaletto
1866 Manet
Can1 Pz. S. Marco
Man1 El flautista
5
6
068x112
Barroco
Impresionismo 161x097
1913 Gris
061x050
Cubismo
1877 Degas
Impresionismo 024x044
1434 Angelico,F. Gótico
175x080
Gri1 Guitarra
Deg1 Cabaret
Ang1 Anunciación
Impresionismo 095x073
307x367
Barroco
097x190
null
Expresionismo 091x073
Surrealismo 024x033
101x101
Pop Art
1823 Goya
140x435
null
1497 Da Vinci Renacimiento 480x880
1541 Buonarroti Renacimiento 1370x1220
Mun1 El grito
1893 Munch
Dal1 Pers. memoria 1924 Dalí
War1 Marilyn
1964 Warhol
Van1 Girasoles
1889 Van Gohg
Vel3 Lanzas
1634 Velázquez
Goy1 Maja desnuda 1800 Goya
Goy2 Aquelarre
Vin2 Última cena
Buo2 Juicio final
4
Vel3
Vin1
Buo1 Can1 Deg1
3
Warhol
Van Gohg
Velazquez
Picasso
Rembrandt
Manet
Munch
Goya
Gris
Da Vinci
Degas
Canaletto
Dalí
Angélico,F.
Buonarroti
Rembr..
1
2
3
4
5
6
7
Renacimiento 480x880
Pop Art
101x101
318x276
222x293
363x437
Tamaño
2
Vel1
Vel2
Estilo
1
Munch
Rem1
Van1
Pintor
1656 Velázquez Barroco
1644 Velázquez Barroco
1642 Rembrandt Barroco
Año
Vin1 Gioconda
1506 Da Vinci Renacimiento 077x053
Buo1 Creación Adán 1510 Buonarroti Renacimiento null
Pic1 Guernica
349x776
1937 Picasso
Cubismo
Título
Degas
Mun1
Pic1
© A. Jaime 2005
Gri1
Man1
Goy1
Goy2
Dal1
Deg1
Bloque nº:
Vel1 Meninas
Vel2 Hilanderas
Rem1 Ronda noche
ID
Buonarr.. Dalí
097x190
140x435
061x050
Barroco
068x112
Surrealismo 024x033
Impresionismo 024x044
Bloque nº:
Can1 Pz. S. Marco 1750 Canaletto
Dal1 Pers. memoria 1924 Dalí
Deg1 Cabaret
1877 Degas
Buo2
Can1
Índice secundario sobre campo NO clave
con árbol B+ (2)
Ang1 Anunciación 1434 Angelico,F. Gótico
175x080
Buo1 Creación Adán 1510 Buonarroti Renacimiento null
Buo2 Juicio final
1541 Buonarroti Renacimiento 1370x1220
Tamaño
alternativas a este nivel de indirección)
Estilo
Índice secundario sobre campo(s) no clave (IS-nc):
– En el ejemplo se ha definido sobre el campo Pintor
– La diferencia con IS-c es que las hojas pueden
apuntar a los varios registros idéntico valor de
campo de indexación. Por eso incluye un nivel de
indirección a bloques de punteros (existen otras
Pintor
53
Año
•
DBD Tema 6
Título
© A. Jaime 2005
ID
Investigaciones sugieren
– Reducir el % de ocupación
– Permitir que el nodo se vacíe totalmente antes de
fusionar:
• Simplifica la eliminación
• Por simulaciones se sabe que esto no
desperdicia demasiado espacio cuando las
inserciones y borrados se distribuyen
aleatoriamente
ÍNDICE sobre el campo Pintor
(con árbol B+)
•
Ang1
Buo1
Algunos sistemas permiten:
– Elegir el factor de llenado: entre 0,5 . . 1,0
– Indicar un factor distinto para hojas y nodos
internos para los árboles B+
Bloques de
apuntadores
a registro
•
Fichero de DATOS
•
Árboles B y B+: nodos ocupados al menos hasta
la mitad
Árbol B*:
nodos ocupados al menos 2/3
ÍNDICE sobre clave primaria (ID)
(con árbol B+)
•
Fichero de DATOS
(ordenado por clave primaria)
Variaciones de B+
Índice secundario sobre campo NO clave
con árbol B+
Gris
Velazq..
54
7
Índice primario con árbol B+
(campo clave primaria)
Goy2 Van1
Vin1
56
Índice de agrupación con árbol B+ (2)
(campo no clave)
•
1634 Velázquez Barroco
1964 Warhol
Pop Art
Vel3 Lanzas
War1 Marilyn
7
DBD Tema 6
307x367
101x101
1889 Van Gohg Impresionismo 095x073
318x276
1656 Velázquez Barroco
222x293
1644 Velázquez Barroco
Van1 Girasoles
Vel1 Meninas
Vel2 Hilanderas
Warhol
Van Gohg
Velazquez
Picasso
Rembrandt
1893 Munch
Expresionismo 091x073
349x776
1937 Picasso
Cubismo
363x437
1642 Rembrandt Barroco
Mun1 El grito
Pic1 Guernica
Rem1 Ronda noche
Manet
Munch
140x435
null
061x050
Cubismo
Impresionismo 161x097
1823 Goya
1913 Gris
1866 Manet
Goy2 Aquelarre
Gri1 Guitarra
Man1 El flautista
Goya
Gris
Da Vinci
Degas
Renacimiento 480x880
Impresionismo 024x044
097x190
null
Vin2 Última cena 1497 Da Vinci
Deg1 Cabaret
1877 Degas
Goy1 Maja desnuda 1800 Goya
Canaletto
Dalí
068x112
Barroco
Surrealismo 024x033
Renacimiento 077x053
6
58
1634 Velázquez ...
...
1964 Warhol
Vel3 Lanzas
War1 Marilyn
1889 Van Gohg ...
1656 Velázquez ...
1644 Velázquez ...
Van1 Girasoles
Vel1 Meninas
Vel2 Hilanderas
Warhol
Van Gohg
Velazquez
Picasso
Rembrandt
...
1893 Munch
...
1937 Picasso
1642 Rembrandt ...
Mun1 El grito
Pic1 Guernica
Rem1 Ronda noche
Manet
Munch
...
...
...
Velazq..
1434
1497
1506
1510
1541
1634
1823 1750
Rembr..
1642
1644
1656
1750
1924 1893
1823 Goya
1913 Gris
1866 Manet
Goy2 Aquelarre
Gri1 Guitarra
Man1 El flautista
Goya
Gris
Munch
...
...
...
Da Vinci
Degas
Degas
Vin2 Última cena 1497 Da Vinci
Deg1 Cabaret
1877 Degas
Goy1 Maja desnuda 1800 Goya
Canaletto
Dalí
Angélico,F.
Buonarroti
ÍNDICE de agrupación
sobre Pintor
...
Pintor
Año
Buonarr.. Dalí
1800
1823
59
Gris
1866
1877
DBD Tema 6
5
1889
1893
© A. Jaime 2005
4
1913
1924
•
1937
1964
•
3
...
...
...
•
2
Can1 Pz. S. Marco 1750 Canaletto
Dal1 Pers. memoria 1924 Dalí
Vin1 Gioconda
1506 Da Vinci
•
Índice de agrupación (IA):
– En el ejemplo se ha definido sobre el campo Pintor
– Se puede construir similar al IS-c, pero cada valor de
las hojas apunta al bloque de datos donde está el 1º
registro con ese valor (puede haber varios registros
con el mismo valor de Pintor, ya que no es clave)
Fichero de datos: ordenado por campo de indexación
(Pintor). Así, todos los registros del mismo Pintor están
juntos. Por tanto sólo puede definirse un IA por fichero.
Es incompatible con otras organizaciones primarias que
exijan otra ordenación de los registros (IP, dir. calculado,
f. ordenado por otro/s campo/s ...)
Ordenamiento lógico: tampoco tiene sentido ya que los
registros están ordenados físicamente
Búsqueda de un registro: el primer registro con ese valor
se busca igual que en IS-c. El resto de registros con el
mismo valor están seguidos al 1º en el fichero de datos.
Toda búsqueda visita un nodo de cada nivel y los
bloques de datos que tienen registros con el valor
buscado (pueden ser varios, ya que no es clave)
Permite buscar registros que cumplan por ejemplo
Pintor>’Gris’” o por ejemplo ’Goya’≤ID≤‘Velázquez’”
Inserción/eliminación de registros: como con cualquier
índice, supone actualizar y reorganizar el índice
Fichero de DATOS
(ordenado el campo de agrupación)
•
Velazq..
Compatibilidad
ÍNDICE secundario
sobre Año
•
Rembr..
1
© A. Jaime 2005
57
Título
DBD Tema 6
ID
© A. Jaime 2005
Munch
Can1 Pz. S. Marco 1750 Canaletto
Dal1 Pers. memoria 1924 Dalí
Vin1 Gioconda
1506 Da Vinci
Angélico,F.
Buonarroti
Bloque nº:
Degas
Ang1 Anunciación 1434 Angelico,F. Gótico
175x080
Buo1 Creación Adán 1510 Buonarroti Renacimiento null
Buo2 Juicio final
1541 Buonarroti Renacimiento 1370x1220
Tamaño
Estilo
ID
•
Pintor
•
Año
•
•
Buonarr.. Dalí
Título
•
Gris
Ang1 Anunciación 1434 Angelico,F. ...
Buo1 Creación Adán 1510 Buonarroti ...
Buo2 Juicio final
1541 Buonarroti ...
•
Índice primario (IP):
– En el ejemplo se ha definido sobre la clave ID
– Se puede construir igual que IS-c (hay otras
alternativas)
Fichero de datos: ordenado por campo de indexación
(ID). Por tanto sólo puede definirse un IP por fichero.
Es incompatible con otras organizaciones primarias
que exijan otra ordenación de los registros (dir.
calculado, fich. ordenado por otro/s campo/s ...)
Ordenamiento lógico: aquí no tiene sentido ya que los
registros están ordenados físicamente
Búsqueda de un registro: igual que en IS-c.
Toda búsqueda visita un nodo de cada nivel y el
bloque que tiene el registro con el valor buscado
(único, ya que es clave)
Permite buscar registros que cumplan por ejemplo
ID>’Gri1’” o por ejemplo ’Goy1’≤ID≤‘Vel3’”
Inserción/eliminación de registros: como con cualquier
índice, supone actualizar y reorganizar el índice
Fichero de DATOS
(ordenado por campo de agrupación)
•
Índice de agrupación con árbol B+
(campo no clave)
ÍNDICE sobre el campo Pintor
(con árbol B+)
Índice primario con árbol B+ (2)
(campo clave primaria)
1634 1510 1497
1877 1644
© A. Jaime 2005
DBD Tema 6
60
Compatibilidad (2)
Índice denso:
– El que tiene una entrada para cada registro del
fichero de datos
– Los ejemplos anteriores eran densos los índices
sobre clave y no densos los índices sobre no clave.
Índice disperso:
– El que no es denso, es decir, tiene entradas sólo
para algunos registros del fichero de datos
Ejemplo de índice primario disperso: el valor de
cada hoja incluye el mayor valor del campo de
indexación presente en el bloque apuntado. También
puede hacerse lo mismo en índices de agrupación (ya
que se aprovecha la ordenación de los registros)
•
•
© A. Jaime 2005
DBD Tema 6
61
Campo
Búsqueda
(especial
búsquedas)
(= campo esp.)
Montón
(secuencial)
Ninguno
no se puede
Ordenado
de
ordenación
log2 b (clave)
log2 b + ... (no
clave)
Direccio- de direccionamiento namiento
calculado calculado
con índice
primario
Clave
primaria
de
con índice de
agrupación Agrupación
con índice
secundario
sobre clave
de
indexación
con índice
secundario
sobre no clave
Búsqueda
Búsqueda
no se puede
S1:
b
S3:
x+1
(S2)
S4:
x + ...
S5:
x + ...
(S2)
S4:
x + ...
S6:
x+1
S6:
x + ...
S6:
x + ...
S6:
x + ...
b = nº de bloques
x = nº de niveles (del índice, cuando es árbol B+)
Los “...” se completan en el tema de optimización
(estimación de costo en selección)
DBD Tema 6
...
...
Vin2 Última cena
War1 Marilyn
War1
...
...
...
Vel2 Hilanderas
Vel3 Lanzas
Vin1 Gioconda
Vin1
...
...
...
Rem1 Ronda noche
Van1 Girasoles
Vel1 Meninas
Vel1
...
...
...
Gri1
Man1 El flautista
Mun1 El grito
Pic1 Guernica
Pic1
...
...
...
Goy1 Maja desnuda
Goy2 Aquelarre
Gri1 Guitarra
Deg1
...
...
...
62
S1:
b/2 caso
•
intermedio
buscar uno
– Mejor crear un índice para la combinación
En el ejemplo anterior: Pintor + Año
– Consulta: Pinturas de Velázquez realizadas en 1644
– Ni Pintor ni Año son clave (puede haber varios registros
de un pintor y varios de un año)
Estrategias:
– IS-nc(Pintor) y Año sin índice:
Usar el índice para buscar los registros con
Pintor=“Velázquez”. Seleccionar entre ellos los de Año=1644
– IS-nc(Año) y Pintor sin índice:
Usar el índice para buscar los registros con Año=1644.
Seleccionar entre ellos los de Pintor=“Velázquez”
– IS-nc(Pintor) y IS-nc(Año):
Con un índice buscar los de Pintor=“Velázquez” y el otro para
buscar los de Año=1644. Luego hacer la intersección de los
registros encontrados (o de sus punteros)
b caso
peor
o buscar
todos
•
Problema cuando ocurre a la vez lo siguiente:
– Hay muchos cuadros de Velázquez
– Hay muchos cuadros de 1644
Ninguna de
las 3 estrategias
– Hay pocos cuadros de Velázquez
es eficiente
pintados en 1644
•
Solución: índice sobre clave compuesta (también llamada
Suponiendo
que la
organización
primaria sea
fichero de
montón
63
Claves compuestas de varios atributos:
– Que aparecen frecuentemente en consultas
•
S1= lineal, S2=binaria,
S3=un reg. por índice primario o direccionamiento calculado,
S4=varios reg. desigualdad por índice primario o agrupación,
S5=varios reg. igualdad por índice de agrupación,
S6=por índice secundario
© A. Jaime 2005
•
S2:
S3:
1
DBD Tema 6
Índices sobre clave compuesta
(o clave múltiple)
(<,>,≤,≥ campo esp.) (otro campo)
log2 b + ...
Can1 Pz. S. Marco
Dal1 Pers. memoria
Deg1 Cabaret
© A. Jaime 2005
Búsquedas en ficheros
(resumen de costos)
Organización
Del fichero
Ang1 Anunciación
...
Buo1 Creación Adán ...
Buo2 Juicio final
...
Los menores
o igual a
“Buo2”
Buo2
Deg1 Pic1 Vin1
ID
•
•
...
•
En el ejemplo anterior se han definido dos índices
sobre el fichero:
– Un índice de agrupación sobre el campo pintor
(IA(Pintor))
– Un índice secundario sobre el campo no clave
Año (IS-nc(Año)).
– Se podrán definir todos los índices secundarios
que se desee
Causa de las incompatibilidades:
– Se debe a que los registros de un fichero sólo
pueden mantenerse ordenados físicamente por
un único concepto.
– Es decir, no pueden estar ordenados por Pintor
y al mismo tiempo por Título
Por lo tanto podemos afirmar que:
– Un índice secundario (IS-c ó IS-nc) es
compatible con cualquier otra cosa, incluyendo
otros índices secundarios.
– Los índices primarios, los de agrupación, los
ficheros ordenados y los de direccionamiento
calculado sólo son compatibles con índices
secundarios.
– Tampoco se pueden tener dos índices primarios
sobre el mismo fichero, ni dos de agrupación ni
dos ordenaciones distintas ni dos
direccionamientos calculados.
Título
•
Índices densos y dispersos
clave múltiple)
© A. Jaime 2005
DBD Tema 6
64
Índices sobre clave compuesta (2)
(o clave múltiple)
Índices sobre clave compuesta (3)
(o clave múltiple)
•
Manet
1866
Velaz..,
1644
Velázquez, 1656
Warhol, 1964
•
Velázquez, 1634
Velázquez, 1644
Rembrandt, 1642
Van Gohg, 1889
Munch, 1893
Picasso, 1937
Picasso,
1937
Gris, 1913
Manet, 1866
Goya, 1800
Goya, 1823
Goya,
1823
Da Vinci, 1506
Degas, 1877
Dalí, 1924
Da Vinci, 1497
Buonarroti, 1541
Canaletto, 1750
Degas,
1877
•
© A. Jaime 2005
1823 ...
1913 ...
1866 ...
Goya
Gris
Manet
Munch
1893 ...
Picasso
1937 ...
Rembrandt 1642 ...
Van Gohg 1889 ...
Velázquez 1634 ...
Velázquez 1644 ...
Goy2 Aquelarre
Gri1 Guitarra
Man1 El flautista
Mun1 El grito
Pic1 Guernica
Rem1 Ronda noche
Van1 Girasoles
Vel3 Lanzas
Vel2 Hilanderas
Velázquez 1656 ...
Warhol
1964 ...
1506 ...
1877 ...
1800 ...
Vin1 Gioconda
Da Vinci
Deg1 Cabaret
Degas
Goy1 Maja desnuda Goya
DBD Tema 6
Otras estructuras sobre claves múltiples:
– Direccionamiento partido
se estudian
a continuación
– Ficheros rejilla (Grid)
Vel1 Meninas
War1 Marilyn
1750 ...
1924 ...
1497 ...
•
Ang1 Anunciación Angelico,F. 1434 ...
Buo1 Creación Adán Buonarroti 1510 ...
Buo2 Juicio final
Buonarroti 1541 ...
ID
Título
Pintor
Año ...
Fichero de DATOS
(ordenado por el par de campos de agrupación)
Angelico,F., 1434
Buonarroti, 1510
Buon.., Canal..,
1750
1510
Van G..,
1889
Can1 Pz. S. Marco Canaletto
Dal1 Pers. memoria Dalí
Vin2 Última cena Da Vinci
ÍNDICE de agrupación
sobre (Pintor,Año)
Da Vi..,
1497
El ejemplo anterior es un índice de los estudiados
hasta el momento, que se define sobre un conjunto
de campos
Además de índices de agrupación, también se
pueden definir índices primarios y secundarios
sobre clave compuesta.
Los valores de clave compuesta se ordenan
lexicográficamente:
– (“Dalí”,1924) < (“Goya”,1800) para valores
distintos del primer campo
– (“Da Vinci”, 1497) < (“Da Vinci”, 1506) para
valores iguales del primer campo
© A. Jaime 2005
65
Direccionamiento partido
•
•
•
•
•
•
DBD Tema 6
66
Ficheros rejilla (Grid)
Extensión del direccionamiento calculado
Solo admite comparaciones de igualdad
Función hash sobre la clave compuesta:
– Produce n direcciones
– La dirección de la cubeta es la concatenación de las
n direcciones producidas
Ejemplo:
– Pintor=“Munch”, dirección resultante=100 (3 bits)
– Año=1893, dirección resultante=10101 (5 bits)
– Dirección de la cubeta: 100 10101 (concatenados)
– Si solo buscamos los de Año= 1893, examinar las
cubetas 00010101, 00110101, ... , 11110101
Ventajas:
– Se puede aplicar a cualquier nº de atributos
– Los bits de más peso pueden ser de los atributos
accedidos con más frecuencia
– No hace falta una estructura por cada atributo
Inconveniente:
– No se pueden hacer consultas de rango (<,>,≤,≥)
sobre los atributos de la clave compuesta (ejemplo:
Año>1893)
© A. Jaime 2005
DBD Tema 6
67
Fichero de empleados
Escala lineal
para ND
0
0
1, 2
5
1
3, 4
4
2
5
3
3
6, 7
2
4
8
1
5
9, 10
0
Array
rejilla
•
•
•
•
•
1
2
3
4
5
Área de
la cubeta
Área de
la cubeta
Escala lineal para Edad
0
1
2
3
4
5
≤20
21-25
26-30
31-40
41-50
>50
Se construye una escala lineal (o dimensión) por cada
clave de búsqueda
En el ejemplo: escala lineal para ND y otra para Edad
Escala lineal: contiene la distribución uniforme de los
valores de una clave
Array rejilla: cada celda tiene una dirección de cubeta
donde se almacenan los registros correspondientes a
los valores de sus escalas
Para obtener los reg. con ND=4 y Edad=59 se
consulta la celda (1,5). La dirección allí contenida
indica la cubeta a examinar, donde estarán los reg.
con ND=4 y Edad=59
© A. Jaime 2005
DBD Tema 6
68
Ficheros rejilla (Grid) (2)
•
•
•
•
•
•
•
Índices físicos y lógicos
Ventaja: consultas de rango sobre las claves para
las que se han definido escalas lineales
Índices físicos
•
Son los vistos hasta ahora. Si el registro cambia de posición en
el disco hay que cambiar los punteros
Para n claves de búsqueda:
– n puede ser cualquier número
– n escalas lineales
– Array rejilla de n dimensiones
•
Inconveniente: en ocasiones esto precisa muchas
actualizaciones. Considerar por ejemplo un fichero de
direccionamiento calculado con varios índices secundarios
Índices lógicos
El array rejilla permite una partición del fichero de
datos mediante las claves de búsqueda definidas
Además proporciona acceso mediante la
combinación de valores de las dimensiones
Funcionan bien ya que se reduce el tiempo de
acceso sobre clave múltiple
Necesitan más espacio para guardar la estructura
del array rejilla.
Si el fichero es dinámico es necesaria una
reorganización frecuente del mismo
© A. Jaime 2005
DBD Tema 6
69
•
Por ejemplo los índices secundarios de Sql Server son índices
lógicos si se ha definido índice primario para la tabla.
•
Las entradas tienen la forma (K, Kp), donde:
– K: campo de indexación secundaria
– Kp: clave primaria (la de la organización primaria, por
ejemplo direccionamiento calculado)
•
Un índice lógico es un índice secundario especial tal que al
buscar el registro de clave K, encuentra el valor de su clave
primaria Kp (la del registro donde está K). Habrá que usar la
organización primaria (por ejemplo direccionamiento
calculado) para buscar el registro de clave primaria Kp.
•
Incorporan un nivel adicional de indirección
•
Interesantes si las direcciones físicas van a cambiar con
frecuencia.
© A. Jaime 2005
•
•
Connolly / Begg 2002 (16.2, step 5)
Muchos sistemas crean y desechan índices
dinámicamente:
– Ejemplo: para conseguir búsquedas más rápidas
por otros campos de forma temporal
– Se consigue creando índices secundarios (sin
ordenación física)
• Ventaja: se pueden crear con casi cualquier
organización.
• Se utilizan para imponer la restricción de clave
Fichero totalmente invertido:
– Es un fichero de montón
– Que tiene un índice secundario por cada campo
– Los índices casi siempre son árboles B+
– Utilizado por ADABAS (Software AG)
Fichero VSAM de IBM:
– VSAM = método de acceso de almacenamiento
virtual
– Es muy similar a la estructura de árbol B+
© A. Jaime 2005
DBD Tema 6
70
Diseño físico: representación física
Otros tipos de índices: análisis
•
DBD Tema 6
71
•
Objetivo: para cada tabla de la BD encontrar el tipo de
fichero más adecuado y sus índices, de manera que se
consiga un buen rendimiento del sistema.
PASO 1: ANALIZAR LAS TRANSACCIONES
• Objetivo: entender su funcionalidad y estudiar las más
importantes.
• Regla del 80/20: el 20% más activo del total de
transacciones supone el 80% del acceso a datos.
• Se estudia sólo ese 20% (si hay muchas transacciones)
PASO 2: DECIDIR LA ORGANIZACIÓN
PRIMARIA PARA CADA TABLA
• Objetivo: elegir una organización primaria (tipo de
fichero) eficiente para cada tabla
PASO 3: DECIDIR ÍNDICES SECUNDARIOS
ADECUADOS PARA CADA TABLA
• Objetivo: elegir aquellos índices secundarios que
pueden mejorar el rendimiento del sistema de
información.
© A. Jaime 2005
DBD Tema 6
72
Paso 1: Analizar transacciones
Paso 1: Analizar transacciones (2)
1.1. Frecuencia de ejecución de cada transacción
• Por ejemplo: 50 ejecuciones a la hora.
• También interesa conocer los picos. Por ejemplo: de
17:00 a 19:00 habrá 100 ejecuciones por hora.
• Sobre estos datos se aplica la regla 80-20.
• Tendrán mayor prioridad, a disponer por ejemplo de
índice, aquellos atributos accedidos más frecuentemente.
1.3. Acceso a los atributos de las tablas
•
Candidatos a tener estructuras de acceso:
– Atributos en WHERE de SELECT, UPDATE o
DELETE.
– Atributos que aparecen en JOIN.
– Atributos presentes en operaciones que suponen
ordenación: ORDER BY, GROUP BY, UNION,
DISTINCT, ...
1.2. A qué tablas accede cada transacción
•
1)
UPDATE Propiedad SET calle=..., localidad=..., codPostal=...,
tipo=..., habitaciones=..., renta=... WHERE numP=...
2)
SELECT E.cargo, count(*)
FROM Delegacion as D join Empleado as E
on D.numD = E.Delegacion
WHERE D.localidad=“Pamplona”
ORDER BY E.cargo
3)
Tabla
SELECT ...
FROM Propiedad as P
WHERE P.Tipo = ...
Transacción Frecuencia
Veces al día
1
20
Propiedad
3
50
Delegación
2
500
Empleado
2
500
...
...
...
DBD Tema 6
73
•
•
Ejemplo: si obtendremos los empleados en orden alfabético interesa
que la tabla empleado esté ordenada por nombre. Si también se
obtienen los de salario comprendido entre dos valores la ordenación
por nombre NO será de utilidad.
Algunos SGBD sólo admiten definir índices.
Montón:
20
where: numP
3
50
Delegación
2
500
Empleado
2
500
where: tipo
where: localidad
join: numD
join: delegacion
order by: cargo
...
...
...
© A. Jaime 2005
•
•
– Dos opciones:
1. Tabla desordenada (montón/dir. calculado) y crear
IS necesarios.
2. Tabla ordenada con IP o IA y crear IS necesarios.
– ¿Qué atributo(s) se elige(n) para el IP o IA (opción 2)?:
• El(los) más usado(s) en JOINs (podrá hacer la
operación más eficiente)
• El(los) más usado(s) para recorrer las tuplas en
orden respecto al(los) atributo(s) (ej: GROUP BY,
ORDER BY, ...)
© A. Jaime 2005
DBD Tema 6
75
74
Para cada clave extranjera/foránea accedida
frecuentemente Æ Intervienen en joins y el IS podría
hacerlo más eficiente. Hay SGBD que definen
automáticamente IS para cada clave extranjera/foránea
Para atributos frecuentes en WHERE, JOIN, u
operaciones que precisan ordenación: ORDER BY,
GROUP BY, UNION, DISTINCT, ... Æ Podrían obtenerse
los resultados finales o intermedios recorriendo el IS o
aprovechando la ordenación lógica de sus hojas.
Direccionamiento calculado:
Índice primario (IP) ó índice de agrupación (IA):
DBD Tema 6
Cuándo SÍ crearlos
•
– Si es importante mejorar una condición de igualdad
sobre el atributo o atributos (where o join).
– NO es útil para acceso en orden por el(los) atributo(s) ni
consulta de rango (<=, >=, <, >, between, ...).
– Si la tabla crece y disminuye continuamente convendría
usar direccionamiento calculado dinámico.
...
Paso 3: Decidir índices secundarios
– Si la tabla tendrá pocas filas.
– Si las consultas acceden a todas las filas (sin especificar
ningún orden).
•
Atributos
1
Paso 2: Decidir la organización primaria
•
Transacción Frecuencia
Veces al día
Propiedad
Tabla
© A. Jaime 2005
Candidatos a evitar estructuras de acceso:
– En UPDATE los atributos del SET (los
modificados)
•
Plan sobre un sólo índice: cuando se puede resolver la
consulta con sólo recorrer el índice. Ejemplo:
por ejemplo con
SELECT delegación, AVG(salario)
IS(salario, delegación)
FROM empleado
ó con
GROUP BY delegación
IS(delegación, salario)
•
Con OR en WHERE sólo es útil tener índices para todo:
SELECT *
FROM Propiedad
WHERE tipo=“piso” OR renta>600 OR habitaciones>2
Si existen sólo IS(tipo) e IS(renta) es necesario recorrer
Propiedad para obtener las tuplas con habitaciones>2. Por
tanto esos IS no acelerarían la consulta. Sí sirven si hubiera
ANDs en lugar de OR.
Con IS(tipo, renta, habitaciones) se pueden beneficiar tanto la
consulta con OR como con AND.
© A. Jaime 2005
DBD Tema 6
76
•
Paso 3: Decidir índices secundarios (2)
Ejemplo de diseño físico
Cuándo NO crearlos
(tomamos el 20% más activo de 20 transacciones)
Si la tabla es muy pequeña Æ Puede ser más eficiente
cargar la tabla entera en memoria.
•
Si se actualizan frecuentemente el o los atributos
(UPDATE) o la tabla (INSERT/DELETE) Æ supondría
modificar también los índices.
•
Si el resultado de la consulta incluye una proporción
grande de la tabla (ej: el 70 % de las tuplas) Æ exige
recorrer gran parte de la tabla
Empleado tiene 5.000 filas en 500 bloques y Propiedad 50.000
filas en 5000 bloques.
1. 200 veces al día
SELECT E.*
FROM Empleado AS E JOIN Empleado AS J
ON E.Jefe=J.NumE
WHERE J.Nombre=@nom AND J.Apellido=@ape
AND J.Delegacion=@dele
2. 300 veces al día
SELECT E.*
FROM Empleado AS E
WHERE E.Cargo=@cargo AND E.Delegacion=@dele
ORDER BY E.Apellido, E.Nombre
3. 1000 veces al día
•
Si el atributo contiene cadenas de caracteres muy
largas (ejemplo: párrafos) Æ entrarían pocos valores en
cada nodo del índice disminuyendo su eficiencia
•
Menos importante:
– Si hay escasez de espacio en disco Æ los IS ocupan
disco.
– Cuantos más IS más tarda el optimizador en decidirse
SELECT E.*
FROM Propiedad AS P JOIN Empleado AS E
ON P.Empleado=E.NumE
WHERE E.Nombre=@nom AND E.Apellido=@ape
AND E.Delegacion=@dele
4. 5000 veces al día
SELECT P.*
FROM Propiedad AS P
WHERE P.Localidad=@loc AND P.Renta<=@rent_max
Tabla Trans. Frec.
•
•
•
En todos los casos: lo mejor es hacer pruebas sobre el
resultado que ofrecen los IS frente a no tenerlos.
Es útil usar las herramientas del SGBD que muestran el
plan de ejecución.
Hay que tener en cuenta que el SGBD crea índices para
garantizar la unicidad de los atributos clave (primary
key y unique)
© A. Jaime 2005
DBD Tema 6
77
1
Empleado
2
3
Propiedad
3
4
Organización
e índices secun.
Atributos
j: jefe, numE
200 w:nombre, apellido,
delegación
w: cargo, delegación
300 o: apellido, nombre
j: numE
1000 w: nombre, apellido,
delegación
1000 j: empleado
5000 w: localidad, renta
© A. Jaime 2005
También
IP(numE)
DC(numE)
IS-nc(jefe)
IS-nc(apellido,
nombre, delegación)
IA(localidad, renta)
IS-nc(empleado)
DBD Tema 6
78
Ejercicio: acceso a ficheros de montón
PROYECTO es un fichero de montón con factor de bloques 2:
PROYECTO
NOMBREP
ProductoX
ProductoY
ProductoZ
Automatización
Reorganización
NuevasPrestaciones
Ejercicios
NÚMEROP
LUGARP
NÚMD
1
2
3
10
20
30
Belén
Sacramento
Higueras
Santiago
Higueras
Santiago
5
5
5
4
1
4
El siguiente programa escribe la información del proyecto 20:
open(F,in_file,”PROYECTO.dat”);
while not end_of_file(F) loop
read(F, R);
if R.númerop = 20 then
put(R.nombrep); put(R.númerop); put(R.lugarp);
put(R.numd); new_line; exit;
end if;
end loop;
close(F);
El descriptor del fichero incluye las siguientes direcciones de
bloque: 1003, 1004 y 2007
Cada vez que se transfiere un bloque a memoria se ejecuta la
operación transferir nº bloque nº búfer
Se pide:
a) Escribe en orden de ejecución las operaciones transferir y
read considerando que se dispone de un solo búfer.
b) Haz lo mismo si se dispone de 2 búferes.
c) Haz lo mismo que en el apartado a, si en vez de escribir por
pantalla se modifica R.númerop a 3 y se modifica el fichero
con update
© A. Jaime 2005
DBD Tema 6
79
© A. Jaime 2005
DBD Tema 6
80
Ejercicio: acceso a ficheros de montón (2)
a) Sabiendo que los bloques 1003, 1004 y 2007 son contiguos y que:
– Tiempo medio de búsqueda: 8 mseg.
– Retardo rotacional medio: 0,7 mseg.
– Tiempo de transferencia de un bloque: 0,3 mseg.
– Tiempo de proceso de un bloque: 0, 00004 mseg.
Obtener el tiempo necesario para leer completo el fichero
anterior:
– Con un único búfer
– Con dos búferes
b) Hacer lo mismo que en el apartado anterior cuando los bloques
NO son contiguos y además están en diferentes cilindros.
– ¿Que sucedería si el tiempo de proceso de un bloque fuese
de 0,12 mseg.?
c) Un fichero tiene 2.005 registros de 100 bytes cada uno. Calcula el
número de bloques necesarios si:
– El factor de bloques es 1 (1 reg.en cada bloque)
– El factor de bloques es 25
© A. Jaime 2005
DBD Tema 6
81
Ejercicio: acceso a ficheros ordenados
PROYECTO es un fichero ordenado por Númerop con factor de
bloques 1: PROYECTO
NÚMEROP
LUGARP
NÚMD
1
2
3
10
20
30
Belén
Sacramento
Higueras
Santiago
Higueras
Santiago
5
5
5
4
1
4
a) Sabiendo que h(k) obtiene lo siguiente para los valores de
Númerop: h(1)=1, h(2)=10, h(3)=6, h(10)=1, h(20)=10,
h(30)=4; dibuja el fichero de direccionamiento calculado
resultante de insertar los registros del fichero PROYECTO
en el siguiente orden de Númerop: 1, 3, 10, 20, 30, 2
b) Cuántos accesos a disco (transferencias de bloque) han sido
necesarios para crear el fichero.
c) Cuántos accesos a disco son necesarios para encontrar el
registro de clave de direccionamiento calculado 30.
d) Cuántos para encontrar el registro de Nombrep=‘Automatización’. Haz lo mismo para el registro de ‘Reorganización’.
e) Cuántos para insertar el registro de clave de
direccionamiento calculado 80, donde h(80)=6
f) Cuántos para insertar el registro de clave de
direccionamiento calculado 18, con h(18)=10
g) Cuántos para borrar el registro de clave de dir. calculado 2
(suponer que no se han insertado ninguno de los anteriores)
DBD Tema 6
NÚMD
Belén
Sacramento
Higueras
Santiago
Higueras
Santiago
5
5
5
4
1
4
© A. Jaime 2005
DBD Tema 6
82
Ejercicio: ficheros con índices
El fichero cuenta con un array con punteros a 20 cubetas
principales (numeradas del 0 al 19) y una función hash h(k)
© A. Jaime 2005
LUGARP
1
2
3
10
20
30
El descriptor del fichero incluye las siguientes direcciones de
bloque: 1003, 1004, 2000, 2010, 3002 y 2007
Se pide:
a) Escribe en orden de ejecución las operaciones transferir
considerando que se dispone de un solo búfer.
b) Escribe las operaciones transferir si en lugar de escribir por
pantalla se modifica el campo númerop del registro leído a 4 en
el fichero con update
c) Qué operaciones transferir tendrán lugar si deseamos insertar
el registro con núperop = 25 con insert
PROYECTO es un fichero con clave de direccionamiento
calculado Númerop. El factor de bloques es 2 y las cubetas
constan de un solo bloque.
ProductoX
ProductoY
ProductoZ
Automatización
Reorganización
NuevasPrestaciones
NÚMEROP
ProductoX
ProductoY
ProductoZ
Automatización
Reorganización
NuevasPrestaciones
Supuesto que se dispone de la operación read_binario (que realiza
una búsqueda binaria), el siguiente programa escribe la información
del proyecto 20:
open(F,in_file,”PROYECTO.dat”);
read_binario(F, 20, R);
if R.númerop = 20 then
put(R.nombrep); put(R.númerop); put(R.lugarp);
put(R.numd); new_line;
end if;
close(F);
Ejercicio: acceso a ficheros de
direccionamiento calculado
PROYECTO
NOMBREP
NOMBREP
83
PROYECTO
NOMBREP
ProductoX
ProductoY
ProductoZ
Automatización
Reorganización
NuevasPrestaciones
NÚMEROP
LUGARP
NÚMD
1
2
3
10
20
30
Belén
Sacramento
Higueras
Santiago
Higueras
Santiago
5
5
5
4
1
4
a) Dibuja el fichero PROYECTO si sus datos se organizan
según un índice primario de un nivel sobre NÚMEROP, con
factor de bloques 2 para los datos y 6 para el índice.
b) Haz lo mismo si se organizan según un índice primario de
un nivel sobre NOMBREP con los mismos factores de
bloques que en el apartado anterior.
c) Dibújalo ahora según un índice de agrupación de un nivel
sobre NÚMD, con idénticos factores de bloques que en el
apartado a.
d)
Sobre el fichero del primer ejercicio se ha definido un
índice secundario de un nivel sobre NOMBREP y otro sobre
LUGARP, ambos índices con factor de bloques 3. Dibújalo.
e) Dibuja el fichero PROYECTO si sus datos se organizan con
un único índice secundario de un nivel sobre NÚMD con
factor de bloques 2 para índice y datos.
f)
Qué índices de los apartados anteriores son densos y cuáles
son dispersos.
© A. Jaime 2005
DBD Tema 6
84
Ejercicio: ficheros con índices (2)
PROYECTO
NOMBREP
Ejercicio: diseño físico en BD Hospital
Paciente NSS Nombre Edad Médico Enfermedad Nom Descripción
5.000 filas
500 filas
NÚMEROP
LUGARP
NÚMD
1
2
3
10
20
30
Belén
Sacramento
Higueras
Santiago
Higueras
Santiago
5
5
5
4
1
4
ProductoX
ProductoY
ProductoZ
Automatización
Reorganización
NuevasPrestaciones
Medicamento Cod Nombre Dosis
10.000 filas
Con óvalo
claves
alternativas
Médico Cod Nombre Especialidad
50 filas
Tratamiento Paciente Enfermedad Medicamento Duración
100.000 filas
g) Dibuja el fichero del ejercicio d con todos los índices como
árboles B+, donde en cada nodo (interno u hoja) entran 3
claves (en todos los índices).
1) 500 veces al día
SELECT P.*
FROM Paciente AS P JOIN Medico as M ON P.Médico=M.Cod
WHERE M.Nombre=@nomMedico
h) Haz lo mismo para el ejercicio c, con las mismas
suposiciones para los árboles B+.
i)
Cuenta el número de accesos necesarios para ejecutar la
operación σNÚMEROP=59 en los ficheros de los ejercicios a, b y
g, contando con un búfer para datos y otro para índices.
j)
Haz lo mismo para σNÚMD=4 en los ficheros de los ejercicios
c, e y h, contando con un búfer para datos y otro para
índices.
k) Haz lo mismo para insertar <ProductoJ, 25, Donostia, 1> en
los ficheros de los ejercicios a y h.
© A. Jaime 2005
DBD Tema 6
85
Ejercicio: diseño físico en BD Agencias de Viajes
No hay
claves
alternativas
Agencia
1.000 filas Cod
Cliente
20.000 filas
Hotel
1.000 filas
Empresa
Cod Nombre Apellido1
Nombre Localidad
Reserva
100.000 filas
Dir
Categoría
Dir Tfno
NumHabitaciones
DBD Tema 6
3) 1.000 veces al día
SELECT M.Especialidad, M.Nombre
FROM (Tratamiento AS T JOIN Paciente AS P
ON T.Paciente=P.NSS) JOIN Médico AS M
ON P.Médico=M.Cod
WHERE T.Enfermedad=@nomEnfermedad
ORDER BY M.Especialidad
© A. Jaime 2005
DBD Tema 6
86
Ejercicio: diseño físico en BD Pruebas Deportivas
Prueba Cod Categoría
200 filas
Estadio
10 filas
Asignación
Hotel Localidad Agencia Cliente Fecha
24.000 filas
Propón una representación física para la BD anterior capaz de
proporcionar un buen rendimiento para las siguientes operaciones:
1) 10.000 veces al día
SELECT C.Apellido1, C. Apellido2, C.Nombre
FROM Reserva AS R JOIN Cliente as C ON R.Cliente=C.Cod
WHERE R.Hotel=@hotel AND R.Localidad=@localidad
2) 5.000 veces al día
SELECT C.Apellido1, C. Apellido2, C.Nombre
FROM Reserva AS R JOIN Cliente as C ON R.Cliente=C.Cod
WHERE R.Fecha>=@inicio AND R.Fecha<=@fin
3) 100 veces al día
SELECT DISTINCT H.Nombre
FROM Hotel AS H
ORDER BY H.Nombre
4) 500 veces al día
SELECT C.Apellido1, C. Apellido2, C.Nombre, A.Empresa, A.Dir
FROM (Cliente AS C JOIN Reserva as R ON C.Cod=R.Cliente)
JOIN Agencia AS A ON R.Agencia=A.cod
WHERE C.Tfno=@tfno
© A. Jaime 2005
2) 2.000 veces al día
SELECT T.Enfermedad, M.Nombre
FROM (Paciente AS P JOIN Tratamiento AS T
ON P.NSS=T.Paciente) JOIN Medicamento AS M
ON T.Medicamento=M.Cod
WHERE P.Nombre=@nomPaciente
ORDER BY T.Enfermedad, M.Nombre
Deportista Cod Nombre Edad País
8.000 filas
Contacto
Apellido2
Propón una representación física para la BD anterior capaz de
proporcionar un buen rendimiento para las siguientes operaciones:
87
Nombre Tipo
Cod Nombre Localidad
Deportista
Con óvalo
claves
alternativas
Prueba
Aforo
Estadio
Propón una representación física para la BD anterior capaz de
proporcionar un buen rendimiento para las siguientes operaciones:
1) 100 veces al día
SELECT D.País, D.Nombre
FROM Deportista AS D
ORDER BY D.País, D.Nombre
2) 200 veces al día
SELECT E.Nombre, E.Localidad, P.Nombre, P.Categoría, P.Tipo
FROM (Estadio AS E JOIN Asignación AS A ON
E.Cod=A.Estadio) JOIN Prueba AS P ON A.Prueba=P.Cod
3) 1.000 veces al día
SELECT P.*
FROM Asignación AS A JOIN Prueba AS P ON A.Prueba=P.Cod
WHERE A.Deportista=@codDeportista
4) 10.000 veces al día
SELECT D.Nombre, D.País
FROM (Asignación AS A JOIN Estadio AS E ON A.Estadio
=E.Cod) JOIN Deportista AS D ON A.Deportista=D.Cod
WHERE E.Nombre=@nomEstadio AND E.Localidad=@localidad
AND A.Prueba=@Prueba
ORDER BY D.Nombre
© A. Jaime 2005
DBD Tema 6
88
Ejercicio: diseño físico en BD Mariposas
Ejercicio: diseño físico en BD Comida rápida
Coleccionista Cod Nombre Dirección Tfno Colección
4.500 filas
Colección Cod Ubicación PrecioEstimado Tipo
3.000 filas
Ejemplar
1.000.000 filas
NomCientífico Numero Procedencia Tamaño Colección
Mariposa NomCientífico Origen Hábitat EsperanzaVida Especie
Especie
Nombre
Características
No hay claves
alternativas
1) 1000 veces al día
SELECT DISTINCT Esp.Nombre, Esp.Características
FROM ((Coleccionista AS C JOIN Ejemplar AS E
ON C.Colección=E.Colección) JOIN Mariposa AS M
ON E.NomCientifico=M.NomCientifico)
JOIN Especie AS Esp ON M.Especie=Esp.Nombre
WHERE C.Cod=@coleccionista
2) 2000 veces al día
SELECT DISTINCT C.Cod, C.PrecioEstimado
FROM (Mariposa AS M JOIN Ejemplar AS E
ON M.NomCientifico=E.NomCientifico)
JOIN Colección AS C ON E.Colección=C.Cod
WHERE M.Hábitat=@hábitat
3) 800 veces al día
SELECT C.Cod, C.Nombre, C.Colección
FROM Coleccionista AS C
ORDER BY C.Cod
4) 20.000 veces al día
SELECT E.*
FROM Colección AS C JOIN Ejemplar AS E
ON C.Cod= E.Colección
WHERE C.Cod=@coleccion
© A. Jaime 2005
DBD Tema 6
50 filas
NomArt Tipo Precio Tamaño
Ingrediente NomIngr Precio Suministrador
500 filas
100.000 filas
10.000 filas
Artículo
89
Pedido
100.000 filas
Art_Ingr NomIng NomArt
1.000 filas
Número Tfno Fecha HoraPedido HoraServido
Ped_Art Número NomArt Cantidad
300.000 filas
Con óvalo
claves
alternativas
Propón una representación física para la BD anterior capaz de
proporcionar un buen rendimiento para las siguientes operaciones:
1) 1.000 veces al día
SELECT I.Suministrador, I.NomIngr
FROM Ingrediente AS I
ORDER BY I.Suministrador, I. NomIngr
2) 300 Veces al día
SELECT A.Tamaño
FROM (Articulo AS A JOIN Art_Ingr AS AI
ON A.NomArt=AI.NomArt) JOIN Ingrediente AS I
ON AI.NomIngr=I.NomIngr
WHERE I.Precio = @precio
3) 100 Veces al día
SELECT A.NomArt, A.Precio
FROM Articulo AS A
ORDER BY A.NomArt
4) 5.000 Veces al día
SELECT P.*, SUM(PA.Cantidad*A.Precio) AS PrecioPedido
FROM (Pedido AS P JOIN Ped_Art AS PA
ON P.Numero=PA.Numero) JOIN Articulo AS A
ON PA.NomArt=A.NomArt
WHERE P.Numero=@pedido
GROUP BY P.Numero
© A. Jaime 2005
DBD Tema 6
90
Descargar