tema 6. organización interna y diseño físico ... · organización interna y diseño físico...

23
1 © A. Jaime 2005 DBD Tema 6 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 •Índices basados en árboles B + •Índices sobre claves múltiples •Otros tipos de índices Estructuras de índices para ficheros Elmasri/Navathe 02 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 2 © A. Jaime 2005 DBD Tema 6 Almacenamiento de datos 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 3 © A. Jaime 2005 DBD Tema 6 Almacenamiento secundario de datos 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 4 © A. Jaime 2005 DBD Tema 6 Almacenamiento de BD 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

Upload: lethuan

Post on 14-Oct-2018

233 views

Category:

Documents


0 download

TRANSCRIPT

1© A. Jaime 2005 DBD Tema 6

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

•Índices basados en árboles B+

•Índices sobre claves múltiples•Otros tipos de índices

Estructuras de índices para ficherosElmasri/Navathe 02

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

2© A. Jaime 2005 DBD Tema 6

Almacenamiento de datos

• 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

3© A. Jaime 2005 DBD Tema 6

Almacenamiento secundario de datos

• 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

4© A. Jaime 2005 DBD Tema 6

Almacenamiento de BD

• 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

5© A. Jaime 2005 DBD Tema 6

Discos magnéticos

• 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.

• Una cabeza móvil o varias cabezas fijas sobre las pistas (lo segundo es más rápido pero más caro y menos utilizado)

• Nº pistas: varía de cientos a miles de pistas por superficie

...

EjeRotación del disco

Pistas del mismo cilindro

Impulsor

Pista

Sector

Movimientoimpulsor

Cabeza delectura/escrituraBrazo

bloques de datos

6© A. Jaime 2005 DBD Tema 6

Discos magnéticos (2)

• 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)

• 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

• El controlador de disco hace de interfaz entre el disco y el sistema computador. Son muy utilizados los controladores SCSI, IDE ...

7© A. Jaime 2005 DBD Tema 6

Registro, bloque y búfer

• 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

• 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

DISCO

una pista bloques

MEMORIA

Búfer

registros

El bloque es la unidad de transferencia entre disco y memoriay entre memoria y disco

8© A. Jaime 2005 DBD Tema 6

Tiempo de acceso a los datos del disco

• 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

9© A. Jaime 2005 DBD Tema 6

Tecnología RAID

• 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– Transferencia : ≈20% anual– Capacidad: >50% anual

• 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

Magnitudes muy inferiores

FicheroA A4A3A2A1

Franjeode datos

Disco 0 Disco 1 Disco 2 Disco 3

Los 4 discos se ven como un disco grande

10© A. Jaime 2005 DBD Tema 6

Cómo mejorar la fiabilidad en RAID

• La probabilidad de error en banco de n discos es nveces 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)

• 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:

– Espacio de disco extra– Operaciones E/S extra– Computación extra para:

• Mantener coherente los datos redundantes• Recuperación ante fallos

11© A. Jaime 2005 DBD Tema 6

Cómo mejorar la fiabilidad en RAID (2)

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.

2. Guardar información de control extra:– Para reconstruir la información perdida en caso

de fallos

12© A. Jaime 2005 DBD Tema 6

Cómo mejorar la fiabilidad en RAID (3)

La introducción de redundancia debe considerar dos problemas:

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. 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

13© A. Jaime 2005 DBD Tema 6

Mejora del rendimiento con RAID

• 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)

• 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

FicheroA A4A3A2A1

Franjeode datos

en el nivelde bloque

Disco 0 Disco 1 Disco 2 Disco 3

Los 4 discos se ven como un disco grande

14© A. Jaime 2005 DBD Tema 6

Organizaciones RAID y niveles

• 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)

15© A. Jaime 2005 DBD Tema 6

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

tiempo

Bloque dedisco: E/S

Bloque dedisco: PROCE-

SAMIENTO

illenar A

i+1llenar B

i+2llenar A

iproc. A

i+1proc. B

i+2proc. A

Fig. 5.6 Empleo de dos búferes (A y B) para leer del disco

16© A. Jaime 2005 DBD Tema 6

Tipos de registro

• 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

• Los lenguajes de programación (Ada, C, …) permiten definir registros (record, struct,…)

17© A. Jaime 2005 DBD Tema 6

Registros: longitud fija o variable

• 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

Fig. 5.7 a. Registro de longitud fija con 3 campos y 60 bytes

NOMBRE NSS DPTO

... ...1 31 40 60

NOMBRE NSS DPTO

Fig. 5.7 b. Registro con 2 campos de longitud fija (NSS y DPTO) y 2 de longitud variable(NOMBRE y SALARIO)

SALARIO

Carácter separador Carácter separador

NOMBRE=Juan Sánchez NSS=113 DPTO=LSI

Fig. 5.7c. Registro con campos de longitud variable y varios tipos de carácter separador

Separadorfin campo

Separadorfin registro

Separadorfin campo

Separadornombre-valor

Separadornombre-valor

Separadornombre-valor

18© A. Jaime 2005 DBD Tema 6

Factor de bloques

• 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

B - (fbl * R) bytes

fbl = ⎣(B/R)⎦ registros por bloquedonde: B= nº bytes por bloque

R= nº bytes por registro (tamaño fijo)

• Puede quedar espacio desocupado en los bloques:

DISCO

una pista bloques

MEMORIA

Búfer 1

Búfer 2

Sólo entran 3 registros en el bloque. ¿fbl?

Sólo entran 2 registros en el bloque. ¿fbl?

Todos los bloques de un mismo disco son del mismo tamaño

19© A. Jaime 2005 DBD Tema 6

Organizaciones extendida y no extendida

• 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

• Organización NO extendida:– los registros no se parten en distintos bloques– El proceso de los registros es más simple

Registro 1 Registro 2 Registro 3Registro 4

Registro 4 (cont) Registro 6

Bloquei

Bloquei+1 Registro 5

Registro 1 Registro 2 Registro 3

Registro 4 Registro 5

Bloquei

Bloquei+1

20© A. Jaime 2005 DBD Tema 6

Técnicas de asignación de los bloques de un fichero en disco

• 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

21© A. Jaime 2005 DBD Tema 6

Descriptor o cabecera de un fichero

• 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

22© A. Jaime 2005 DBD Tema 6

Operaciones con ficheros

– 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

Caso simple: reescribiendo en disco el bloque donde está el

registro

23© A. Jaime 2005 DBD Tema 6

Operaciones con ficheros (2)

– 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

24© A. Jaime 2005 DBD Tema 6

Organización y método de acceso

• Organización del fichero: – Cómo se colocan los

registros y bloques– Cómo interconectan

• Método de acceso:– Programas que permiten

realizar ciertas operaciones sobre el fichero

• 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

• 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

•de montón, •ordenado,•de direccionamientocalculado,

•indexado (primario, de agrupación, secundario)

•recorrer en secuencia, •localizar uno concreto, •buscar los que cumplanuna condición, ...

25© A. Jaime 2005 DBD Tema 6

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

• 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

del ficheroNingún registro cumple

la condición Hay que obtener todos los que la cumplen

26© A. Jaime 2005 DBD Tema 6

Eliminació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

– 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

– Solución 1: reorganización periódica del fichero (para recuperar el espacio desocupado)

• Recorrer secuencialmente los bloques• Recolocar los registros quitando los huecos

– Solución 2: intentar insertar sobre huecos y si no se puede insertar al final

• Cálculos adicionales para encontrar bloques con huecos

27© A. Jaime 2005 DBD Tema 6

Modificación en ficheros de montón

• 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

– Problema: registros de tamaño variable

– Solución: • Eliminar el registro a modificar• Insertar el registro modificado

28© A. Jaime 2005 DBD Tema 6

Caso especial de ficheros de montón:ficheros relativos o directos

• 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

29© A. Jaime 2005 DBD Tema 6

Ficheros ordenados

• 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

Aaron, EdAbbott, Diane

Acosta, Marc

Adams, JohnAdams, Robin

Akers, Jan

Wright, PamWyatt, Charles

Zimmer, Byron

NOMBRE NSS F_NCTO SALARIO SEXO

...

Bloque 1

Bloque 2

Bloque n

......

...

Fig. 5.9 Bloques de un fichero ordenado (secuencial) de registrosEMPLEADO con NOMBRE como campo clave de ordenación

NO se trata de un fichero de montón recién ordenado

30© A. Jaime 2005 DBD Tema 6

Ficheros ordenados: ventajas

• 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

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á)

• 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

31© A. Jaime 2005 DBD Tema 6

Ficheros ordenados: operaciones

• Se debe mantener el orden de los registros• Inserción y eliminación: operaciones costosas

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

32© A. Jaime 2005 DBD Tema 6

Ficheros ordenados: operaciones (2)

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

33© A. Jaime 2005 DBD Tema 6

Técnicas de direccionamiento calculado (hashing)

• 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

34© A. Jaime 2005 DBD Tema 6

Direccionamiento calculado interno

• Array de 0..M-1 registros• Elegir función de direccionamiento calculado:

h(k)= k mod M• k real: conversión previa a entero• k string: conversión a entero usando los códigos

• 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

NOMBRE NSS SALARIO

...

012

M-1

k valor de campo dir.cal.

35© A. Jaime 2005 DBD Tema 6

Direccionamiento calculado interno (2)Métodos para resolución de colisiones

• 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

0123

m-1m

m+1m+2

-1-1-1m

m+1-1

m+2-1-1

m-2

NOM NSS FNAC SALARIOSEXO

Campos de datos

...

m+k-1 -1

...

Espaciode

direcciones

Espaciode

desborda-miento

Apuntadordesbordamiento

Fig. 5.10 (b) Resolución de colisiones por encadenamiento

Apunta al siguienteregistro de la lista enlazada.-1 = puntero a nulo

• 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

36© A. Jaime 2005 DBD Tema 6

Direccionamiento calculado interno (3)

• Buscar, insertar y eliminar:– Encadenamiento: algoritmos más simples– Direccionamiento abierto: eliminación

complicada

• Objetivo de una buena función de direcciona-miento 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:

• Conviene que M=2k

37© A. Jaime 2005 DBD Tema 6

Direccionamiento calculado externo

• 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

0

1

2

M-1

...

Nº relativode cubeta Dirección de bloque en disco

Tabla contenida en el descriptordel fichero de direccionamiento

calculado

Fig. 5.11 Correspondencia entre número de cubeta y dirección de bloque en disco

38© A. Jaime 2005 DBD Tema 6

Direccionamiento calculado externo (2)

• 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

340460

Cubeta 0

Cubetasprincipales

Cubetas de desbordamiento

580

321761

nulo91

...

39989

Cubeta M-1

630

981

182

nulo

652 nulo

...

Puntero aregistro

Punterosa registro

0

1

M-1

...

Nº de cubeta

Direcciónde bloque en disco

Puntero aregistro

Puntero aregistro

DatosDatos DatosDatos

Cubeta 1

En descriptor

Fig. 5.12 Manejo de desbordamiento de cubeta por encadenamiento

39© A. Jaime 2005 DBD Tema 6

Problemas y operaciones en direccionamiento calculado externo

• 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

• 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

40© A. Jaime 2005 DBD Tema 6

Direccionamiento calculado con expansión dinámica

• 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

(no los vamos a estudiar)

41© A. Jaime 2005 DBD Tema 6

Ficheros de registros mixtos

• 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

42© A. Jaime 2005 DBD Tema 6

Índices

• 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:– Índices secundarios sobre clave– Índices secundarios sobre no clave– Índices primarios (sobre clave)– Índices de agrupación (sobre no clave)

• Los índices secundarios (o caminos de accesosecundario) 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)

• 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:– Campo del fichero– Conjunto de campos del fichero

• También se distingue entre índices:– Físicos (con punteros)– Lógicos (con valores de clave primaria)

– Índice compuesto– Direccionamiento

partido– Ficheros rejilla

43© A. Jaime 2005 DBD Tema 6

Índice secundario sobre campo clavecon árbol B+

Buo1

Ang1

Buo2

Can1

Dal1

Deg1

Goy2

Goy1

Gri1

Man1

Pic1

Mun1

Rem1

Van1

Vel2

Vel1

Vin1

Vel3

War1

Vin2

Buo1 Can1 Deg1 Man1 Pic1 Vel2 Vin1

Goy2 Van1

Fich

ero

de D

ATO

SÍN

DIC

E so

bre

el c

ampo

ID(c

on á

rbol

B+ )

Bloque nº:

Gio

cond

a

Gira

sole

s

Mar

ilyn

Aqu

elar

re

Gue

rnic

a

Lanz

asM

aja

desn

uda

Gui

tarr

a

El fl

autis

ta

Cre

ació

n A

dán

Últi

ma

cena

Juic

io fi

nal

Men

inas

El g

rito

Pers

. mem

oria

Ron

da n

oche

Hila

nder

as16

44V

eláz

quez

Bar

roco

222x

293

Cab

aret

Anu

ncia

ción

Pz. S

. Mar

co

1656

Vel

ázqu

ez

1506

Da

Vin

ci16

42R

embr

andt

1937

Pica

sso

1510

Buo

narr

oti

1924

Dal

í18

93M

unch

1889

Van

Goh

g19

64W

arho

l

1800

1634

Vel

ázqu

ez

1823

Goy

aG

oya

1541

Buo

narr

oti

1497

Da

Vin

ci

1877

Deg

as19

13G

ris

1434

Ang

elic

o,F.

1866

Man

et17

50C

anal

etto

Bar

roco

318x

276

Ren

acim

ient

o07

7x05

3B

arro

co36

3x43

7

Cub

ism

o34

9x77

6R

enac

imie

nto

null

Surr

ealis

mo

024x

033

Exp

resi

onis

mo0

91x0

73

Impr

esio

nism

o09

5x07

3Po

p A

rt10

1x10

1

null

097x

190

Bar

roco

307x

367

Ren

acim

ient

o48

0x88

0nu

ll14

0x43

5

Cub

ism

o06

1x05

0R

enac

imie

nto

1370

x122

0

Gót

ico

175x

080

Impr

esio

nism

o02

4x04

4

Impr

esio

nism

o16

1x09

7B

arro

co06

8x11

2

Vel2

Vel1

Vin1

Rem1

Pic1

Buo1

Dal1

Mun1

Van1

War1

Vel3

Goy2

Goy1

Buo2

Vin2

Deg1

Gri1

Ang1

Man1

Can1

Títu

loA

ñoPi

ntor

Est

iloT

amañ

oID

1 2 76543

44© A. Jaime 2005 DBD Tema 6

Índice secundario sobre campo clavecon árbol B+ (2)

• Í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

45© A. Jaime 2005 DBD Tema 6

Terminología de árboles

A

B

E F

C D

G H I

K

Nodo raíz(nivel 0)

Nodos delnivel 1

Nodos delnivel 2

Nodos delnivel 3J

(Los nodos E, J, C, G, H y K son los nodos hoja del árbol)

SUBÁRBOL DEL NODO B

46© A. Jaime 2005 DBD Tema 6

Árboles B+

• Siempre equilibrado• Conlleva un desperdicio de espacio aceptable• Inserción y eliminación de cierta complejidad• Los nodos internos y las hojas son diferentes.

• En nodos internos sólo apuntadores a otros nodos:

– 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)

P1 ... Pi ... Pq

X XX

X≤K1 Ki-1<X≤Ki Kq-1<X

punteroa árbol

punteroa árbol

punteroa árbol

K1 KiKi-1 Kq-1

47© A. Jaime 2005 DBD Tema 6

Árboles B+ (2)

• En nodos hoja sólo apuntadores a bloques de datos:

– 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)

Pr1 Pr2 Pri Prq-1... ... Psiguiente

punteroa datos

punteroa datos

punteroa datos

punteroa datos

Puntero al siguientenodo hoja del árbol B+

K1 K2 Ki Kq-1

48© A. Jaime 2005 DBD Tema 6

Ejemplo con árboles B+

• Nodo: V=9 bytes, Pr = 7 bytes, P = 6 bytes• B=512 bytes/bloque

• ¿Máximo de punteros (p) a árbol (nodo interno)?: p*P+(p-1)*V≤B → 15p ≤521

• ¿Máximo de punteros (phoja) a dato (nodo hoja)?:phoja*(Pr+V)+P≤B → 16 phoja≤506

• Puede precisar información adicional por nodo:– tipo de nodo (interno/hoja)– q: nº de entradas– puntero al nodo padre y hermanos

Campo deindexación

Punteroa datos

Punteroa nodo

p=34

phoja=31

P1 ... Pi ... Pq

X XX

X≤K1 Ki-1<X≤Ki Kq-1<X

punteroa árbol

punteroa árbol

punteroa árbol

K1 KiKi-1 Kq-1

Pr1 Pr2 Pri Prq-1... ... Psiguiente

punteroa datos

punteroa datos

punteroa datos

punteroa datos

K1 K2 Ki Kq-1

49© A. Jaime 2005 DBD Tema 6

Ejemplo con árboles B+(2)

• Ocupación nodos: 69%• Promedio:

– p*0,69=23 punteros a nodo (y 22 valores) por cada nodo interno

– phoja*0,69=21 punteros por hoja

• 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 ejemplos de las 3 páginas siguientes

• 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

p=34

phoja=31

50© A. Jaime 2005 DBD Tema 6

Árbol B+: inserciones

0

a árbol nuloa datos

a nodoApuntadores: Insertar 1: desborde

(nuevo nivel)5 0 8 0

Insertar 78 0

5

1 0 5 0

Insertar 3: desborde(división)

7 0

5

1 0 5 0 8 0

Insertar 12: desborde(división y se propaga

nuevo nivel)

7 0

3 5

5 0 8 01 0 3 0

7 0

3

5 0 8 01 0 3 0 12 0

8

5

Insertar 9

51© A. Jaime 2005 DBD Tema 6

Árbol B+: inserciones (2)

0

a árbol nuloa datos

a nodoApuntadores:

7 0

3

5 0 8 01 0 3 0 9 0

8

5

Insertar 6: desborde(división y se propaga)

12 0

8 0

3

5 01 0 3 0 9 0

7 8

5

12 06 0 7 0

52© A. Jaime 2005 DBD Tema 6

Árbol B+: eliminaciones

8 0

1 6

5 01 0 6 0 12 0

9

7

9 07 0

Eliminar 5

8 0

1 6

6 01 0 12 0

9

7

9 07 0

Eliminar 12: Insuficiencia(redistribuir)

8 0

1 6

6 01 0 9 0

8

7

7 0

Eliminar 9: insuficiencia (mezclar con izquierdo, persiste lainsuficiencia, reducción de niveles)

1 6

6 01 0 7 0 8 0

53© A. Jaime 2005 DBD Tema 6

Variaciones de B+

• Árboles B y B+: nodos ocupados al menos hasta la mitad

• Árbol B*: nodos ocupados al menos 2/3

• 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+

• 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 lasinserciones y borrados se distribuyen aleatoriamente

54© A. Jaime 2005 DBD Tema 6

Índice secundario sobre campo NO clavecon árbol B+

Buo

narr

oti

Ang

élic

o,F.

Can

alet

toD

alí

Da

Vin

ciD

egas

Gris

Goy

a

Man

etM

unch

Rem

bran

dtPi

cass

o

Van

Goh

gV

elaz

quez

War

hol

Buonarr.. Dalí Degas Munch Rembr.. Velazq..

Gris

Fich

ero

de D

ATO

SÍN

DIC

E so

bre

el c

ampo

Pin

tor

(con

árb

ol B

+ )

Bloque nº:

Gio

cond

a

Gira

sole

s

Mar

ilyn

Aqu

elar

re

Gue

rnic

a

Lanz

asM

aja

desn

uda

Gui

tarr

a

El fl

autis

ta

Cre

ació

n A

dán

Últi

ma

cena

Juic

io fi

nal

Men

inas

El g

rito

Pers

. mem

oria

Ron

da n

oche

Hila

nder

as16

44V

eláz

quez

Bar

roco

222x

293

Cab

aret

Anu

ncia

ción

Pz. S

. Mar

co

1656

Vel

ázqu

ez

1506

Da

Vin

ci16

42R

embr

andt

1937

Pica

sso

1510

Buo

narr

oti

1924

Dal

í18

93M

unch

1889

Van

Goh

g

1964

War

hol

1800

1634

Vel

ázqu

ez

1823

Goy

aG

oya

1541

Buo

narr

oti

1497

Da

Vin

ci

1877

Deg

as19

13G

ris

1434

Ang

elic

o,F.

1866

Man

et17

50C

anal

etto

Bar

roco

318x

276

Ren

acim

ient

o07

7x05

3B

arro

co36

3x43

7

Cub

ism

o34

9x77

6R

enac

imie

nto

null

Surr

ealis

mo

024x

033

Expr

esio

nism

o09

1x07

3

Impr

esio

nism

o09

5x07

3Po

p A

rt10

1x10

1

null

097x

190

Bar

roco

307x

367

Ren

acim

ient

o48

0x88

0nu

ll14

0x43

5

Cub

ism

o06

1x05

0R

enac

imie

nto

1370

x122

0

Gót

ico

175x

080

Impr

esio

nism

o02

4x04

4

Impr

esio

nism

o16

1x09

7B

arro

co06

8x11

2

Vel2

Vel1

Vin1

Rem1

Pic1

Buo1

Dal1

Mun1

Van1

War1

Vel3

Goy2

Goy1

Buo2

Vin2

Deg1

Gri1

Ang1

Man1

Can1

Títu

loA

ñoPi

ntor

Est

iloT

amañ

oID

1 2 76543

Blo

ques

de

apun

tado

res

a re

gist

ro

55© A. Jaime 2005 DBD Tema 6

Índice secundario sobre campo NO clavecon árbol B+ (2)

• Í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 alternativas a este nivel de indirección)

• 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

56© A. Jaime 2005 DBD Tema 6

Índice primario con árbol B+

(campo clave primaria)

Buo1

Ang1

Buo2

Can1

Dal1

Deg1

Goy2

Goy1

Gri1

Man1

Pic1

Mun1

Rem1

Van1

Vel2

Vel1

Vin1

Vel3

War1

Vin2

Buo1 Can1 Deg1 Man1 Pic1 Vel2 Vin1

Goy2 Van1

Fich

ero

de D

ATO

S (o

rden

ado

por

clav

e pr

imar

ia)

ÍND

ICE

sobr

e cl

ave

prim

aria

(ID

)(c

on á

rbol

B+ )

Bloque nº:

Gira

sole

sM

enin

as

Ron

da n

oche

1656

Vel

ázqu

ez

1642

Rem

bran

dt18

89V

an G

ohg

Bar

roco

318x

276

Bar

roco

363x

437

Impr

esio

nism

o09

5x07

3Ve

l1

Rem1

Van1

Gio

cond

aLa

nzas

Hila

nder

as16

44V

eláz

quez

Bar

roco

222x

293

1506

Da

Vin

ci16

34V

eláz

quez

Ren

acim

ient

o07

7x05

3B

arro

co30

7x36

7Ve

l2

Vin1

Vel3

Mar

ilyn

Últi

ma

cena

1964

War

hol

1497

Da

Vin

ciPo

p A

rt10

1x10

1R

enac

imie

nto

480x

880

War1

Vin2

Aqu

elar

reM

aja

desn

uda

Gui

tarr

a

1800

1823

Goy

aG

oya

1913

Gris

null

097x

190

null

140x

435

Cub

ism

o06

1x05

0Go

y2Go

y1

Gri1

Cre

ació

n A

dán

Juic

io fi

nal

Anu

ncia

ción

1510

Buo

narr

oti

1541

Buo

narr

oti

1434

Ang

elic

o,F.

Ren

acim

ient

onu

llR

enac

imie

nto

1370

x122

0

Gót

ico

175x

080

Buo1

Buo2

Ang1

Gue

rnic

a

El fl

autis

taE

l gri

to19

37Pi

cass

o18

93M

unch

1866

Man

et

Cub

ism

o34

9x77

6E

xpre

sion

ism

o091

x073

Impr

esio

nism

o16

1x09

7

Pic1

Mun1

Man1

Pers

. mem

oria

Cab

aret

Pz. S

. Mar

co19

24D

alí

1877

Deg

as

1750

Can

alet

toSu

rrea

lism

o02

4x03

3Im

pres

ioni

smo

024x

044

Bar

roco

068x

112

Dal1

Deg1

Can1

Títu

loA

ñoPi

ntor

Est

iloT

amañ

oID

1 2 76543

57© A. Jaime 2005 DBD Tema 6

Índice primario con árbol B+ (2)(campo clave primaria)

• Í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

58© A. Jaime 2005 DBD Tema 6

Índice de agrupación con árbol B+

(campo no clave)

Buo

narr

oti

Ang

élic

o,F.

Can

alet

toD

alí

Da

Vin

ciD

egas

Gris

Goy

a

Man

etM

unch

Rem

bran

dtPi

cass

o

Van

Goh

gV

elaz

quez

War

hol

Buonarr.. Dalí Degas Munch Rembr.. Velazq..

Gris

Fich

ero

de D

ATO

S(o

rden

ado

por

cam

po d

e ag

rupa

ción

)

Bloque nº:

Gio

cond

a

Gira

sole

s

Mar

ilyn

Aqu

elar

re

Gue

rnic

a

Lanz

as

Maj

a de

snud

a

Gui

tarr

aEl

flau

tista

Cre

ació

n A

dán

Últi

ma

cena

Juic

io fi

nal

Men

inas

El g

rito

Pers

. mem

oria

Ron

da n

oche

Hila

nder

as16

44V

eláz

quez

Bar

roco

222x

293

Cab

aret

Anu

ncia

ción

Pz. S

. Mar

co

1656

Vel

ázqu

ez

1506

Da

Vin

ci

1642

Rem

bran

dt19

37Pi

cass

o

1510

Buo

narr

oti

1924

Dal

í

1893

Mun

ch

1889

Van

Goh

g

1964

War

hol

1800

1634

Vel

ázqu

ez

1823

Goy

a

Goy

a

1541

Buo

narr

oti

1497

Da

Vin

ci18

77D

egas

1913

Gris

1434

Ang

elic

o,F.

1866

Man

et

1750

Can

alet

to

Bar

roco

318x

276

Ren

acim

ient

o07

7x05

3

Bar

roco

363x

437

Cub

ism

o34

9x77

6

Ren

acim

ient

onu

ll

Surr

ealis

mo

024x

033

Expr

esio

nism

o09

1x07

3

Impr

esio

nism

o09

5x07

3

Pop

Art

101x

101

null

097x

190

Bar

roco

307x

367

Ren

acim

ient

o48

0x88

0

null

140x

435

Cub

ism

o06

1x05

0

Ren

acim

ient

o13

70x1

220

Gót

ico

175x

080

Impr

esio

nism

o02

4x04

4

Impr

esio

nism

o16

1x09

7

Bar

roco

068x

112

Vel2

Vel1

Vin1

Rem1

Pic1

Buo1

Dal1

Mun1

Van1

War1

Vel3

Goy2

Goy1

Buo2

Vin2

Deg1

Gri1

Ang1

Man1

Can1

Títu

loA

ñoPi

ntor

Est

iloT

amañ

oID

1 2 76543

ÍND

ICE

sobr

e el

cam

po P

into

r(c

on á

rbol

B+ )

59© A. Jaime 2005 DBD Tema 6

Índice de agrupación con árbol B+ (2)(campo no clave)

• Í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

60© A. Jaime 2005 DBD Tema 6

Compatibilidad

Buo

narr

oti

Ang

élic

o,F.

Can

alet

toD

alí

Da

Vin

ciD

egas

Gris

Goy

a

Man

etM

unch

Rem

bran

dtPi

cass

o

Van

Goh

gV

elaz

quez

War

hol

Buonarr.. Dalí Degas Munch Rembr.. Velazq..

Gris

Fich

ero

de D

ATO

S(o

rden

ado

el c

ampo

de

agru

paci

ón)

ÍND

ICE

de a

grup

ació

nso

bre

Pint

or

Gio

cond

a

Gira

sole

s

Mar

ilyn

Aqu

elar

re

Gue

rnic

a

Lanz

as

Maj

a de

snud

a

Gui

tarr

aEl

flau

tista

Cre

ació

n A

dán

Últi

ma

cena

Juic

io fi

nal

Men

inas

El g

rito

Pers

. mem

oria

Ron

da n

oche

Hila

nder

as16

44V

eláz

quez

...

Cab

aret

Anu

ncia

ción

Pz. S

. Mar

co

1656

Vel

ázqu

ez

1506

Da

Vin

ci

1642

Rem

bran

dt19

37Pi

cass

o

1510

Buo

narr

oti

1924

Dal

í

1893

Mun

ch

1889

Van

Goh

g

1964

War

hol

1800

1634

Vel

ázqu

ez

1823

Goy

a

Goy

a

1541

Buo

narr

oti

1497

Da

Vin

ci18

77D

egas

1913

Gris

1434

Ang

elic

o,F.

1866

Man

et

1750

Can

alet

to

...... ......... ... ... ... ...... ...... ... ......... ... ......

Vel2

Vel1

Vin1

Rem1

Pic1

Buo1

Dal1

Mun1

Van1

War1

Vel3

Goy2

Goy1

Buo2

Vin2

Deg1

Gri1

Ang1

Man1

Can1

Títu

loA

ñoPi

ntor

...ID

14971510163417501823

14971434

15061510

15411634

16441642

16561750

18231800

18661877

18891893

19131924

19371964

18931924

16441877

ÍND

ICE

secu

ndar

ioso

bre

Año

61© A. Jaime 2005 DBD Tema 6

Compatibilidad (2)

• 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.

62© A. Jaime 2005 DBD Tema 6

Índices densos y dispersos

• Í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)

Deg1

Buo2

Gri1

Pic1

Vel1

Vin1

War1

Deg1 Pic1 Vin1

Gira

sole

sM

enin

as

Ron

da n

oche

...... ...Ve

l1

Rem1

Van1

Gio

cond

aLa

nzas

Hila

nder

as... ......

Vel2

Vin1

Vel3

Mar

ilyn

Últi

ma

cena

......Wa

r1Vi

n2

Aqu

elar

reM

aja

desn

uda

Gui

tarr

a

... ... ...Go

y2Go

y1

Gri1

Cre

ació

n A

dán

Juic

io fi

nal

Anu

ncia

ción

... ......Bu

o1Bu

o2

Ang1

Gue

rnic

a

El fl

autis

taE

l gri

to.........

Pic1

Mun1

Man1

Pers

. mem

oria

Cab

aret

Pz. S

. Mar

co... ......

Dal1

Deg1

Can1

Títu

lo...

ID

Los menores o igual a “Buo2”

63© A. Jaime 2005 DBD Tema 6

Búsquedas en ficheros (resumen de costos)

Campo(especial

búsquedas)

Ninguno

Clave primaria

de Agrupación

de direccio-namientocalculado

de ordenación

de indexación

Montón(secuencial)

Ordenado

Direccio-namientocalculado

con índiceprimario

con índice deagrupación

con índicesecundariosobre clave

con índicesecundario

sobre no clave

OrganizaciónDel fichero Búsqueda

(= campo esp.)Búsqueda

(<,>,≤,≥ campo esp.)Búsqueda(otro campo)

S1:b/2 caso

intermediobuscar uno

b caso peor

o buscar todos

b = nº de bloquesx = 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)

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

no se puede no se puede

S2:log2 b (clave)log2 b + ... (no

clave)

S3: 1

S3: (S2)x + 1

S5: (S2)x + ...

log2 b + ...

S4:x + ...

S4:x + ...

S6:x + 1

S6: x + ...

S6: x + ...

S6: x + ...

S1: b

Suponiendo que la

organización primaria sea fichero de montón

64© A. Jaime 2005 DBD Tema 6

Índices sobre clave compuesta (o clave múltiple)

• Claves compuestas de varios atributos:– Que aparecen frecuentemente en consultas– 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)

• Problema cuando ocurre a la vez lo siguiente:– Hay muchos cuadros de Velázquez– Hay muchos cuadros de 1644– Hay pocos cuadros de Velázquez

pintados en 1644

• Solución: índice sobre clave compuesta (también llamada clave múltiple)

Ninguna delas 3 estrategias

es eficiente

65© A. Jaime 2005 DBD Tema 6

Índices sobre clave compuesta (2) (o clave múltiple)

Fich

ero

de D

ATO

S(o

rden

ado

por

el p

ar d

e ca

mpo

s de

agru

paci

ón)

Últi

ma

cena

Gira

sole

s

Mar

ilyn

Aqu

elar

re

Gue

rnic

a

Men

inas

Maj

a de

snud

a

Gui

tarr

aEl

flau

tista

Cre

ació

n A

dán

Gio

cond

a

Juic

io fi

nal

Lanz

as

El g

rito

Pers

. mem

oria

Ron

da n

oche

Hila

nder

as16

44V

eláz

quez

...

Cab

aret

Anu

ncia

ción

Pz. S

. Mar

co

1634

Vel

ázqu

ez

1497

Da

Vin

ci

1642

Rem

bran

dt19

37Pi

cass

o

1510

Buo

narr

oti

1924

Dal

í

1893

Mun

ch

1889

Van

Goh

g

1964

War

hol

1800

1656

Vel

ázqu

ez

1823

Goy

a

Goy

a

1541

Buo

narr

oti

1506

Da

Vin

ci18

77D

egas

1913

Gris

1434

Ang

elic

o,F.

1866

Man

et

1750

Can

alet

to

...... ......... ... ... ... ...... ...... ... ......... ... ......

Vel2

Vel3

Vin2

Rem1

Pic1

Buo1

Dal1

Mun1

Van1

War1

Vel1

Goy2

Goy1

Buo2

Vin1

Deg1

Gri1

Ang1

Man1

Can1

Títu

loA

ñoPi

ntor

...ID

Buo

narr

oti,

1510

Ang

elic

o,F.

, 143

4

Buo

narr

oti,

1541

Can

alet

to, 1

750

Dal

í, 19

24D

a V

inci

, 149

7

Deg

as, 1

877

Da

Vin

ci, 1

506

Goy

a, 1

800

Goy

a, 1

823

Man

et, 1

866

Gris

, 191

3

Mun

ch, 1

893

Pica

sso,

193

7

Rem

bran

dt, 1

642

Van

Goh

g, 1

889

Vel

ázqu

ez, 1

634

Vel

ázqu

ez, 1

644

Vel

ázqu

ez, 1

656

War

hol,

1964

ÍND

ICE

de a

grup

ació

nso

bre

(Pin

tor,

Año

)

Buon..,1510

Canal..,1750

Degas,1877

Goya,1823

Picasso,1937

Velaz..,1644

Da Vi..,1497

Van G..,1889

Manet1866

66© A. Jaime 2005 DBD Tema 6

Índices sobre clave compuesta (3) (o clave múltiple)

• 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

• Otras estructuras sobre claves múltiples:– Direccionamiento partido– Ficheros rejilla (Grid)

se estudiana continuación

67© A. Jaime 2005 DBD Tema 6

Direccionamiento partido

• 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)

68© A. Jaime 2005 DBD Tema 6

Ficheros rejilla (Grid)

• 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

5

4

3

2

1

0

543210Área de la cubeta

Fichero de empleados

0 1, 2

1 3, 4

2 5

3 6, 7

4 8

5 9, 10

Escala linealpara ND

0

≤20

1

21-25

2

26-30

3

31-40

4

41-50

5

>50

Escala lineal para Edad

Área de la cubeta

Arrayrejilla

69© A. Jaime 2005 DBD Tema 6

Ficheros rejilla (Grid) (2)

• Ventaja: consultas de rango sobre las claves para las que se han definido escalas lineales

• Para n claves de búsqueda:– n puede ser cualquier número– n escalas lineales– Array rejilla de n dimensiones

• 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

70© A. Jaime 2005 DBD Tema 6

Índices físicos y lógicos

Índices físicos• Son los vistos hasta ahora. Si el registro cambia de posición en

el disco hay que cambiar los punteros • Inconveniente: en ocasiones esto precisa muchas

actualizaciones. Considerar por ejemplo un fichero de direccionamiento calculado con varios índices secundarios

Índices lógicos• 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.

71© A. Jaime 2005 DBD Tema 6

Otros tipos de índices: análisis

• 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+

72© A. Jaime 2005 DBD Tema 6

Diseño físico: representación físicaConnolly / Begg 2002 (16.2, step 5)

• 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.

73© A. Jaime 2005 DBD Tema 6

Paso 1: Analizar transacciones

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.2. A qué tablas accede cada transacción1) 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) SELECT ...FROM Propiedad as P WHERE P.Tipo = ...

Tabla Transacción FrecuenciaVeces al día

Propiedad 1 20

Delegación 2 500Empleado 2 500

3 50

... ... ...

74© A. Jaime 2005 DBD Tema 6

Paso 1: Analizar transacciones (2)

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, ...

• Candidatos a evitar estructuras de acceso:– En UPDATE los atributos del SET (los

modificados)

Tabla Transacción FrecuenciaVeces al día Atributos

Propiedad1 20

Delegación 2 500

Empleado 2 500

3 50

... ... ...

where: numP

where: localidadjoin: numDjoin: delegacionorder by: cargo

where: tipo

...

75© A. Jaime 2005 DBD Tema 6

Paso 2: Decidir la organización primaria

• 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:

– Si la tabla tendrá pocas filas.– Si las consultas acceden a todas las filas (sin especificar

ningún orden).• Direccionamiento calculado:

– Si es importante mejorar una condición de igualdadsobre 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.

• Índice primario (IP) ó índice de agrupación (IA):– 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, ...)

76© A. Jaime 2005 DBD Tema 6

Paso 3: Decidir índices secundariosCuándo SÍ crearlos

• 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.

• Plan sobre un sólo índice: cuando se puede resolver la consulta con sólo recorrer el índice. Ejemplo:

SELECT delegación, AVG(salario) FROM empleado GROUP BY delegación

• 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.

por ejemplo conIS(salario, delegación)

ó con IS(delegación, salario)

77© A. Jaime 2005 DBD Tema 6

Paso 3: Decidir índices secundarios (2)Cuándo NO crearlos

• 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

• 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

• 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)

78© A. Jaime 2005 DBD Tema 6

Ejemplo de diseño físico(tomamos el 20% más activo de 20 transacciones)

Empleado tiene 5.000 filas en 500 bloques y Propiedad 50.000 filas en 5000 bloques.

1. 200 veces al díaSELECT 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=@dele2. 300 veces al día

SELECT E.* FROM Empleado AS EWHERE E.Cargo=@cargo AND E.Delegacion=@deleORDER BY E.Apellido, E.Nombre

3. 1000 veces al díaSELECT E.* FROM Propiedad AS P JOIN Empleado AS E

ON P.Empleado=E.NumEWHERE E.Nombre=@nom AND E.Apellido=@ape

AND E.Delegacion=@dele4. 5000 veces al día

SELECT P.* FROM Propiedad AS PWHERE P.Localidad=@loc AND P.Renta<=@rent_max

Tabla Trans. Frec. Atributos

Propiedad

Empleado

1 200

2 300

j: jefe, numEw:nombre, apellido,

delegaciónw: cargo, delegacióno: apellido, nombre

3 10004 5000

j: empleadow: localidad, renta

3 1000j: numEw: nombre, apellido,

delegación

Organizacióne índices secun.

IA(localidad, renta)IS-nc(empleado)

IP(numE)IS-nc(jefe)IS-nc(apellido, nombre, delegación)

También DC(numE)

79© A. Jaime 2005 DBD Tema 6

Ejercicios

80© A. Jaime 2005 DBD Tema 6

Ejercicio: acceso a ficheros de montón

PROYECTO es un fichero de montón con factor de bloques 2:

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 2007Cada 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

PROYECTONOMBREP NÚMEROP LUGARP NÚMDProductoX 1 Belén 5ProductoY 2 Sacramento 5ProductoZ 3 Higueras 5

Automatización 10 Santiago 4Reorganización 20 Higueras 1

NuevasPrestaciones 30 Santiago 4

81© A. Jaime 2005 DBD Tema 6

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

82© A. Jaime 2005 DBD Tema 6

Ejercicio: acceso a ficheros ordenados

PROYECTO es un fichero ordenado por Númerop con factor de bloques 1:

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);

El descriptor del fichero incluye las siguientes direcciones de bloque: 1003, 1004, 2000, 2010, 3002 y 2007Se pide:

a) Escribe en orden de ejecución las operaciones transferirconsiderando 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

PROYECTONOMBREP NÚMEROP LUGARP NÚMDProductoX 1 Belén 5ProductoY 2 Sacramento 5ProductoZ 3 Higueras 5

Automatización 10 Santiago 4Reorganización 20 Higueras 1

NuevasPrestaciones 30 Santiago 4

83© A. Jaime 2005 DBD Tema 6

Ejercicio: acceso a ficheros de direccionamiento calculado

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.

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) 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=‘Automatiza-ció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)

PROYECTONOMBREP NÚMEROP LUGARP NÚMDProductoX 1 Belén 5ProductoY 2 Sacramento 5ProductoZ 3 Higueras 5

Automatización 10 Santiago 4Reorganización 20 Higueras 1

NuevasPrestaciones 30 Santiago 4

84© A. Jaime 2005 DBD Tema 6

Ejercicio: ficheros con índices

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.

PROYECTONOMBREP NÚMEROP LUGARP NÚMDProductoX 1 Belén 5ProductoY 2 Sacramento 5ProductoZ 3 Higueras 5

Automatización 10 Santiago 4Reorganización 20 Higueras 1

NuevasPrestaciones 30 Santiago 4

85© A. Jaime 2005 DBD Tema 6

Ejercicio: ficheros con índices (2)

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).

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.

PROYECTONOMBREP NÚMEROP LUGARP NÚMDProductoX 1 Belén 5ProductoY 2 Sacramento 5ProductoZ 3 Higueras 5

Automatización 10 Santiago 4Reorganización 20 Higueras 1

NuevasPrestaciones 30 Santiago 4

86© A. Jaime 2005 DBD Tema 6

Ejercicio: diseño físico en BD Hospital

Propón una representación física para la BD anterior capaz de proporcionar un buen rendimiento para las siguientes operaciones:1) 500 veces al díaSELECT P.*FROM Paciente AS P JOIN Medico as M ON P.Médico=M.CodWHERE M.Nombre=@nomMedico2) 2.000 veces al díaSELECT T.Enfermedad, M.NombreFROM (Paciente AS P JOIN Tratamiento AS T

ON P.NSS=T.Paciente) JOIN Medicamento AS M ON T.Medicamento=M.Cod

WHERE P.Nombre=@nomPacienteORDER BY T.Enfermedad, M.Nombre3) 1.000 veces al díaSELECT M.Especialidad, M.NombreFROM (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=@nomEnfermedadORDER BY M.Especialidad

NSS Nombre Edad MédicoPaciente5.000 filas

Cod Nombre Dosis

DescripciónNom

Medicamento10.000 filas

Enfermedad500 filas

Cod Nombre EspecialidadMédico50 filas

Paciente Enfermedad MedicamentoTratamiento100.000 filas Duración

Con óvalo claves

alternativas

87© A. Jaime 2005 DBD Tema 6

Ejercicio: diseño físico en BD Agencias de Viajes

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.NombreFROM Reserva AS R JOIN Cliente as C ON R.Cliente=C.CodWHERE R.Hotel=@hotel AND R.Localidad=@localidad2) 5.000 veces al día

SELECT C.Apellido1, C. Apellido2, C.NombreFROM Reserva AS R JOIN Cliente as C ON R.Cliente=C.CodWHERE R.Fecha>=@inicio AND R.Fecha<=@fin3) 100 veces al día

SELECT DISTINCT H.NombreFROM Hotel AS HORDER BY H.Nombre4) 500 veces al día

SELECT C.Apellido1, C. Apellido2, C.Nombre, A.Empresa, A.DirFROM (Cliente AS C JOIN Reserva as R ON C.Cod=R.Cliente)

JOIN Agencia AS A ON R.Agencia=A.codWHERE C.Tfno=@tfno

Cod Empresa Dir ContactoAgencia1.000 filas

No hay claves

alternativas

Cod Nombre DirCliente20.000 filas Apellido1 Apellido2 Tfno

Nombre Localidad CategoríaHotel1.000 filas NumHabitaciones

Hotel Localidad AgenciaReserva100.000 filas FechaCliente

88© A. Jaime 2005 DBD Tema 6

Ejercicio: diseño físico en BD Pruebas Deportivas

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.NombreFROM Deportista AS DORDER BY D.País, D.Nombre2) 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.Cod3) 1.000 veces al día

SELECT P.* FROM Asignación AS A JOIN Prueba AS P ON A.Prueba=P.CodWHERE A.Deportista=@codDeportista4) 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.CodWHERE E.Nombre=@nomEstadio AND E.Localidad=@localidad

AND A.Prueba=@PruebaORDER BY D.Nombre

Con óvalo claves

alternativasCod Nombre Edad PaísDeportista

8.000 filas

Cod NombreEstadio10 filas Localidad Aforo

Cod Categoría NombrePrueba200 filas Tipo

Deportista Prueba EstadioAsignación24.000 filas

89© A. Jaime 2005 DBD Tema 6

Ejercicio: diseño físico en BD Mariposas

1) 1000 veces al díaSELECT DISTINCT Esp.Nombre, Esp.CaracterísticasFROM ((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=@coleccionista2) 2000 veces al día

SELECT DISTINCT C.Cod, C.PrecioEstimadoFROM (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ábitat3) 800 veces al día

SELECT C.Cod, C.Nombre, C.ColecciónFROM Coleccionista AS CORDER BY C.Cod4) 20.000 veces al día

SELECT E.*FROM Colección AS C JOIN Ejemplar AS E

ON C.Cod= E.ColecciónWHERE C.Cod=@coleccion

No hay claves alternativas

Cod Ubicación PrecioEstimadoColección3.000 filas Tipo

Nombre CaracterísticasEspecie10.000 filas

Cod Nombre Dirección TfnoColeccionista4.500 filas Colección

NomCientífico NumeroEjemplar1.000.000 filas Procedencia Tamaño Colección

NomCientífico Origen HábitatMariposa100.000 filas EsperanzaVida Especie

90© A. Jaime 2005 DBD Tema 6

Ejercicio: diseño físico en BD Comida rápida

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íaSELECT I.Suministrador, I.NomIngrFROM Ingrediente AS IORDER BY I.Suministrador, I. NomIngr2) 300 Veces al díaSELECT A.TamañoFROM (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 = @precio3) 100 Veces al díaSELECT A.NomArt, A.PrecioFROM Articulo AS AORDER BY A.NomArt4) 5.000 Veces al díaSELECT P.*, SUM(PA.Cantidad*A.Precio) AS PrecioPedidoFROM (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=@pedidoGROUP BY P.Numero

Con óvalo claves

alternativas

NomIngr Precio SuministradorIngrediente500 filas

Número NomArtPed_Art300.000 filas

NomArt Tipo Precio TamañoArtículo50 filas

Número FechaPedido100.000 filas HoraPedido HoraServidoTfno

NomIng NomArtArt_Ingr1.000 filas

Cantidad