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