01.-Introducción¶
Los ficheros o archivos son la herramienta fundamental de trabajo en una computadora todavía a día de hoy. Las computadoras siguen almacenando la información en ficheros; eso sí, su estructura es cada vez más compleja.
Los datos deben de ser almacenados en componentes de almacenamiento permanente, lo que se conoce como memoria secundaria (discos duros u otras unidades de disco). En esas memorias, los datos se estructuran en archivos (también llamados ficheros).
Un fichero es una secuencia de números binarios que organiza información relacionada a un mismo aspecto.
En general sobre los archivos se pueden realizar las siguientes operaciones:
-
Abrir (open). Prepara el fichero para su proceso.
-
Cerrar (close). Cierra el fichero impidiendo su proceso inmediato.
-
Leer (read). Obtiene información del fichero.
-
Escribir (write). Graba información en el fichero.
-
Posicionarse (seek). Coloca el puntero de lectura en una posición concreta del mismo (no se puede realizar en todos los tipos de ficheros).
-
Comprobar fin de fichero (eof). Indica si hemos llegado al final del fichero.
02.-Uso de archivos para grabar datos¶
Los archivos, como herramienta para almacenar información, tomaron la terminología del mundo de la oficina empresarial. Así la palabra dato hace referencia a un valor sea un número o un texto o cualquier otro tipo de datos almacenable.
Cuando podemos distinguir datos referidos a una misma propiedad real a la que podemos poner un nombre, hablamos de campos. Así: Sánchez, Rodríguez, Serrat y Crespo son datos que perfectamente podrían encajar en un campo llamado Primer Apellido.
Los datos que se refieren al mismo elemento real (una persona, una factura, un movimiento bancario,…) se agrupan en registros. En un fichero de datos personales, cada registro sería una persona; cada campo sería cada propiedad distinguible en la persona.
03.-Tipos de archivos¶
ficheros secuenciales¶
En estos ficheros, los datos se organizan secuencialmente en el orden en el que fueron grabados. Para leer los últimos datos hay que leer los anteriores. Es decir leer el registro número nueve, implica leer previamente los ocho anteriores.
ventajas¶
-
Rápidos para obtener registros contiguos de una base de datos
-
No hay huecos en el archivo al grabarse los datos seguidos, datos más compactos.
desventajas¶
-
Consultas muy lentas al tener que leer todos los registros anteriores en el orden del archivo respecto al que queremos leer. Es decir, que si queremos leer el quinto registro, hay que leer los cuatro anteriores.
-
Algoritmos de lectura y escritura complejos. No es fácil hacer operaciones avanzadas con los datos
-
No se pueden eliminar registros del fichero (se pueden marcar de manera especial para que no sean tenidos en cuenta, pero no se pueden borrar)
-
El borrado provoca archivos que no son compactos
-
La ordenación de los datos requiere leer todos los datos, reorganizarlos en memoria y volver a grabarles en el archivo en el orden correcto. Se trata de una operación excesivamente lenta
ficheros de acceso directo o aleatorio¶
En estos ficheros se puede leer una posición concreta directamente; bastará saber la posición exacta (normalmente en bytes) del dato a leer para obtenerle. Es decir, posicionarnos en el quinto registro se haría de golpe, con una sola instrucción. Lo único que necesitamos saber el tamaño de cada registro, que en este tipo de ficheros debe de ser el mismo. Suponiendo que cada registro ocupa 100 bytes, el quinto registro comenzará en la posición 400. A partir de esa posición podremos leer todos los datos del registro.
ventajas¶
-
Acceso rápido a un registro concreto. No necesita leer los datos anteriores
-
La modificación de datos es más sencilla
-
Permiten acceso secuencial además del aleatorio (por lo que mejoran el caso anterior)
-
Permiten tanto leer como escribir a sin necesidad de cerrar el archivo.
-
Aptos para organizaciones relativas directas, en las que la clave del registro se relaciona con su posición en el archivo.
desventajas¶
-
Salvo en archivos relativos directos, no es apto por sí mismo para usar en bases de datos, ya que los datos se organizan en base a una clave que casi nunca coincide con la posición del registro en el archivo
-
No se pueden borrar datos (sí marcar para borrado, pero generarán huecos)
-
Las consultas sobre multitud de registros son más lentas que en el caso anterior.
ficheros secuenciales encadenados¶
Son ficheros con registros grabados secuencialmente que podríamos recorrer registro a registro o de forma aleatoria. Además cada registro posee un campo que contiene la dirección de otro registro (a este tipo de campos se les llama punteros). Cada registro usa su puntero para indicar la dirección del siguiente registro. Usando los punteros podremos recorrer los registros en un orden concreto.
Cuando aparece un nuevo registro, se añade al final del archivo, pero los punteros se reordenan para que se mantenga el orden.
ventajas¶
-
El fichero mantiene el orden en el que se añadieron los registros y un segundo orden en base a una clave. Incluso añadiendo más punteros a cada registro podremos establecer más formas de ordenar los registros.
-
La operación de ordenación no requiere reorganizar todo el fichero, sino sólo modificar los punteros
-
Posee las mismas ventajas que el acceso secuencial y el acceso aleatorio
desventajas¶
-
No se borran los registros, sino que se marcan para ser ignorados. Por lo que se malgasta espacio
-
Añadir registros o modificar las claves son operaciones que requieren recalcular los punteros por lo que llevan más tiempo que en los casos anteriores
ficheros secuenciales indexados¶
Se utilizan dos ficheros para los datos, uno posee los registros almacenados de forma secuencial, pero que permite su acceso aleatorio. El otro posee una tabla con punteros a la posición ordenada de los registros. Ese segundo fichero es el índice, una tabla con la ordenación deseada para los registros y la posición que ocupan en el archivo.
El archivo de índices posee unas cuantas entradas sólo en las que se indica la posición de ciertos valores claves en el archivo (cada 10, 15 ,20,... registros del archivo principal se añade una entrada en el de índices). El archivo principal tiene que estar siempre ordenado y así cuando se busca un registro, se busca su valor clave en la tabla de índices, la cual poseerá la posición del registro buscado. Desde esa posición se busca secuencialmente el registro hasta encontrarlo.
Existe un tercer archivo llamado de desbordamiento u overflow en el que se colocan los nuevos registros que se van añadiendo (para no tener que ordenar el archivo principal cada vez que se añade un nuevo registro) este archivo está desordenado. Se utiliza sólo si se busca un registro y no se encuentra en el archivo principal. En ese caso se recorre todo el archivo de overflow hasta encontrarlo.
Para no tener demasiados archivos en overflow (lo que restaría velocidad ya que no utilizaríamos el archivo de índices que es el que da velocidad), cada cierto tiempo se reorganiza el archivo principal, ordenando los datos en el orden correcto y recalculando el archivo de índices. Ejemplo:
ventajas¶
-
El archivo está siempre ordenado de forma secuencial en base a una clave. Por lo que la simple lectura secuencial del archivo obtiene un listado ordenado de los datos.
-
La búsqueda de datos es rapidísima
-
Permite la lectura secuencial (que además será en el orden de la clave)
-
Añadir un solo registro no conlleva un tiempo extra como en el caso anterior
desventajas¶
- Para un uso óptimo hay que reorganizar el archivo principal cada cierto tiempo y esta operación es muy costosa ya que hay que reescribir de nuevo y de forma ordenada todo el archivo con el área primeria, además de reorganizar el área de índices y eliminar el fichero de desbordamiento. Es tan costosa que se hace muy poco a menudo, pero en archivos de datos que se modifican muy a menudo, no reorganizar provocaría un área de desbordamiento enorme y perderíamos las ventajas de este modelo.
ficheros indexado-encadenados¶
Utiliza punteros e índices, es una variante encadenada del caso anterior. Hay un fichero de índices equivalente al comentado en el caso anterior y otro fichero de tipo encadenado con punteros a los siguientes registros. La diferencia está en que este segundo fichero que contiene el área primaria de los datos, no está ordenado secuencialmente, sino que el orden se realizaría recorriendo un puntero (como en el caso de los ficheros secuencialmente encadenados).
Cuando se añaden registros se añaden en un tercer fichero llamado de desbordamiento u overflow. En el área de desbordamiento los datos se almacenan secuencialmente, se accede a ellos si se busca un dato y no se encuentra el área primaria.
ventajas¶
- Posee las mismas ventajas que el modelo anterior además de que la reordenación es más rápida ya que sólo requiere modificar los punteros y el área de índices (no requiere reordenar todos los datos del área primaria).
desventajas¶
- Requieren compactar los datos a menudo para reorganizar índices y quitar el fichero de desbordamiento y es una operación lenta (aunque mucho menos lenta que en el caso anterior)
Ilustración 16. Ejemplo fichero secuencial indexado y encadenado
04.-Operaciones relacionadas con uso de archivos en bases de datos¶
borrado y recuperación de registros¶
Algunos de los tipos de ficheros vistos anteriormente no admiten el borrado real de datos, sino que sólo permiten añadir un dato que indica si el registro está borrado o no. Esto es interesante ya que permite anular una operación de borrado. Por ello esta técnica de marcar registros, se utiliza casi siempre en todos los tipos de archivos.
En otros casos los datos antes de ser eliminados del todo pasan a un fichero especial (conocido como papelera) en el que se mantienen durante cierto tiempo para su posible recuperación.
fragmentación y compactación de datos¶
La fragmentación en un archivo hace referencia a la posibilidad de que éste tenga huecos interiores debido a borrado de datos u a otras causas. Causa los siguientes problemas:
-
Mayor espacio de almacenamiento
-
Lentitud en las operaciones de lectura y escritura del fichero
Por ello se requiere compactar los datos. Esta técnica permite eliminar los huecos interiores a un archivo. Las formas de realizarla son:
-
Reescribir el archivo para eliminar los huecos. Es la mejor, pero lógicamente es la más lenta al requerir releer y reorganizar todo el contenido del fichero.
-
Aprovechar huecos. De forma que los nuevos registros se inserten en esos huecos. Esta técnica suele requerir un paso previo para reorganizar esos huecos.
compresión de datos¶
En muchos casos para ahorrar espacio de almacenamiento, se utilizan técnicas de compresión de datos. La ventaja es que los datos ocupan menos espacio y la desventaja es que al manipular los datos hay que descomprimirlos lo que hace que las operaciones básicas con el fichero se ralentizan.
cifrado de datos¶
Otra de las opciones habituales sobre ficheros de datos es utilizar técnicas de cifrado para proteger los ficheros en caso de que alguien no autorizado se haga con el fichero. Para leer un fichero de datos, haría falta descifrar el fichero. Para descifrar necesitamos una clave o bien aplicar métodos de descifrado; lógicamente cuanto mejor sea la técnica de cifrado, más difícil será descifrar los datos.