Manejo de Archivos
Introducción a la Organización de Archivos Relativos Una forma efectiva de organizar un archivo cundo existe la necesidad de acceder individualmente a registros directamente, es la organización relativa. En un archivo relativo, existe una relación predecible entre la llave usada para identificar un registro en particular y su localización dentro del archivo. Sin embargo es importante comprender que el ordenamiento lógico de los registros no necesita tener una relación con su secuencia física. Los registros no necesariamente aparecen físicamente ordenados de acuerdo con el valor de sus llaves. Entonces ¿Cómo encontrar el n-simo registro? Cuando un archivo se establece, debe definirse una relación que será utilizada para obtener un valor de llave a una dirección física. Esta relación R es una función de mapeo. Cuando se debe guardar un registro en un archivo relativo, la función de mapeo R se usa para traducir el valor de llave del registro a una dirección que indica donde deberá almacenarse el registro. Cuando es necesario recuperar el registro con un valor de llave particular, la función R es aplicada a ese valor de la llave, traduciéndolo a una dirección donde se encuentra el registro. En contraste con los archivos secuencialmente organizados, no es necesario acceder los registros del archivo en orden serial. En lugar de esto, una ocurrencia particular de un registro se puede acceder directamente. Los archivos relativos se almacenan en dispositivos de almacenamiento de acceso directo como los discos magnéticos. Los archivos relativos se usan normalmente en procesos interactivos. Una ventaja que puede reconocerse en esta organización es la habilidad para accesar a registros directamente. Un registro puede recuperarse, modificarse, o hasta borrarse sin afectar a otros registros en el archivo.
Direccionamiento de datos Existen dos técnicas básicas para direccionar la ubicación de los registros almacenados en el disco: Unidad III: Organización de Archivos Relativos
1
Manejo de Archivos
Método del cilindro: La dirección del registro es su número de cilindro, numero de superficie y numero de registro. Método de sector: Cada pista del paquete esta dividida en sectores, cada sector es un área de almacenamiento para un numero fijo de caracteres. Una dirección de registro es solamente su número de sector. Dado un número de sector, el controlador del disco puede determinar que pista deberá acceder y donde reside el registro direccionado sobre tal pista.
Técnicas de Direccionamiento Existe 3 técnicas fundamentales utilizadas para las funciones de mapeo R, donde R es el valor de la llave o dirección. 1. Mapeo directo 2. Búsqueda en el directorio 3. Por cálculo
Técnica de mapeo directo La técnica más simple para traducir una llave a una dirección de almacenamiento es el mapeo directo. El mapeo directo no es ampliamente usado.
Direccionamiento absoluto El valor de llave suministrado por el usuario o por el programa del usuario es igual a la dirección real del registro. Cuando el registro es almacenado en el archivo, la localidad del registro debe de ser determinado por el usuario. Cuando se recupere el registro, su localización absoluta debe ser conocida y suministrada por el usuario.
Ventajas 1. La función de mapeo R es muy sencilla. 2. Dado un valor de llave de un registro no requiere de tiempo y de proceso para determinar la localidad del registro en el almacenamiento secundario
Unidad III: Organización de Archivos Relativos
2
Manejo de Archivos
Desventajas 1. Las consideraciones lógicas y físicas no son independientes del direccionamiento absoluto; el usuario debe conocer como están almacenados físicamente los registros. 2. Las direcciones absolutas dependen de los dispositivos. Si fuera conveniente actualizar o cambiar el dispositivo, los valores de las llaves también cambiarían. 3. Las direcciones absolutas dependen del espacio direccionable. Si fuera necesario reorganizar el archivo relativo sin cambiar de dispositivo, los valores de las llaves deberían cambiarse.
Direccionamiento relativo Otro método sencillo de instrumentación de R (valor de la lave ) = dirección relativa. Una dirección relativa de un registro puede suministrarse al programa de canal para su traducción a una dirección absoluta. La dirección relativa de un registro es el número ordinal del registro dentro del archivo.
Ventajas Las ventajas del esquema del direccionamiento relativo son dos: 1. La función de mapeo R es muy sencilla. 2. Dado el valor de una llave de registro, esencialmente no se requiere tiempo de proceso para determinar la localidad del registro en el almacenamiento secundario.
Desventajas 1. Las direcciones relativas no dependen tanto del dispositivo como las direcciones absolutas, sin embargo ambas, tanto las direcciones absolutas, como las direcciones relativas dependen del espacio para direcciones. 2. Algunos tipos de valores naturales de llave no son apropiados para usarse como direcciones relativas. Por ejemplo, aunque pudiesen convertirse a un equivalente numérico los valores de nombre del empleado no son buenos para usarse como dirección relativa; ni tampoco lo son muchos valores de llave numérico naturales.
Unidad III: Organización de Archivos Relativos
3
Manejo de Archivos
Técnicas de Búsqueda en Directorio Este enfoque utilizado de manera muy frecuente toma ventaja de los beneficios del mapeo directo. La idea básica es la de tener una tabla o directorio de valores de llave: pares de direcciones (o pares de direcciones relativas). En su forma más sencilla el directorio se instrumenta como un arreglo de valores de llaves ordenadas para facilitar la búsqueda; alternativamente el directorio podría estructurarse como un árbol de búsqueda binario. Para encontrar un registro en un archivo relativo, se localiza su valor de llave en el directorio, y, después la dirección indicada se utiliza para encontrar el registro almacenado.
Ventajas 1. La dirección de un registro puede determinarse una vez que se encuentra el valor de la llave en el directorio, prácticamente sin ningún procesamiento. 2. Las llaves pueden representarse mediante formas comprensibles puesto que son traducidas “internamente” a direcciones. 3. La independencia lógica y física se alcanza, por que los valores de llave son independientes del espacio de direcciones. Si el archivo se reorganiza o cambia de dispositivo, las entradas de direcciones en el directorio deberán cambiarse pero los valores de las llaves no.
Desventajas 1. Es necesaria una estructura adicional para contener el directorio. 2. Para archivos relativos muy grandes el directorio será también muy grande lo que puede impactar en su eficiencia al realizar búsquedas.
Técnicas de Cálculo de Direcciones La idea básica del calculo de direcciones es realizar un cálculo sobre el valor de la llave, cuyo resultado sea una dirección relativa. Una de las desventajas del direccionamiento relativo es que se debe asignar espacio para acomodar el rango completo de valores de llave, independientemente de cuantos sean usados realmente.
Unidad III: Organización de Archivos Relativos
4
Manejo de Archivos Consideremos una compañía de 2000 trabajadores, que desea utilizar los números del seguro social como llave de acceso a los registros de un archivo de empleados, con organización relativa. La función de calculo de dirección aconsejable para este ejemplo debería mapear el conjunto dominio de valores (de 1 hasta 999999999) en aproximadamente 2000 direcciones. Un problema potencial encontrado en este proceso, es que tal función no puede ser uno a uno; las direcciones calculadas pueden no ser todas únicas. Esta situación, donde R(K1)=R(K2) pero K1 <> K2 es llamada colisión y K1 Y K2 se conocen como sinónimos. Por lo tanto, el objetivo primordial de la función hash (cálculo aplicado al valor de la llave para obtener una dirección) es el de generar relativamente pocas colisiones. Un conjunto de sinónimos es algunas veces llamado una clase de equivalencia. Una buena función hash tiene pocas clases de equivalencia y pequeñas, además de no ser demasiado compleja computacionalmente. El hashing se debe utilizar en conjunción con la búsqueda en directorio , los beneficios de evitar el recálculo y la solución de colisiones para los registros anteriores tienen como desventaja el costo de almacenamiento y mantenimiento del directorio. También dependiendo de los patrones de organización de directorios y de los patrones de colisión, la búsqueda en directorio y el hashing juntos pueden conducir a mayores tiempos de búsqueda que lo que haría el hashing solo. El desempeño de la técnica de hashing puede medirse mediante sus requerimientos de procesamiento y las necesidades de E/S para almacenar o recuperar registros. La eficiencia de una función hash particular depende de: 1. La distribución de los valores de llave que realmente se usan . 2. El numero de valores de llave que realmente están en uso con respecto al tamaño del espacio de las direcciones. 3. El numero de registros que pueden almacenarse en una dirección dada sin causar una colisión (por ahora suponemos que es 1). 4. La técnica utilizada para resolver el problema de las colisiones.
Unidad III: Organización de Archivos Relativos
5
Manejo de Archivos
Hashing por Residuo de la División La idea básica de este método es la de dividir el valor de la llave entre un número apropiado, y después de utilizar el residuo de la división como dirección relativa para el registro. Por ejemplo sea div el divisor, sea llave la llave y direc la dirección resultante. La función: R(valor de llave)
dirección
puede codificarse en lenguaje C como: direc = llave % div; El residuo está definido como el resultado de restar el producto del cociente por el divisor del dividendo. En todos los casos, la dirección debe declararse como entero. Mientras que el cálculo de la dirección relativa, conocidos tanto la llave como el divisor, es directo, la elección del divisor apropiado puede no ser realmente tan simple. Existen varios factores que deben considerarse para la seleccionar al divisor. Primero el rango de valores que resulta de la operación “llave % div”, va desde 0 hasta div -1. Entonces el valor del divisor determina el tamaño del espacio de dirección relativa. Si se sabe que nuestro archivo relativo va contener por lo menos n registros, entonces tendremos que hacer que div > n, suponiendo que solamente un registro puede ser almacenado en una dirección relativa dada. Segundo, el divisor debe seleccionarse de forma que la probabilidad de colisión sea minimizada. Algunas investigaciones han demostrado que los divisores pares se comportan pobremente; algunas investigaciones sugieren que los divisores debieran ser números primos, sin embargo otras sugieren que los divisores no primos trabajan tan bien como los primos, siempre y cuando los divisores no primos no contengan números primos pequeños como factores. Sugieren que seleccionar un número que no contenga ningún factor primo menor de 20 es probablemente suficiente para asegurar un buen desempeño. No es suficiente escoger un divisor que no introduzca una distribución sesgada de direcciones. Además se ha demostrado que independientemente de que tan “bueno” sea el divisor, cuando el espacio de direcciones de un archivo relativo esta completamente lleno, la probabilidad de colisión crece dramáticamente. La saturación de un archivo relativo se mide mediante su factor de carga: Unidad III: Organización de Archivos Relativos
6
Manejo de Archivos
Factor de carga = # registro en el archivo / máx. # de registros que puede contener el archivo
Todas las funciones hash comienzan a trabajar pobremente cuando el archivo esta casi lleno. Un factor de carga de 0.7 o 0.8 es casi lo máximo que puede tolerarse para un desempeño razonable. Por ejemplo considere el diseño de un archivo relativo que contendrá alrededor de 4000 registros. El espacio de direcciones deberá acomodar al menos 5 000 registros para una carga de un 80%. Un número aproximadamente 5 000 que no contiene actores primos menores a 20 es 5 003. La siguiente tabla ilustra la utilización de este divisor con un conjunto pequeño de valores de llave. valor de la llave
dirección relativa
123456789
2762
987654321
2086
123456790
2763
555555555
2424
000000472
0473
100064183
4184
200120472
0473
200120473
0474
117400000
4606
27000400
3613
“colisión” “colisión”
Hashing por Medio del Cuadrado En esta técnica la llave es elevada al cuadrado, después algunos dígitos especificados se extraen de la mitad del resultado para constituir la dirección relativa. Si se desea una dirección relativa de n dígitos, entonces los dígitos se truncan en ambos extremos de la llave elevada al cuadrado, tomando los n dígitos intermedios. Las mismas posiciones de n-dígitos deben extraerse para cada llave. La tabla muestra el uso de esta técnica para las mismas llaves del método anterior, nótese que para acomodar 4000 registros se requieren 4 dígitos para cada dirección relativa, por lo que los dígitos 7-10 (contando desde la derecha) se extrajeron para formar cada dirección.
Unidad III: Organización de Archivos Relativos
7
Manejo de Archivos
valor de la llave 123456789 987654321 123456790 555555555 000000472 100064183 200120472 200120473 117400000 27000400
llave al cuadrado 15241578750190521 975461055789971041 15241578997104100 308641974691358025 00000000000222784 10012860719457489 10012860719457489 40048203313502784 40048203713743729 13782760000000000
dirección relativa 8750 5789 8997 4691 0000 “colisión “ 0719 3313 3713 0000 “colisión “ 1600
El espacio de dirección resultante tiene lugar para acomodar 10 000 registros, dando un factor de carga de 0.4. Utilizando la función hashing del medio del cuadrado, el tamaño del archivo resultante es de 10n, donde n es el número de dígitos extraídos de los valores de la llave elevada al cuadrado.
Hashing por Pliegue En esta técnica el valor de la llave es particionado en varias de las partes, cada una de las cuales (excepto la última) tiene el mismo número de dígitos que tiene la dirección relativa objetivo. Estas particiones son después plegadas una sobre otra y sumadas. El resultado con el dígito de mayor orden truncado, si es necesario, es la dirección relativa. Por ejemplo, considere el valor de llave 123456789, y suponga que la dirección relativa objetiva tendrá 4 dígitos. El valor de la llave es particionado en partes de 4 dígitos. 0001
2345
6789
Después se pliegan uno sobre otro para dar: 1000 2345 9876
Unidad III: Organización de Archivos Relativos
8
Manejo de Archivos Y sumados dan: 13221
El dígito de mayor orden (el que está más a la izquierda) es truncado para dar la dirección relativa 3221. Las direcciones relativas resultantes cuando el método de pliegue es aplicado a nuestro conjunto de valores de llave.
Valor de la llave
Direccion relativa
123456789
3221
987654321
8999
123456790
4321
555555555
6110
000000472
2740
100064183
4820
200120472
4752
200120473
5752
117400000
2740
**colisión**
27000400
2740
**colisión**
**colisión**
Igual que para el método del medio del cuadrado, el tamaño del espacio de direcciones relativas es una potencia de 10.
Comparación entre las funciones hash El método del residuo ha demostrado tener los mejores resultados a comparación de los otros 2 métodos en la mayoría de los casos. El método del cuadrado medio proporciona buenos resultados con archivos que tengan bajos factores de carga, sin embargo en algunas ocasiones como en archivos densamente poblados produce demasiadas colisiones.
Unidad III: Organización de Archivos Relativos
9
Manejo de Archivos El método de pliegue puede ser la más fácil de calcular sobre todo si se utilizan patrones de bits en lugar de números decimales, sin embargo produce resultados bastante erráticos (y colisiones) a menos que la longitud de la llave sea aproximadamente igual a la longitud de la dirección.
Ventajas 1. Se pueden usar los valores naturales de las llaves puesto que se traducen “internamente” a direcciones. 2. Se logra la independencia lógica y física pues los valores de las llaves son independientes del espacio de direcciones.
Desventajas 1. El tiempo de procesamiento requerido para la aplicación de la función hash. 2. El tiempo de procesamiento y los accesos de E/S requeridos para solucionar las colisiones.
Métodos para el Problema de Colisiones Dado que una función hashing mapea un espacio relativamente grande de valores de llave en un espacio de direcciones relativamente pequeño, es seguro que se producirán colisiones. Considere los dos valores de llave K1 y K2 los cuales son sinónimos con la función hash R. Si K1 es primero almacenado en el archivo y su dirección es R (K), entonces se dice que K1 esta almacenando en su dirección de origen. Existen dos métodos básicos para determinar dónde debe almacenarse K2:
Direccionamiento abierto: otra dirección distinta de la de origen es encontrada para K2 dentro del archivo relativo. Separación de desborde: alguna dirección es encontrada para K2 fuera del área principal del archivo relativo en un área especial. de desborde, que es utilizada exclusivamente para almacenar registros que no pueden ser asignados a su dirección de origen.
Entre las técnicas para manejar colisiones se analizarán dos de las más comunes:
Unidad III: Organización de Archivos Relativos
10
Manejo de Archivos Sondeo lineal, que es una técnica de direccionamiento abierto Doble hashing, que puede ser aplicado como cualquier direccionamiento abierto o técnica de separación de desborde.
Sondeo Lineal Es un proceso de búsqueda secuencial desde la dirección de origen para encontrar la siguiente localidad vacía. Esta técnica es también conocida como método de desbordamiento consecutivo. El sondeo lineal puede usarse con cualquier técnica de hashing. La aplicación del sondeo lineal deberá hacerse en tal forma que la nueva dirección no caiga fuera del límite del archivo. Si el sondeo lineal se usa para resolver colisiones cuando se almacenan los registros, también se deberá usar cuando se recuperan los registros, a menos que el esquema de búsqueda en directorio se utilice en conjunción con el hashing.
Doble Hashing El cual aplica una segunda función hash para combinar la llave original y el resultado del primer hash. El segundo hash puede ser el mismo archivo relativo, o un archivo relativo de sobre flujo independiente. En él segundo caso, donde solo un registro de cada clase de equivalencia aparece en el archivo principal y los sinónimos aparecen en el archivo de sobreflujo, el método de desborde es utilizado. La ventaja del método de separación de desborde es que evita una situación que puede ocurrir con el método de direccionamiento abierto, en el cual un registro que no está almacenado en su dirección de origen desplaza a otro registro, el que después buscará esa dirección de origen. El costo del método de separación de desborde es el tener que mantener al archivo separado.
Métodos para mejorar la resolución de colisiones. Encadenamiento de Sinónimos Una buena manera de mejorar la eficiencia de un archivo relativo que utiliza el cálculo de direcciones, sin directorio auxiliar para guiar la recuperación de registros, es el encadenamiento de sinónimos. El encadenamiento de sinónimos puede emplearse con cualquier técnica de solución de colisiones. Mantener una lista ligada de registros con la misma dirección de origen no reduce el número de colisiones pero reduce los tiempos de
Unidad III: Organización de Archivos Relativos
11
Manejo de Archivos acceso para recuperar los registros que no se encuentran en su dirección de origen. Sólo los sinónimos de la llave objetivo son accesados. El encadenamiento de sinónimos se puede usar cuando se utiliza el método de direccionamiento abierto o cuando se utiliza el método de separación de desborde. Esto es, la lista ligada que empieza en una dirección de origen puede tener su siguiente nodo en el mismo archivo, o en un archivo separado. El encadenamiento de sinónimos casi siempre trabaja mejor que la solución de colisiones sin encadenamiento de sinónimos, a menos que se use el método de búsqueda en el directorio para registrar donde están realmente almacenados los registros.
Direccionamientos por Cubetas Otro enfoque, en este se asignan bloques de espacio (o "cubetas"), que puedan acomodar ocurrencias múltiples de registros, en lugar de asignar celdas individuales a registros. Cuando una cubeta es desbordada, alguna nueva localización deberá ser encontrada para el registro. Los métodos para el problema de sobrecupo de las cubetas son básicamente los mismos que los métodos para manejar las colisiones con el direccionamiento de un registro por celda o ranura. Cada cubeta principal generalmente tendrá un apuntador a una cadena de registros, en el área de sobrecupo, que tendrían que haber sido almacenados en la cubeta principal, pero que terminaron, en su lugar, en una cubeta de sobrecupo. Una cubeta de sobrecupo podría acomodar registros que fueran direccionados hacia diferentes cubetas principales. Los registros almacenados en una cubeta pueden ser manejados en una de dos formas: 1) pueden insertarse en el mismo orden de como llegan a la cubeta; 2) pueden mantenerse en orden según el valor de sus llaves. De igual modo que los registros en el área de la cubeta deben ser guardados ordenadamente, de acuerdo con su llave dentro de la cubeta, asimismo deberán mantenerse en orden los registros de una cadena de sinónimos de acuerdo al valor de su llave. El uso del direccionamiento por cubetas es común. El tamaño de la cubeta puede determinarse por el tamaño de una pista o de un sector de un disco o por el tamaño natural de paginación del sistema. Generalmente, el tamaño de la cubeta debería ser igual al tamaño del blocaje de registros para el archivo. Una ventaja importante al utilizar cubetas, que pueden contener múltiples registros es que se pueden acomodar registros de longitud variable. Con direccionamiento de cubetas y registros de longitud variable, el proceso de encontrar espacio disponible en una cubeta para
Unidad III: Organización de Archivos Relativos
12
Manejo de Archivos un nuevo registro es más complicado que la simple búsqueda secuencial de la prímer ranura abierta. El espacio encontrado debe ser suficientemente grande para acomodar al nuevo registro. Normalmente, el espacio es manejado en estas circunstancias manteniendo una lista ligada de huecos en la cubeta. Los huecos pueden estar dispersos entre los registros reales a causa de las supresiones. La cadena de huecos se examinará cuando se solicita espacio libre.
Unidad III: Organización de Archivos Relativos
13
Manejo de Archivos
Bibliografía S. Loomis Mary E., Estructura de datos y organización de archivos, 2ª. ed, Prentice Hall Hispanoamericana, Mexico, 1991.
Unidad III: Organización de Archivos Relativos
14
Manejo de Archivos
Operaciones en los archivos relativos Creación Un archivo debe ser creado en modo de acceso directo. Una vez creado se pueden agregar registros usando una técnica de cálculo de dirección para el mapeo de llave a dirección.
Actualización La actualización (añadir registros, modificar datos de los registros y borrar lógicamente) se realiza en modo de acceso directo; se localiza el registro y, después de realizar las modificaciones, se reescribe el registro.
Recuperación Los registros serán recuperados en modo de acceso directo, usando la función de cálculo de dirección.
Condiciones inesperadas (o que es lo que el programa debe validar) Lectura secuencial después del final del archivo Lectura directa ◦ Inexistencia de registro en la dirección relativa señalada ◦ La dirección relativa especifica esta afuera del límite del archivo Escritura secuencial. Rebasamiento del límite del espacio en el dispositivo. Escritura directa ◦ Un registro ya existe en la dirección especificada ◦ La dirección relativa especificada esta afuera del límite del archivo Re escritura directa ◦ Inexistencia de registro en la dirección especifica. ◦ La dirección relativa específica cae fuera del limite del archivo
Unidad III: Organización de Archivos Relativos
15
Manejo de Archivos
Bibliografía S. Loomis Mary E., Estructura de datos y organización de archivos, 2ª. ed, Prentice Hall Hispanoamericana, Mexico, 1991.
Unidad III: Organización de Archivos Relativos
16