2.5. Organización y acceso de archivos

Organización y acceso de archivos
Imagen en pixabay de 422737 bajo licencia Creative Common

Un archivo puede estar almacenado en dispositivos direccionables (discos) o secuenciales (cintas). La organización y el acceso de la información en un archivo es fundamental a la hora de realizar operaciones sobre el mismo. Por un lado, dependiendo del uso, la estructura y la cantidad de información que contenga un archivo tendremos que diseñar la organización más conveniente. Además, tendremos que tener en cuenta el tipo de acceso, según el fichero, para realizar cualquier operación de lectura o escritura.

Atendiendo a dichas características (organización y acceso), los archivo se pueden clasificar básicamente en: secuenciales, directos e indexados. Existen otras subclases y variantes de las tres anteriores, aunque no las consideraremos en este curso.

.

A) Archivos de organización secuencial

Son aquellos archivos que se caracterizan por:

  • Una vez creados, los registros que forman el archivo se escriben o graban sobre el soporte de almacenamiento en posiciones de memoria físicamente contiguas, en la misma secuencia u orden en el que han sido introducidos din dejar huecos o espacios libres intermedios entre ellos.
  • Una vez grabados los datos en el fichero, no tienen por qué quedar necesariamente ordenados.
  • Por regla general, debemos elegir un campo que forme parte de la estructura del registro para indicar la secuencia de clasificación u ordenación; dicho campo es el que utilizaremos como campo clave para realizar operaciones tales como búsquedas o clasificaciones, aunque no es obligatorio la definición de dichos campos claves, quedando bajo criterio del programador la selección de aquellos campos que considere los más adecuados para ello.
Ventajas Inconvenientes
  • Rapidez en el acceso a un bloque de registros que se encuentran almacenados en posiciones de memoria físicamente contiguas.
  • No deja espacios vacíos intermedios entre registro y registro, optimizando al máximo la memoria ocupada.
  • En consultas de registros individuales, este tipo de organización deja de ser la más idónea, ya que habría que consultar secuencialmente todos los registros situados en posiciones anteriores al registro buscado.
  • En consultas individuales o de un solo registro debemos realizar un proceso para comparar el valor del campo del registro que se pretende localizar con el valor del mismo campo correspondiente a cada registro leído del fichero.
  • No permite la inserción intermedia de nuevos registros.
  • No permite la eliminación intermedia de registros.

.

Ejemplo:

Ejemplo organización secuencial

.

B) Archivos de organización directa

Este tipo de archivos presentan las siguientes características:

  • El almacenamiento de los registros sobre el soporte seleccionado (memoria auxiliar) se realiza a través de un identificador o clave que indica por una parte la posición del registro dentro del fichero y por otra la posición de memoria donde está ubicado.
  • Las claves son de tipo numérico, estableciéndose siempre una correspondencia directa entre dirección lógica y dirección física. Al ser la clave de tipo numérico no surgen problemas, pues los registros se ubican en direcciones de memoria de tipo numérico entero, lo que facilita establecer una correspondencia directa entre la clave y la dirección de memoria; de todo ello podemos deducir que la secuencia lógica de almacenamiento de los registros en el fichero coincide con la secuencia física de almacenamiento de los registros sobre el soporte utilizado.
  • El valor de la clave siempre está en relación con la capacidad máxima del soporte físico utilizado para el almacenamiento, por lo que nunca podemos almacenar un registro cuya clave esté por encima de los límites máximos del archivo.
  • Cada dirección sólo puede ser ocupada por un registro. El hecho de existir más de un registro con la misma clave es causa de error ya que ello supondría la posibilidad de almacenar en el fichero un registro repetido, este hecho recibe el nombre de sinónimo o colisión.
Ventajas Inconvenientes
  • Permite acceder a los datos de dos formas diferentes:
    • Directamente, mediante el identificador o clave del fichero.
    • Secuencialmente, partiendo siempre del primer registro almacenado en el fichero.
  • Permite realizar operaciones de escritura/lectura simultáneamente.
  • Son muy rápidos en el tratamiento de registros individuales.
  • Una consulta total del fichero puede suponer un gran inconveniente, pues al realizar un acceso secuencial sobre los datos del fichero estamos obligados a analizar posición por posición desde la primera hasta la última pudiendo ocurrir que algunas posiciones estén vacías, lo cual implica una considerable pérdida de tiempo, por lo que es necesario el empleo de técnicas avanzadas de programación para realizar lecturas secuenciales.
  • Deja gran cantidad de huecos (posiciones libres de memoria dentro del fichero. Estos huecos surgen debido a que los identificadores de los registros que se desean almacenar después de haber sido introducidos en el fichero indican posiciones de almacenamiento probablemente no contiguas, lo que implica un desaprovechamiento del soporte de almacenamiento o memoria auxiliar, respecto al número real de registros almacenados.
  • Se deben dar soluciones al problema de los sinónimos o colisiones.

.

Ejemplo:

Ejemplo organización directa

.

C) Archivos de organización indexada

La organización secuencial indexada, llamada comunmente organización indexada, es una variante de la organización secuencial como alternativa a los inconvenientes que presenta la organización secuencial. Para ello, se intentan aprovechar las ventajas tanto de la organización secuencial como de la organización directa, esto es, tratamiento de grandes volúmenes de información en la organización secuencial y acceso rápido y directo a los registros en la organización directa.

La información almacenada en un archivo con este tipo de organización se gestiona mediante la utilización de tablas, cuyos elementos contienen las direcciones de los datos a los que se puede acceder secuencialmente.

Estos archivos están formados por tres zonas o áreas denominadas área primaria, área de índices y área de excedentes. Veámoslas.

  • Área primaria: en esta zona están contenidos los registros ordenados ascendentemente por el valor de su clave. Esta zona o área del fichero se encuentra segmentada, es decir, dividida en segmentos, donde cada segmento almacena un bloque de N registros, todos ellos consecutivos y almacenados en posiciones de memoria físicamente contiguas. Se caracteriza por ser un área de organización secuencial, donde el acceso a cada registro se realiza en una doble operación que consiste en:
    1. Acceder directamente al segmento donde se haya ubicado el registro buscado.
    2. Una vez localizado el segmento, accedemos secuencialmente a los registros en él contenidos hasta localizar el registro buscado, o hasta alcanzar el final del segmento en caso de no hallarse el registro deseado.
  • Área de índices: este área se caracteriza principalmente porque tiene la misma estructura y cualidades que un fichero de organización secuencial, pero con la característica de que los registros que la forman están constituidos por sólo dos campos. El primer campo contiene la clave del último registro de cada segmento mientras que el segundo campo contiene la dirección de entrada a cada uno de los segmentos.
  • Área de excedentes: también llamada overflow, destinada a albergar todos aquellos registros que no han tenido cabida en el área primaria, por ser sus claves intermedias a la de los registros previamente almacenados en dicho área.

En este tipo de organización, el acceso a los registros se hará previa consulta a la tabla o área de índices, para determinar el segmento donde se encuentra el registro buscado dentro del archivo.

Para consultar un archivo secuencial indexado los pasos serían los siguientes:

  1. Consultamos el área de índices secuencialmente para localizar el segmento donde se halla el registro que queremos bucar.
  2. Una vez localizada la dirección de entrada al segmento, vamos al área primaria y accedemos directamente, situándonos en el primer registro de dicho segmento. Realizamos una consulta secuencial del segmento hasta localizar el registro deseado o alcanzar el final del mismo.
  3. En el supuesto de que el registro buscado no se hallase en el área primaria, una vez recorrido todo el segmento accederíamos al área de excedentes u overflow, para así determinar su posible localización en dicho área.

Ejemplo organización secuencial indexada