Posts etiquetados ‘organizacion de ficheros’

Existen varios tipos de organizaciones de ficheros:

Ficheros con organización secuencial.
Ficheros con organización relativa directa.
Ficheros con organización aleatoria o indirecta.
Organización secuencial indexada.
Ficheros con organización secuencial encadenada: Punteros.
Organización secuencial indexada-encadenada

FICHEROS CON ORGANIZACIÓN SECUENCIAL

1. CARACTERÍSTICAS DE LA ORGANIZACIÓN SECUENCIAL

Un fichero con organización secuencial es aquel en el que los registros se van grabando uno a continuación de otro, sobre el soporte informático, sin dejar huecos en medio.

En este tipo de ficheros existe, por tanto, una correspondencia total entre el orden lógico y el orden físico, si entendemos por orden lógico el orden en que son dados de alta y recuperados los registros, y por orden físico el orden en que están grabados los registros en el soporte.

Los registros normalmente estarán ordenados por el contenido de uno o más campos para hacer más fácil el trabajo de búsqueda, inserción y borrado de registros.

La organización secuencial es aconsejable para ficheros con un índice de utilización muy elevado y estables.

2. VENTAJAS E INCONVENIENTES DE LA ORGANIZACIÓN SECUENCIAL:

Podemos citar como ventajas:

1. Aprovecha al máximo el soporte, al no dejar huecos entre los registros.

2. Rápido acceso al registro siguiente. Por lo que se hace ideal cuando en cada operación de actualización o consulta se van a procesar la mayoría de los registros.

3. Se pueden utilizar cualquier tipo de registros: de longitud fija, variable o indefinida.

4. Se pueden grabar en cualquier tipo de soporte, tanto en secuenciales como direccionables.

5. Todos los lenguajes de programación disponen de instrucciones para trabajar con este tipo de ficheros.

Entre los inconvenientes destacaremos:

1. El único modo de acceso es el acceso secuencial, por lo que para leer el registro que ocupe la posición nº es necesario leer los n 1 registros anteriores. Esto hace que este tipo de organización no sea adecuado para ficheros en los que se necesita procesar frecuentemente registros aislados, es decir que tengan un índice de utilización bajo.

2. No se pueden insertar registros entre los que ya están grabados. Si tenemos el fichero ordenado por el contenido de un campo y queremos dar de alta un registro, que según ese orden debería ir entre dos registros que ya existen en el fichero, es necesario copiar todo el fichero en uno nuevo, grabando en el nuevo fichero todos los registros, insertando el registro que se quiere dar de alta en la posición que le corresponda. Otra posibilidad es ir dando de alta los registros al final del fichero y a continuación realizar una operación de reordenación de todo el fichero.

3. Si el fichero está grabado en un soporte secuencia por ejemplo una cinta magnética, para poder hacer modificaciones o borrado de registros es necesario hacer una copia del fichero en un fichero nuevo. Si el soporte no es secuencial las modificaciones se pueden hacer sobre el mismos registro, y el borrado se puede hacer de forma lógica, es decir, mediante la grabación de una en el registro.

3. UTILIZACIÓN DE FICHEROS CON ORGANIZACIÓN SECUENCIAL.

En el momento de utilizar los ficheros con organización secuencial tenemos que tener en cuenta el soporte sobre el que están grabados, pues algunas operaciones que se pueden hacer en los soportes direccionables no se pueden hacer en los soportes secuenciales, como pueden ser las modificaciones y borrado lógico de registros.

El formato de las instrucciones que nos permiten manejar los datos contenidos en un fichero con organización secuencial dependerá del lenguaje de programación con el que trabajemos. De forma general podemos resumir las instrucciones empleadas en el manejo de este tipo de ficheros en las siguientes:

Abrir (OPEN) Abrir un fichero para poder trabajar con sus registros. Se puede abrir de tres formas:
INPUT (I) Sólo para leer registros.
OUTPUT (0) Sólo para escribir registros.
INPUT OUPUT (I O) Para leer y escribir.
EXTEND (E) Para añadir registros al final del fichero

Cerrar (CLOSE) Cerrar el fichero, cuando ya no se va trabajar mas con sus registros.

Leer (READ) Pasar la información de un registro a la memoria principal del ordenador para que el programa pueda trabajar con los datos que contiene. Cada vez que se da una orden de leer se lee el siguiente registro.

Escribir (WRITE) Graba en el soporte la información de un registro con la información que tenga en la memoria principal.

Reescribir (REWRITE)
Graba sobre un registro que ya existe en el fichero. Antes de utilizar esta instrucción se tiene que leer antes el registro que se va a reescribir con una orden de leer (READ).

– Relativa directa

Un fichero de organización directa o aleatoria es aquel al que se accede directamente a un registro por la posición que ocupa. En este tipo de organización, la clave juega un papel fundamental, ya que se va a utilizar para obtener la posición relativa de cada registro dentro del fichero.

Por ello, para que un archivo pueda tener organización directa necesita:

– Almacenarse en un soporte direccionable
– La existencia de un campo clave.
– Establecer una correspondencia entre los valores de la clave y las direcciones disponibles en el soporte.

La transformación de la clave de un registro en la dirección en la que debe encontrarse en el fichero, se realiza mediante lo que se denomina algoritmo o función de conversión (hash).

f(k) p

Siendo:

– k la clave
– f la función que se aplica a la clave
– p la posición lógica en el soporte

Organización Aleatoria o indirecta

Son ficheros con organización relativa y clave alfanumérica, que hay que transformar para conseguir un valor numérico entero que facilite la correspondencia directa entre la clave y la dirección de memoria.
En este caso las claves no coinciden con la dirección física, que son las posiciones de cada registro.

Para transformar dicha clave alfanumérica y obtener la dirección física usamos las siguientes fórmulas:

f(clave) = clave / 2 (división entera), tendremos que los registros con clave 500 y 501 intentarán ocupar la misma dirección física: la 250. Es responsabilidad del programador evitar estas colisiones.

Otras funciones hash, como la ya vista f(clave) = clave x 2, no producen colisiones, pero en cambio provocan que muchas direcciones físicas no sean utilizadas, con lo que se desaprovecha el espacio de almacenamiento.

– Secuencial indexada

Esta organización aprovecha simultáneamente las ventajas de la organización secuencial y la de la organización aleatoria.

La organización secuencial indexada debe realizarse en un soporte de acceso directo.

Como se vio anteriormente, un fichero con organización secuencial indexada, está formado por tres áreas: primaria, de índices y de overflow.

En el área primaria se almacenan los registros formados durante la creación del archivo.. La organización de esta zona es secuencial, y los registros están grabados clasificados por sus claves.

El área de índices, organizada igualmente de forma secuencial. Cada registro contiene la clave del último registro de cada grupo (del área primaria), y la dirección relativa del primer registro del grupo.

En el área de overflow, inicialmente vacía al crear el archivo, se almacenan los registros procedentes del área primaria, cuando sus claves son intermedias a las existentes en su grupo, y, por tanto, no pueden añadirse al bloque correspondiente.

El funcionamiento de esta organización es la siguiente:

Cuando se desea localizar un registro, se introduce su clave. El programa de búsqueda consulta secuencialmente la tabla de índices, hasta encontrar la primera clave superior a la dada. Junto a esta se encuentra la dirección inicial del grupo de registros que debe contener el registro a localizar. Seguidamente, y por acceso directo, el programa se posicionará en esa dirección del área primaria, efectuando una búsqueda secuencial del registro por su clave. Si ésta no es encontrada en dicha área, el programa se colocará en el inicio del área de overflow, y también desde el primer registro, y de forma secuencial leerá y comparará con la clave buscada, las claves de los registros allí almacenados, hasta encontrar el registro buscado.

En grandes archivos, el tiempo consumido en la consulta secuencial de la tabla de índices puede ser muy elevado. Para solucionar esto la tabla de índices se crea con varios niveles de índices, es decir, con varias tablas relacionadas entre sí, conteniendo cada tabla el índice de los índices sucesivos.

El mayor inconveniente de esta organización se produce en el caso de que haya muchas inserciones de nuevos registros ya que como consecuencia de ello, el área de overflow crecerá rápidamente, y se producirán incrementos considerables en el tiempo de búsqueda.

– Secuencial encadenada

Uno de los inconvenientes de la organización secuencial es la imposibilidad de incluir (intercalar ) nuevos registros en el fichero sin hacer una copia del mismo.
Cuando se necesite utilizar un archivo organizado secuencialmente, en el que se efectúen frecuentes inserciones/supresiones de registros, pero en poca cantidad en relación al número de registros, o bien se desee tener ordenados los registros del archivo por diferentes criterios, se utiliza la organización secuencial encadenada.
Sus características son:

a) Debe utilizarse un soporte de acceso directo

b) Almacena los registros secuencialmente, en direcciones físicas consecutivas (sin huecos).

c) Cada registro del archivo contiene un/unos campo/s especiales, independientes de los de datos, denominados punteros.
El contenido de este campo es la dirección del siguiente o anterior registro en secuencia lógica, que puede o no coincidir con su secuencia física en el soporte.

d) Puede disponer de algunas zonas de overflow para admitir nuevos registros.

Secuencial indexada encadenada

La estructura de esta organización es la misma que la de la organización indexada, a la que se han añadido punteros entre los registros de la zona primaria y la de overflow. De esta manera se consigue, respecto a la organización, indexada, mejorar los tiempos de búsqueda de registros en la zona de overflow y mantener la organización lógica de registros.