4. Estructuras de almacenamiento y métodos de acceso

Slides:



Advertisements
Presentaciones similares
ÍNDICES.
Advertisements

IMPLEMENTACION CONTIGUA Y NO CONTIGUA
Organizaciones Directas
DISEÑO DE TRANSFERENCIA ENTRE REGISTROS
Administración de memoria
Organización Secuencial
FIUBAODD - Curso Servetto1 Organizaciones Directas Costos de Recuperación Unidades de Organización Funciones de Dispersión Organizaciones Estáticas – Primitivas.
DEFINICIONES. TIPOS. SEMANA 12
integridad referencial
IBD Clase 7.
LICENCIATURA EN SISTEMAS COMPUTACIONALES EN ADMINISTRACION
Arquitecturas de BD Modelo ANSI/SPARC
III - Gestión de memoria
Rocío Contreras Águila Primer Semestre 2010
Sistemas Gestores de Ficheros
Administración de archivos de bases de datos
COLEGIO DE BACHILLERES PLANTEL 13 XOCHIMILCO-TEPEPAN MATERIA:TIC EQUIPO:23 PRESENTACION: BASE DE DATOS ALUMNAS: Velazquez Corona Elsa Ponciano Antonio.
3.4.- Administración de Memoria Virtual.
EQUIPO ·# 3 SISTEMAS OPERATIVOS
RENDIMIENTO Y ORGANIZACIÓN DE ARCHIVOS. En este documento se compara el coste de algunas operaciones simples en varias organizaciones de archivo básicas.
U NIDAD 2 L ENGUAJE DE DEFINICIÓN DE DATOS (DDL) 1.
PROGRAMACION DE ESTRUCTURAS DE DATOS
Tema II Unidad de memoria. 2 Unidad de memoria 2.1 Definiciones y conceptos básicos Localización Capacidad Unidad de transferencia
Implementación de archivos
Windows XP sp3.
Teoría de lenguajes y compiladores
Planificación de la Información.
Johanna Lizeth Rodríguez Lorena Fda. Chávarro Ramos
INTEGRANTES ALEXIS MENDOZA ALDAIR ARRIETA CARLOS PASTOR LORENA RODRIGUEZ ANTHONY JIMENEZ.
Almacenamiento y Recuperación de la Información 2do Semestre 2005 Wenceslao Palma M.
HILOS Y COMUNICACIÓN ENTRE PROCESOS
Tema 10: Gestión de Memoria
Administración del espacio
Lenguajes Formales de Consulta
Administración de Archivos
Sebastián Sánchez Prieto
Clase 10: Estructuras de datos y arreglos.
Elaborado por: Guillermo Baquerizo I Término
Estructura de Datos II Equipo 4 Equipo 7 Acosta Montiel Miguel A.
Tablas de Hash.
Bases de Datos Oracle Optimización
Administración de Bases de Datos
Tema 10.3: Asignación de Espacio No Contiguo. Tema 10.3: 2 Silberschatz, Galvin and Gagne ©2005 Fundamentos de los Computadores (ITT, Sist. Electr.),
(Organización y Manejo de Archivos)
Asignación de Espacio No Contiguo
Administración de Memoria
Capítulo 7 Gestión de memoria.
CAPITULO 4 Despliegue de Datos Desde Múltiples Tablas
CONSULTAS SENCILLAS A LA BASE DE DATOS
Universidad del Cauca – FIET – Departamento de Sistemas CAPITULO 12 Otros Objetos de la Base de Datos.
Teoría de Sistemas Operativos Administración de Archivos.
CICLO DE VIDA Y NORMAALIZACION DE UN SISTEMA DE BASE DE DATOS
COLEGIO DE BACHILLERES PLANTEL 13 XOCHIMILCO-TEPEPAN MATERIA:TIC EQUIPO:21 PRESENTACION: BASE DE DATOS ALUMNAS: Adán Millán Sánchez.
Sistemas de Archivos Sistemas Operativos.  Se debe proporcionar un almacenamiento secundario que respalda a la memoria principal  El Sistema de archivos.
Almacenamiento de la información IES Virgen del Espino.
Teoría de lenguajes y compiladores
MIA - Grupo 5 Unidad 2.

Programación II Concepto de Archivos.
SQL es el lenguaje de comunicación entre el programa cliente y programa servidor; Oracle es un programa servidor, en el que está la base de datos propiamente.
Bases de Datos y Sistemas de Gestión de Bases Relacionales.
Sistema de Gestión de Archivos FUNDAMENTOS TEORICOS Ing. Jorge Gutiérrez D Universidad Nacional de Colombia Catedrático - I Sem 2009
Gestión de Memoria – Parte 2
Bases de datos II Universidad del Cauca Ing. Wilson Ortega.
Bases de datos II Universidad del Cauca Ing. Wilson Ortega.
Copyright  Oracle Corporation, All rights reserved. 12 Otros Objetos de la Base de Datos.
Sistemas de Comunicación Magistral Nro. 6 Capa 3: Red La Capa de Red provee principalmente los servicios de envío, enrutamiento (routing) y control de.
Bases de datos II Universidad del Cauca Ing. Wilson Ortega.
Sistemas de archivos. Sistemas de archivos 2 Objetivo del SdA  Ocultar al usuario los detalles relativos al almacenamiento de información en dispositivos.
1/50 Ing. Gerardo Chávez Malpartida Administración de Memoria SISTEMAS OPERATIVOS.
Transcripción de la presentación:

4. Estructuras de almacenamiento y métodos de acceso Objetivos Conocer diferentes técnicas para colocar los registros de un fichero en el disco Entender la teoría y aplicación de las técnicas de dispersión (hashing) interna y externa Conocer cómo usar dispersión para facilitar la expansión dinámica de ficheros Comprender la teoría y aplicación de los índices primarios, secundarios y de agrupamiento Distinguir entre índices densos y no densos Identificar y comprender las ventajas e inconvenientes de cada técnica de organización de ficheros

4. Estructuras de almacenamiento y métodos de acceso Contenidos 4.1. Conceptos generales de organización de ficheros 4.2. Organización primaria 1. Ficheros no ordenados 2. Ficheros ordenados 3. Ficheros mixtos 4. Ficheros dispersos 5. Árboles B y otras estructuras de datos 4.3. Organización secundaria 1. Índices ordenados de un solo nivel 2. Índices de múltiples niveles 4.4. Ficheros mixtos en Oracle 4.5. Ficheros dispersos en Oracle 4.6. Especificación de índices en SQL y Oracle Marcados con letra en gris los puntos que no explicaremos en las clases de teoría, sino que tan sólo están incluidos en el tema escrito (documento word).

4. Estructuras de almacenamiento y métodos de acceso Bibliografía [EN 2002] Elmasri, R.; Navathe, S.B.: Fundamentos de Sistemas de Bases de Datos. 3ª Edición. Addison-Wesley. (Cap. 5 y 6) [EN 1997] Elmasri, R.; Navathe, S.B.: Sistemas de bases de datos. Conceptos fundamentales. 2ª Ed. Addison-Wesley Iberoamericana. (Cap. 4 y 5) [SKS 1998] Korth, H; Silberschatz, A., Sudarshan, S.: Fundamentos de bases de datos. 3ª Edición. McGraw-Hill. (Cap. 10 y 11) [CBS 1998] Connolly et al.: Database Systems: A Practical Approach to Design, Implementation and Management. 2nd Ed. Addison-Wesley (Apéndice B)

4.1 Conceptos generales de organización de ficheros Los datos de una BD están almacenados en un medio de almacenamiento en el ordenador: Almacenamiento secundario de disco magnético Estudiaremos técnicas de almacenamiento en disco Formas de organizar ficheros de datos en el disco Para conseguir acceso a BD con rendimiento aceptable Cada técnica tiene ventajas/inconvenientes, conocidas por Diseñadores y ABDs Implementadores de SGBD Una aplicación, en cierto momento, sólo necesita acceder a una porción de la BD. Deberá... Localizarla en disco Copiarla a la memoria principal Procesarla Reescribirla en disco (si se modificó)

4.1 Conceptos generales de organización de ficheros Registros, tipos de registro y bloques Datos en disco organizados en ficheros de registros Registro Colección de valores de datos relacionados entre sí Cada valor (1 o más bytes) corresponde a un campo Cada campo tiene asociado un tipo de datos Definición de Tipo de Registro: { (nombre-campo,tipo-datos) }

4.1 Conceptos generales de organización de ficheros Registros, tipos de registro y bloques Los registros son almacenados en disco de forma que, cuando se necesiten, su recuperación sea eficiente Transferencia de datos entre memoria principal y disco en unidades de bloque Un disco magnético está estructurado en pistas y sectores División de pista en bloques (páginas) por el SO al formatear el disco Si se necesita información contenida en cierto bloque... Se pasa al dispositivo hardware de E/S del disco: Dirección hardware del bloque Dirección de un búfer (memoria intermedia) Lectura: copia el bloque del disco al búfer Escritura: copia el bloque del búfer al disco

Registros, tipos de registro y bloques (y 2) 4.1 Conceptos generales de organización de ficheros Registros, tipos de registro y bloques (y 2) Tiempo(localización&transferencia) >Tiempo(procesamiento CPU) La solución... estructurar los ficheros para minimizar el nº de transferencias de bloques necesarias para localizar y transferir datos del disco a memoria principal Búsqueda + Retardo Rotacional + Transferencia Cuello de botella

Ficheros, registros de longitud fija y variable 4.1 Conceptos generales de organización de ficheros Ficheros, registros de longitud fija y variable Fichero Secuencia de registros con igual estructura Fichero mixto Contiene registros de diferente tipo Aumenta la eficiencia de operaciones de reunión Fichero de registros de longitud fija Fichero de registros de longitud variable, debido a... Registros del mismo tipo pero con algún campo … de longitud variable, multivalorado, opcional

4.1 Conceptos generales de organización de ficheros Grabación de registros en bloques, registros extendidos y no extendidos Los registros se asignan a bloques de disco tamaño(bloque) = B bytes Si B > tamaño(registro)  varios registros por bloque Fichero con registros de longitud fija R Si B  R  factor de bloques fbl =  B / R  registros Espacio desocupado = B – ( fbl * R ) bytes Organización extendida: aprovechar este espacio almacenando ahí (una parte de) otro registro (y el resto en otro bloque) Organización no extendida: no se permite que un registro esté almacenado en varios bloques

4.1 Conceptos generales de organización de ficheros Grabación de registros en bloques, registros extendidos y no extendidos (y 2) Fichero con registros de longitud variable Cada bloque contiene un nº distinto de registros fbl = número medio de registros por bloque Es posible estimar el nº de bloques necesarios para contener r registros: r / fbl bloques Puede utilizarse organización extendida o no extendida: Organización extendida si el tamaño medio de los registros es grande, pues se reduce el espacio desperdiciado por bloque

Descriptor de fichero (cabecera) 4.1 Conceptos generales de organización de ficheros Descriptor de fichero (cabecera) Contiene datos necesarios para que los programas puedan acceder a los registros del fichero Incluye información para determinar la dirección en disco de los bloques y descripción de formato de los registros Fichero con registros no extendidos y de longitud fija: longitud y orden de campos Fichero con registros de longitud variable: caracteres separadores entre campos marcas de tipo de campo (si campos opcionales) marcas de tipo de registro (si fichero mixto)

4.1 Conceptos generales de organización de ficheros Operaciones con ficheros Operaciones de obtención de datos Localizar ciertos registros para examinar y procesar su contenido Operaciones de actualización Insertar, eliminar o modificar registros Suele ser necesaria una selección previa con base en una condición de búsqueda Si varios registros la satisfacen, se localiza el primero de ellos Registro Actual: El localizado más recientemente en el búfer (memoria intermedia)

4.1 Conceptos generales de organización de ficheros Operaciones con ficheros (y 2) Operaciones sobre un solo registro Buscar (Localizar) Leer (Obtener) Buscar Siguiente Eliminar Modificar Insertar Operaciones sobre un conjunto de registros Lectura Ordenada Buscar Todos Reorganizar Operaciones para Abrir y Cerrar ficheros

4.1 Conceptos generales de organización de ficheros Organización de ficheros vs. Método de acceso Organización de fichero: Estructuración de los datos de un fichero en registros, bloques y estructuras de acceso Técnica de organización de ficheros: cómo colocar los registros y bloques en el medio de almacenamiento y cómo interconectarlos Objetivo: localización eficiente de los datos Método de acceso: Conjunto de programas que permite realizar operaciones sobre los datos de un fichero Proporciona acceso a los datos; hace uso de las estructuras de acceso (si existen) Combinados, deben maximizar la eficiencia de las operaciones más frecuentes sobre el fichero

4.1 Conceptos generales de organización de ficheros Tipos de organización de ficheros Organización Primaria Determina la forma en que los registros del fichero se colocan físicamente en el disco y cómo se puede acceder a ellos Fichero No Ordenado (montón) Fichero Ordenado (secuencial) Fichero Mixto Fichero Disperso (direccionamiento directo o hashing) Árboles B y otras estructuras de datos (en el tema) Organización Secundaria (o indexada) Índice Ordenado de un nivel Índice Multinivel Los Árboles B y otras estructuras de datos no los veremos en la presentación, aunque están incluidos en el tema

4.2 Organización primaria Fichero no ordenado (montículo o montón) Registros almacenados al final del fichero, en orden de inserción Inserción muy eficiente Búsqueda lineal Eliminación física o por marca Reorganización para recuperar espacio desocupado O aprovechar huecos para nuevos registros Modificación de un registro Si longitud variable, puede provocar eliminación + inserción Lectura ordenada supone creación de una copia ordenada del fichero Suele utilizarse una técnica de ordenación externa

4.2 Organización primaria Fichero ordenado (secuencial) Registros almacenados de forma ordenada según valores de cierto campo campo de ordenación Si el campo es clave, se le llama clave de ordenación Ventajas respecto a los ficheros no ordenados Lectura ordenada muy eficiente si el orden es el de los valores del campo de ordenación: lectura secuencial Buscar siguiente (en el orden del campo de ordenación) no suele necesitar otro acceso a bloque Buscar un registro dado su valor del campo de ordenación es rápido: búsqueda binaria Pero si la Lectura ordenada o Buscar no están basados en el campo de ordenación, estas ventajas «desaparecen»

4.2 Organización primaria Fichero ordenado (2) Inserción supone encontrar posición correcta para el registro y abrirle espacio mediante desplazamiento de registros (costoso!) Eliminación física o por marca con problemas de eficiencia similares a la inserción Para aumentar la eficiencia de la inserción Dejar espacio libre en cada bloque para nuevos registros Fichero de desbordamiento auxiliar, no ordenado, que periódicamente se ordena y fusiona con el fichero principal  Buscar se complica: binaria en principal + lineal en auxiliar Modificación Si la condición de búsqueda se basa en el campo de ordenación, usar búsqueda binaria. Si no, búsqueda lineal Si el campo modificado es el de ordenación, el nuevo valor puede provocar su cambio de ubicación: eliminación + inserción

4.2 Organización primaria Fichero ordenado (y 3) Fichero secuencial encadenado Registros ordenados de forma lógica (no física) Uso de punteros Mayor flexibilidad Estructuras de datos para implementar este tipo de ficheros Listas lineales Listas múltiples Anillos o listas circulares Árboles binarios de búsqueda

En Oracle se denominan cluster de tablas 4.2 Organización primaria Fichero Mixto Almacena registros de diferente tipo Los registros provienen de distintas tablas ... Están relacionadas mediante una o varias columnas Clave externa y clave candidata Las operaciones más frecuentes son las consultas y no es habitual modificar las columnas comunes Solicitudes frecuentes de filas relacionadas de ambas tablas Operaciones que implican la reunión (JOIN) de las tablas En el fichero... Los registros relacionados están físicamente adyacentes clave del fichero mixto: campos «comunes» de los registros Ventajas del uso de ficheros mixtos Mayor eficiencia de las operaciones con JOIN entre las tablas Valores de la clave del fichero mixto almacenados sólo una vez En Oracle se denominan cluster de tablas [EN2002 pág. 139]

Ejemplo de uso de un fichero mixto vs. dos ficheros individuales 4.2 Organización primaria Ejemplo de uso de un fichero mixto vs. dos ficheros individuales

4.2 Organización primaria Fichero de direccionamiento calculado (Hashing) Permite acceso rápido a registros según una condición de búsqueda de igualdad sobre un solo campo Campo de dispersión (columna de dispersión) Si es clave del fichero, se llama clave de dispersión Función de dispersión h Se aplica al valor k del campo de dispersión de un registro (fila) Y produce la dirección del bloque de disco en el que está el registro La localización del registro dentro del bloque se hace en el búfer

Espacio de dispersión > Espacio de direcciones 4.2 Organización primaria Fichero de direccionamiento calculado (2) Ejemplos de funciones h Módulo: h(k) = k mod M Plegado: Si k=k1k2k3k4, h(k)=k1k2k3k4 ,   { + , xor } Truncamiento: h(k) = k1k3 Desventaja del direccionamiento calculado No se garantiza que valores distintos de k produzcan direcciones diferentes en el fichero Espacio de dispersión > Espacio de direcciones Estudiaremos las técnicas de dispersión... Interna Externa Dinámica

4.2 Organización primaria Fichero de direccionamiento calculado (3) Dispersión Interna Espacio de direcciones destino Conjunto de M registros Un array de M posiciones en memoria principal Función de dispersión h Traduce el valor del campo de dispersión en un entero [0, M-1] Colisión Al aplicar h a un registro que se desea insertar en el fichero, se obtiene una dirección ocupada El nuevo registro es un sinónimo

4.2 Organización primaria Fichero de direccionamiento calculado (4) Dispersión Interna Técnicas de resolución de colisiones Direccionamiento abierto Búsqueda secuencial de una posición vacía Encadenamiento Uso de listas de sinónimos en un área de desbordamiento Dispersión múltiple Aplicación de una segunda función h Si se produce colisión, se aplica direccionamiento abierto h debe ser sencilla y rápida de calcular Su objetivo es conseguir una distribución uniforme de los registros (sin acumulamientos) Mínimo número de colisiones Máximo número de posiciones ocupadas

4.2 Organización primaria Fichero de direccionamiento calculado (5) Dispersión Externa Espacio de direcciones destino Conjunto de cubetas Cubeta=grupo de registros del fichero (1 o más bloques contiguos) Función de dispersión h Traduce el valor del campo de dispersión en un número de cubeta El descriptor de fichero contiene, para cada cubeta, la correspondencia número de cubeta  dirección en disco Decrece el número de colisiones Los sinónimos se dispersan dentro de una cubeta Uso de cubeta de desbordamiento (común al resto) y listas de registros sinónimos para insertar registros en cubetas ya completas

4.2 Organización primaria Fichero de direccionamiento calculado (6) Dispersión Externa Búsqueda o Localización Acceso directo si condición de búsqueda basada en campo de dispersión  el más rápido: 1 acceso a bloque Si no, búsqueda lineal Lectura ordenada Costosa: h no suele mantener registros ordenados Eliminación Sacarlo de la cubeta y ocupar espacio con un sinónimo O sacarlo de la lista de desbordamiento (si estaba ahí) Modificación Si la condición de búsqueda se basa en el campo de dispersión, usar h para localizar registro. Si no, búsqueda lineal Si el campo modificado es el de dispersión, el nuevo valor puede provocar su cambio de cubeta: eliminación + inserción

4.2 Organización primaria Fichero de direccionamiento calculado (7) Dispersión Externa Asigna al fichero una cantidad de espacio fija  M cubetas Cada cubeta con capacidad para m registros Espacio disponible = m*M registros Número real de registros r Si r < m*M  gran desperdicio! Si r > m*M  muchas colisiones! Largas listas de registros de desbordamiento  lenta obtención de registros Solución: dispersión dinámica

 4.2 Organización primaria Fichero de direccionamiento calculado (8) Dispersión Dinámica Representación del resultado de la función de dispersión h como una cadena de bits Valor de direccionamiento calculado del registro Los registros se distribuyen en cubetas según los primeros bits de su valor de direcc. calculado Tipos de dispersión dinámica Direccionamiento calculado extensible Direccionamiento calculado lineal Los esquemas de dispersión dinámica aprovechan que el resultado de aplicar una función h es un entero no negativo, el cual puede representarse como un número binario (una cadena de bits) 

4.2 Organización primaria Fichero de direccionamiento calculado (9) Dispersión Dinámica: Direccionamiento Calculado Extensible Fichero + Directorio Directorio: array de 2d direcciones de cubeta d es la profundidad global del directorio Determinación de la posición de un registro: El valor de los primeros d bits del valor de direccionamiento calculado indican una posición del directorio Dicha posición contiene la dirección de cubeta en la que almacenar el registro En el directorio... Varias posiciones pueden contener la misma dirección de cubeta La profundidad local d’ de cada cubeta indica el nº de bits considerados: determina su contenido

4.2 Organización primaria Fichero de direccionamiento calculado (10) Dispersión Dinámica: Direccionamiento Calculado Extensible Obtención de un registro Dos accesos a bloque: directorio + cubeta d puede disminuir o aumentar en 1 bit  reducir a la mitad o duplicar el tamaño del directorio Duplicar si se desborda una cubeta cuya (d’ = d) Reducir a la mitad si (d’ < d) en todas las cubetas

4.2 Organización primaria Fichero de direccionamiento calculado (y 11) Dispersión Dinámica: Direccionamiento Calculado Extensible Dispersión dinámica vs Dispersión estática  Ventajas El rendimiento no se degrada a medida que crece el fichero No se asigna espacio para futuros crecimientos: se añaden cubetas adicionales conforme se necesitan Espacio extra para directorio insignificante Como mucho 2k, k = nº bits del valor de direccionamiento calculado Reorganizaciones de registros «poco importantes» Si se divide o duplica una cubeta, sólo se reorganizan sus registros La más costosa: duplicación o reducción a la mitad del directorio  Inconveniente (leve!) Necesarios 2 accesos a bloque para localizar un registro

4.3 Organización secundaria: Ficheros de índices Un índice es una estructura de acceso adicional Almacenado en disco Utilizado junto con el fichero de datos (fichero principal) Fichero principal estructurado según una organización primaria Agiliza la obtención de registros según valores de cierto campo del fichero: campo de indexación Primero se accede al índice, que apunta al bloque del fichero donde está almacenado el registro Es posible crear ... un índice sobre cualquier campo de un fichero varios índices sobre un mismo fichero Un índice puede ser de uno de estos tipos Ordenado de un nivel: Primario, de Agrupamiento, Secundario De múltiples niveles: Árbol B, B+, B*

4.3 Organización secundaria Índices ordenados de un nivel El fichero de índice contiene un conjunto de entradas Cada entrada incluye dos campos, para almacenar... Un valor de los almacenados en el campo de indexación Un puntero al registro que contiene dicho valor o al bloque que lo contiene Las entradas están ordenadas Según valores extraídos del campo de indexación del fichero ppal Es posible realizar búsquedas binarias sobre el índice Índices densos y no densos Denso si contiene una entrada por cada registro del fichero En otro caso, es no denso (o disperso) Operaciones sobre ficheros con índices: Buscar implica búsqueda binaria sobre el índice Insertar y Eliminar pueden provocar modificación del índice Menos accesos a bloques, pero  coste de mantener el índice

4.3 Organización secundaria Índice primario Sobre ficheros con registros ordenados según los valores de un campo clave El campo de indexación es dicha clave de ordenamiento El índice es un fichero ordenado con... Una entrada por cada bloque de fichero principal (índice no denso) Cada entrada tiene longitud fija y 2 campos: Valor del campo de indexación de un registro ancla de bloque Puntero al comienzo de cada bloque Bloques de índice < Bloques de fichero principal Operaciones sobre ficheros con índices primarios: Insertar y Eliminar pueden provocar la modificación del índice si afectan a los registros ancla

4.3 Organización secundaria Índice de agrupamiento Sobre ficheros con registros ordenados según los valores de un campo no clave El campo de indexación es dicho campo de agrupamiento El índice es un fichero ordenado con... Una entrada por cada valor distinto del campo de agrupamiento del fichero principal (índice no denso) Cada entrada tiene longitud fija y 2 campos: Valor distinto del campo de indexación (= de agrupamiento) Puntero al primer bloque en que aparece dicho valor Operaciones sobre ficheros con índices de agrupamiento: Insertar y Eliminar costosas y provocan modificación del índice Alivio si se reserva un bloque (del fichero de datos) para cada valor distinto del campo de agrupación (o varios bloques enlazados) acelera la recuperación de registros que tienen el mismo valor en el campo de agrupamiento Un índice de agrupamiento acelera la recuperación de registros que tienen el mismo valor en el campo de agrupamiento.

4.3 Organización secundaria Índice secundario sobre campo clave Sobre un campo que es clave del fichero principal, y que no marca la ordenación de los registros de datos El campo de indexación es dicho campo: clave secundaria El índice es un fichero ordenado con... Una entrada por cada registro del fichero principal (índice denso) Cada entrada tiene longitud fija y 2 campos: Valor del campo de indexación (= clave secundaria) Puntero al registro o al bloque en que aparece dicho valor Operaciones sobre ficheros con índices de este tipo: Insertar y Eliminar provocan la modificación del índice Tiene más entradas que un índice primario Ocupa más espacio. Mayor tiempo de búsqueda Pero mayor “ganancia” respecto a búsqueda en el fichero de datos La ganancia o mejoría en el tiempo de búsqueda de un registro arbitrario es mucho mayor para un índice secundario que para uno primario, pues tendríamos que realizar una búsqueda lineal sobre el fichero de datos si no existiera el índice secundario, mientras que en el caso de que no existiera el índice primario, aún podría realizarse una búsqueda binaria sobre el fichero principal (al estar ordenado).

4.3 Organización secundaria Índice secundario sobre campo no clave Sobre un campo que no es clave del fichero principal, y que no marca la ordenación de los registros de datos El campo de indexación es dicho campo Opciones para crear el índice, fichero ordenado con... Una entrada por cada registro del fichero principal (índice denso) entradas de longitud fija y 2 campos: valor y puntero a registro valores repetidos del campo de indexación Una entrada por valor distinto del campo de indexación (no denso) entradas de longitud variable: valor y varios punteros a bloque Una entrada por valor distinto del campo de indexación, y un nivel adicional de indirección (índice no denso) entradas de longitud fija y 2 campos: Valor del campo de indexación Puntero a un bloque de punteros a registro

4.3 Organización secundaria Índice de múltiples niveles Se construye partiendo del índice sobre el fichero principal de datos en disco (índice de nivel base), mediante creación sucesiva de índices primarios sobre índices El índice de nivel base puede ser de cualquier tipo, si éste... tiene entradas de longitud fija y almacena valores distintos del campo de indexación El índice multinivel es denso si lo es el de nivel base Se puede saber si un registro está en el fichero sin acceder a éste Mejora el rendimiento de la búsqueda binaria: a cada paso desecha más entradas que en un índice de un solo nivel La inserción, eliminación y modificación de registros de datos... Son ineficientes si implican inserción o eliminación de entradas en el índice multinivel Solución: índices dinámicos de múltiples niveles (árboles B, B+, B*)

4.3 Organización secundaria Tipos de ficheros en función de su indexación Fichero totalmente invertido Tiene un índice secundario sobre cada uno de sus campos Los registros nuevos se insertan al final del fichero (no ordenado!) Fichero secuencial indexado Registros ordenados según valores de un campo clave y Con un índice primario de múltiples niveles sobre dicha clave Facilita acceso secuencial e individual (directo a través del índice) Cada SGBDR comercial implementa los índices empleando sus propias técnicas Oracle emplea, entre otras estructuras, la de árbol B*

4.6 Especificación de índices en SQL Índices y el SQL estándar Antiguas versiones del SQL estándar contaban con sentencias para crear y destruir índices El LDD no incluía cláusulas PRIMARY KEY o UNIQUE restricción de integridad de clave mediante creación de índice único La versión SQL-92 no considera los índices Pues los índices son caminos físicos de acceso a los datos Restricción de clave mediante cláusulas PRIMARY KEY y UNIQUE La unicidad de una columna es un concepto lógico

4.6 Especificación de índices en SQL Índices en los SGBDR comerciales En muchos SGBD comerciales, el índice ... es una estructura de datos independiente se crea y destruye dinámicamente, sin afectar al fichero principal Conviene crear un índice sobre cierto campo si se va a acceder con frecuencia al fichero según una condición de selección o reunión en la que aparezca dicho campo  El índice incrementará la velocidad de esas consultas o accesos  Cada índice sobre una columna hace que inserción, borrado y actualización sean más complejas y consuman más tiempo Normalmente, el SGBD creará un índice secundario Independiente de la ordenación física de los registros Puede crearse con casi cualquier organización primaria de ficheros Sobre un mismo fichero puede crearse varios índices secundarios

 4.6 Especificación de índices en SQL Índices en Oracle Tipos de índices, según su implementación Índices de árbol B, o normales; los creados por defecto Índices de tablas Índices de clusters Índices bitmap Índices particionados Índices basados en funciones Índices de dominio Por defecto, Oracle almacena las filas de una tabla como una colección desordenada de filas No cabe hablar de índices primarios o de agrupamiento, tal y como los hemos definido en este tema Aunque es posible almacenar una tabla con una estructura de índice (árbol B*): index organized table 

4.6 Especificación de índices en SQL Índices en Oracle (2) Tipos de índices, según la columna (o campo) de indexación Índice Único Basado en una columna de tabla cuyos valores son únicos Índice Primario (un caso particular de Índice Único) Basado en una clave primaria de tabla Índice Secundario Basado en una columna con valores no únicos Índice Compuesto, también Índice Concatenado Basado en 2 o más columnas de una misma tabla Puede ser Único, Primario o Secundario Un Índice Compuesto Único es útil para imponer la unicidad de la combinación de valores de varias columnas En Oracle el significado de los conceptos índice primario e índice secundario no coincide con la teoría explicada en el apartado 4.3 de este tema

4.6 Especificación de índices en SQL Índices en Oracle (3) Sentencia LDD para crear índices CREATE INDEX Indice_Genero_Pelicula ON Pelicula ( genero ) ; Especificación del orden ascendente o descendente de las entradas del índice CREATE INDEX Indice_Año_Pelicula ON Pelicula ( año DESC ) ; Índice compuesto CREATE INDEX Indice_Nombres_Director ON Director ( apellido1 ASC, apellido2 ASC, nombre DESC ) ; El índice incrementa la velocidad de las consultas que acceden por... apellido1 apellido1 y apellido2 apellido1 y apellido2 y nombre Pero el SGBD no usará el índice para consultas que acceden por... apellido2 nombre apellido2 y nombre Índices sobre varias columnas: El orden de uso de las columnas en una consulta (SELECT) es irrelevante, es decir, el acceso por “apellido1 y apellido2 y nombre” utilizará el índice compuesto, pero también se usará el índice si el acceso es por “apellido2 y nombre y apellido1”…

4.6 Especificación de índices en SQL Índices en Oracle (4) Algunos SGBDR, como Oracle, crean un índice sobre cada clave (primaria o alternativa) de forma automática Campo de indexación: columna (o conjunto de columnas) especificada como UNIQUE o PRIMARY KEY en el esquema de BD El SGBD empleará el índice para imponer la restricción de clave Creación explícita de un índice único Usado para imponer una restricción de clave sobre una o varias columnas CREATE UNIQUE INDEX Indice_Director ON Director(apellido, fechanacim) ; En el caso de que la tabla DIRECTOR ya contenga datos, este índice sólo será creado si cada combinación de valores apellido y fechanacim es distinta para todas las filas de la tabla Oracle recomienda la creación explícita del índice, y no sólo la declaración de la clave como UNIQUE en la especificación de la tabla

4.6 Especificación de índices en SQL Índices en Oracle (y 5) Sentencia LDD para destruir índices DROP INDEX Índice_Genero_Película ; Conviene eliminar un índice cuando ya no se espera realizar consultas basadas en el campo de indexación Desaparece el coste de mantenimiento del índice Se recupera el espacio de almacenamiento ocupado por el índice No se puede eliminar un índice creado automáticamente por el sistema (debido a la especificación de una restricción de integridad UNIQUE o PRIMARY KEY sobre una o varias columnas), sino que se debe eliminar (DROP) o desactivar (DISABLE) la restricción de integridad correspondiente

4.7 Selección de la organización de ficheros y estructuras de acceso Selección: decisiones de diseño físico La mayoría de SGBDR representa cada tabla base como un fichero de BD, para el cual es necesario especificar... Tipo de fichero, Columnas sobre los que definir estructuras de acceso (índices) Decisiones de diseño físico Sobre estructuras de almacenamiento (organización de ficheros) Sobre índices (estructuras de acceso) El tipo de fichero (ordenado, no ordenado, hashing, ...) deberá elegirse de entre las opciones ofrecidas por el SGBDR elegido. Las estructuras de acceso serán índices, cuyo tipo dependerá de la columna sobre la que se construyan.

4.7 Selección de la organización de ficheros y estructuras de acceso Sobre estructuras de almacenamiento Cuándo emplear un fichero no ordenado La tabla es pequeña Registros pequeños o factor de bloques elevado Es inspeccionada con pocos accesos a bloque Normalmente, las consultas u operaciones más frecuentes sobre la tabla seleccionan o acceden a muchas filas (es decir, más del 20% del total de las filas) El acceso siempre es secuencial: Full Table Scan, recorrido completo y secuencial de la tabla o fichero. Resulta muy ineficiente si se inspeccionan muchas filas (registros) para seleccionar sólo unas pocas. Se mejora si es posible el procesamiento paralelo y se particiona el fichero en horizontal. También se mejora si se usan dispositivos de acceso de alta velocidad para tablas (o partes de tablas) frecuentemente examinadas

4.7 Selección de la organización de ficheros y estructuras de acceso Sobre estructuras de almacenamiento Cuándo emplear un fichero ordenado La tabla es de tamaño medio-grande y con frecuencia es... ordenada según valores de una columna c c aparece en cláusulas ORDER BY, GROUP BY, DISTINCT, o como columna de REUNIÓN o de UNION accedida con criterios de selección que incluyen un rango de valores de c procesada secuencialmente en el orden de los valores de c (lectura ordenada) La tabla no es frecuentemente modificada con INSERT, UPDATE (c) o DELETE El fichero estaría ordenado por el campo ‘c’.

4.7 Selección de la organización de ficheros y estructuras de acceso Sobre estructuras de almacenamiento Cuándo emplear un esquema de dispersión Los accesos a la tabla son frecuentes, individuales y aleatorios, y según valores de una columna c, que... Es muy utilizada en operaciones de selección por igualdad Es muy usada en condiciones de reunión (JOIN) – equi-reunión – Sus valores apenas son modificados Los valores de c son muchos y variados: permiten una buena distribución de los registros, evitando colisiones Se conoce el tamaño del fichero y no se espera un crecimiento o reducción considerable En caso contrario, puede usarse dispersión dinámica Alternativa al uso de tablas indexadas y tablas agrupadas (ficheros mixtos o cluster) Reduce el nº de accesos a bloque para encontrar un registro (fila) Acceso individual: a un solo registro La dispersión dinámica puede emplearse si el fichero es muy volátil (sufre muchas inserciones y borrados). La mayoría de los SGBD no soportan la dispersión dinámica. Ver [EN2002] página 133 acerca del tamaño del fichero.

4.7 Selección de la organización de ficheros y estructuras de acceso Sobre estructuras de almacenamiento Cuándo evitar un esquema de dispersión Los accesos a la tabla son por rango de valores de a, salvo si es una lista: a IN (v1, v2, ...vn) con criterios de selección que no incluyen a, o incluyen sólo parte de a en orden, según los valores de a No todos los SGBD soportan dispersión (Oracle sí) Puede definirse un solo esquema hashing por tabla No es posible combinar dispersión y ordenación: ambos determinan la posición física de los registros en el fichero Oracle soporta organización hash mediante las estructuras Hash Cluster.

4.7 Selección de la organización de ficheros y estructuras de acceso Sobre estructuras de almacenamiento Cuándo emplear un fichero mixto (cluster de tablas) Son muy frecuentes las consultas que implican... La reunión entre dos (o más) tablas relacionadas Ejemplo: relación 1:N vía clave primaria/clave externa El agrupamiento de filas de la tabla del lado N, según valor de la clave externa En Oracle crear un fichero mixto significa crear un cluster, definir clave de cluster, crear índice cluster, y almacenar las tablas dentro  Ventajas Acelera la ejecución de las reuniones entre las tablas registros relacionados están en el mismo bloque  menos accesos a bloque Aprovechamiento del espacio Cada registro del lado 1 (clave primaria) está almacenado junto con los registros del lado N (claves ajenas coincidentes) EnOracle es necesario crear un cluster, crear las tablas indicando que deben almacenarse dentro del cluster y crear un índice sobre la clave del cluster (cluster index) para poder acceder/actualizar el contenido de las tablas. Un ejemplo sería crear un cluster en el que almacenar las tablas PEDIDO y LINEAPEDIDO. Esto favorecería la ejecución de operaciones join entre PEDIDO y LINEAPEDIDO, y también del tipo de la siguiente: SELECT … COUNT(*), SUM(coste) FROM LINEAPEDIDO GROUP BY codpedido;

4.7 Selección de la organización de ficheros y estructuras de acceso Sobre estructuras de almacenamiento Cuándo emplear un fichero mixto (cont.)  Inconvenientes Consultas a cada tabla por separado muy poco eficientes Recorrido completo de las filas de cada tabla individual, más costoso (demasiados accesos a bloque) La inserción es poco eficiente debido a que se debe... mantener la agrupación física (filas con igual valor de clave de cluster), y a la vez desaprovechar el mínimo espacio de almacenamiento muchos encadenamientos entre registros (zonas de desborde, etc.) menor eficiencia de la búsqueda según la clave del cluster reducción del rendimiento de las consultas

4.7 Selección de la organización de ficheros y estructuras de acceso Sobre índices Cuándo emplear un índice La tabla es de tamaño medio/grande: Si la tabla es pequeña, resulta más eficiente cargarlas en memoria Las consultas más frecuentes acceden a pequeños porcentajes del total de filas (≤20%): ¿mejor recorrido secuencial para acceder a muchas filas? Se desea evitar... el recorrido de la tabla completa: usamos búsqueda binaria en el índice Si la tabla es pequeña, resulta más eficiente cargarlas en memoria y utilizar Full Table Scan. Si se accede a muchas filas, quizá sea más eficiente el recorrido secuencial de la tabla completa, en lugar de emplear el índice.

4.7 Selección de la organización de ficheros y estructuras de acceso Sobre índices Cuándo emplear un índice (continuación) Se desea evitar... el acceso al fichero para determinadas consultas (EXISTS, IN, ...) :si el índice es denso basta con acceder a él para saber si existe la ordenación de los registros en el fichero (ORDER BY, GROUP BY, UNION, DISTINCT, JOIN): al crear un índice primario o de agrupamiento el fichero se almacena ordenado Al tener un índice ordenado se puede utilizar para operaciones que impliquen ordenación el acceso al fichero para consultas que incluyen un pequeño subconjunto de columnas: usar índices compuestos Sea la tabla PERSONA(nif, nombre, apellido, fecha_nacim, ciudad, telef) CREATE INDEX idx_persona ON PERSONA( apellido, nombre ); El uso de índices evita... El recorrido de la tabla completa (Full Table Scan), gracias a la búsqueda binaria previa en el índice. El acceso al fichero para determinadas consultas, si el índice es denso basta con acceder al índice para saber si un determinado registro existe, por ejemplo. Si se crea un índice primario o de agrupamiento, el fichero se almacenará ordenado, por lo que no será necesario ordenar los registros una vez recuperados. Además, puesto que el índice está ordenado, puede ser utilizado para realizar operaciones que implican ordenación por el campo de indexación. Si se emplea un índice compuesto, una consulta del tipo SELECT apellido, nombre FROM PERSONA no necesitará acceso al fichero, basta con explorar el índice. Este índice se utilizará en aquellas consultas sobre PERSONA cuya cláusula WHERE contenga condiciones sobre apellido o bien un AND ente condiciones que contengan apellido y nombre.

4.7 Selección de la organización de ficheros y estructuras de acceso Sobre índices Cuándo indexar una columna Es una clave Muy usada en condiciones de reunión o de selección Suele aparecer en cláusulas WHERE en comparaciones de igualdad o rango de valores: =, >, <, , , BETWEEN Suele ser columna de reunión (join) de tablas (ej. claves ajenas) Tiene gran variedad de valores (más discriminación en búsquedas) No es modificada muy a menudo Emplear un índice compuesto si habitualmente se accede por medio de varias columnas utilizadas conjuntamente El SGBD sólo usará el índice para consultas que incluyan (en WHERE) condiciones sobre campos que forman un prefijo de la clave de indexación Algunos SGBD como Oracle, crean automáticamente un índice para las claves primarias definidas en cada tabla. Una ventaja a favor del uso de índices es que algunas consultas pueden procesarse con la exploración del índice, sin necesidad de acceder al fichero de datos, como ya se indicó en diapositivas anteriores.

4.7 Selección de la organización de ficheros y estructuras de acceso Sobre índices Cuándo evitar un índice La tabla es muy pequeña: cargarla en memoria Sobre columnas... modificadas muy a menudo con distribución irregular de valores: confunden al Optimizador que sólo aparecen en funciones/operadores (distintos de MAX o MIN): pueden hacer que el índice no se use Se degradan los requisitos de procesamiento crítico: si se le da al SGBD muchos índices a elegir El costo(almacenamiento+mantenimiento) > beneficio INSERT, UPDATE, DELETE sobre tablas indexadas mantenimiento del índice (automático, por parte del SGBD) A veces conviene... crear la tabla, rellenarla, y luego crear los índices eliminar índices, modificar datos y crear de nuevo los índices Si la tabla es pequeña, resulta más eficiente cargarlas en memoria. No merece la pena ocupar espacio para datos de tabla y también para datos de índice. Confusión del Módulo Optimizador del SGBD: sea la tabla EMPLEADO ( codEmp, ..., depto,...). Existe un índice secundario sobre la columna depto. Cuando se realiza una consulta del tipo SELECT codEmp, ... FROM EMPLEADO WHERE depto = XX; el SGBD decide entre utilizar el índice o el acceso secuencial en función del % de filas a las que se accedería vía índice. Si suponemos que hay 100.000 empleados y 100 departamentos, el SGBD asume distribución uniforme: 1000 empleados por departamento. Por lo que el SGBD elegirá el índice pues cree que va a acceder a un 1% de las filas en la tabla. Sin embargo, si hay 95.000 empleados del mismo departamento, la mejor elección hubiera sido no emplear el índice. En el tema de Ficheros ¿vimos cuándo puede inhibirse la utilización de un índice ? ¿en el anexo? Los requisitos de procesamiento crítico (es decir, de una consulta/transacción cuyo rendimiento debe ser óptimo) pueden degradarse si el Optimizador debe considerar todos los (muchos) índices secundarios antes de elegir la mejor estrategia de ejecución.

4.7 Selección de la organización de ficheros y estructuras de acceso Sobre índices Consejos para la utilización de índices Máximo 4 índices por tabla índices   necesidad de espacio y  velocidad al modificar el SGBD puede crear implícitamente índices sobre las claves Se puede crear más, si es raro actualizar la tabla (histórico) Almacenar índices secundarios en un espacio de almacenamiento distinto al de los datos Recomendación para aplicaciones con muchas INSERT y DELETE Índices primario o de agrupamiento en el mismo área que los datos La mayoría de SELECT y todas las INSERT, DELETE los leen Índices secundarios en un espacio de almacenamiento diferente Mejor balanceo de carga: INSERT, DELETE actualizan el índice Un índice Primario o de Agrupamiento no tiene por qué verse modificado con cada INSERT, DELETE o UPDATE(columnas_indexación), mientras que uno Secundario con seguridad sí deberá ser modificado. A lo sumo un índice por tabla puede ser de agrupamiento o primario, porque ello implica que el fichero estará ordenado físicamente en función de la columna de indexación. Modificar = insertar , actualizar o borrar Un índice Primario o de Agrupamiento no tiene por qué verse modificado con cada INSERT, DELETE o UPDATE(columnas_indexación), mientras que uno Secundario con seguridad sí deberá ser modificado. [LO QUE SIGUE ESTÁ PENDIENTE DE CONFIRMAR…] Un índice primario no será modificado si … Se inserta o elimina un registro que se ubica al final del fichero de datos y no constituye un ancla de bloque. Se inserta o elimina un registro que no es un ancla de bloque en el fichero de datos y ello no varía el resto de anclas de bloque (esto generaliza el punto anterior) en dicho fichero. Se actualiza un campo que no es el de indexación (la clave primaria), o sí lo es, pero no se varía el ordenamiento de los registros en el fichero de datos. Un índice de agrupamiento no se verá modificado si … Se inserta o elimina un registro con un valor del campo de agrupamiento ya existente (y por tanto ya recogido en el índice) y ubicado después de la primera aparición de dicho valor, de forma que no afecta a la posición del resto de registros. Se inserta o elimina un registro ubicado al final del fichero de datos y que no es el único registro con cierto valor en el campo de agrupamiento. Se modifica un campo que no es el de agrupamiento, o sí lo es pero no corresponde al registro en el que aparece por primera vez un valor de campo de agrupamiento y no afecta al orden de los registros en el fichero.

Ejercicio Dadas las siguientes situaciones, determinar el método de acceso más apropiado (exploración, cluster, índices, tabla hash para cada tabla o conjunto de tablas). Justificar las respuestas. Tenemos 3 tablas A, B y C, de forma que B y C tienen como clave ajena un atributo de A. Las consultas son mayoritariamente sobre la tabla A, pero no a través de la clave primaria ni de un atributo de ordenación. Se estima que las tablas serán de tamaño reducido. Tenemos las 3 tablas del apartado anterior. Las consultas son mayoritariamente joins sobre el atributo que ejerce como clave ajena en B y C y como primaria en A. Las consultas individuales sobre cada tabla individual son irrelevantes. Tenemos una tabla de 4 atributos con muchas tuplas. Existen muchas consultas de modificación del atributo que genera la mejor ordenación sobre la tabla. Tenemos la misma tabla del apartado anterior. Existen dos tipos mayoritarios de consultas: consultas sobre rangos de valores sobre la clave primaria y consultas que requieren de la ordenación de las tuplas obtenidas.

Estructura lógica de una BD Oracle

Estructuras lógicas de almacenamiento Segmento datos Segmento de índices Segmento de rollback Segmento temporal SELECT ... ORDER BY... CREATE INDEX. SELECT ... GROUP BY... SELECT ... UNION ... SELECT DISTINCT ... SELECT … INSERSEC ... SELECT ... MINUS ...

Estructura física de Oracle Ficheros de datos Ficheros redo log Ficheros de control

Entorno de memoria en Oracle SGA: System/Shared Global Area Shared pool: library (zona sql, control y bloqueos)+dictionary (metadatos) cache Database Buffer Cache Redo Log Buffer PGA: Program Global Area

Elementos de diseño físico en ORACLE Tablespace CREATE TABLESPACE TS_DATOS DATAFILE ‘/disco1/fichero1’ SIZE 100 M, DATAFILE ‘/disco2/fichero2’ SIZE 250 M; Tablas y extensiones CREATE TABLE Alumnos (…) TABLESPACE TS_DATOS PCTFREE 20 PCTUSED 40 STORAGE (INITIAL 20K NEXT 30K MINEXTENTS 1 MAXEXTENTS 10 PCTINCREASE 0);

Elementos de diseño físico en ORACLE Índices (dentro de create table) ……. CREATE INDEX nom_ind ON Alumnos (atributos) …. Clusters CREATE CLUSTER CL_1(clave number(4)) SIZE 512 TABLESPACE TS_DATOS PCTFREE 20 STORAGE(…..); CREATE TABLE Alumno (….) CLUSTER CL1_(a1);

Clusters CREATE CLUSTER Emp_Dept (departamento CHAR(4)) SIZE 512…; CREATE TABLE Departamento { codigo CHAR (4) PRIMARY KEY, ………………… ) CLUSTER Emp_Dept(codigo); CREATE TABLE EmpleadoFijo { nss CHAR(12) PRIMARY KEY, …………. dpto CHAR (4) NOT NULL REFERENCES Departamento(codigo) ) CLUSTER Emp_Dept(dpto); CREATE INDEX idx_Emp_Dpt ON CLUSTER Emp_Dept;

Dispersión CREATE CLUSTER Direcciones (codpostal NUMBER(5)) …SIZE 2k HASH IS MOD(codpostal, 101) HASHKEYS 1000;