Page 1

EQUIPO #8

Las últimas páginas de un libro suelen contener un índice, es decir, una tabla que contiene una lista de temas (llaves) y números de página en donde pueden encontrarse esos temas (campos de referencia). Todos los índices están basados en el mismo concepto básico de naves y campos de referencia. Los tipos de índices que se examinan en este capítulo se llaman índices simples, porque se representan mediante arreglos simples de estructuras que contienen las llaves y los campos de referencia. En capítulos posteriores se examinan esquemas de indización que usan estructuras de datos más complejas, especialmente árboles. Los índices pueden ser muy simples, pero aun así proporcionan herramientas poderosas de procesamiento de archivos. El índice de un libro ofrece una forma de encontrar un tema rápidamente. Si el lector alguna vez ha consultado un libro que no tiene un buen índice, sabe que un índice es una mejor alternativa mejor que tener que buscar un tema a lo largo del libro en forma secuencial en general, la indización es otra forma de manejo del problema que se exploró en el capítulo 6; un índice es un recurso para encontrar información.

Existen varios métodos que podrían emplearse para crear un archivo de registros de longitud variable que almacene estos registros; Las direcciones de registros sugieren que cada registro sea precedido por un campo de tamaño que permita acceso mediante saltos secuenciales y un fácil mantenimiento del archivo.

Tanto el archivo de índice como el archivo de datos se crean como archivos vacíos, con registros de encabezado y nada más. Esto puede llevarse a cabo con bastante facilidad creando los archivos y escribiendo los encabezados en ambos archivos.

Se supone que el archivo de índice es lo suficientemente pequeño para caber en la memoria primaria, de tal suerte que se define un arreglo INDICE[] para almacenar los registros de índice. Cada elemento del arreglo tiene la estructura de un registro de índice. Por consiguiente, la carga del archivo de índices en la memoria es sólo cuestión de leer y guardar el registro de encabezado del índice, y después leer los registros del archivo de índice en el arreglo INDICE(], Como esto será una lectura secuencial, y puesto que los registros son pequeños, el procedimiento debe escribirse de tal forma que se lea un número grande de registros de índice a la vez, y no los programas no siempre se ejecutan hasta que terminan. El diseñador de programas necesita protegerse de las fallas de energía. de que el operador apague la máquina en el momento equivocado y de otros desastres similares. Uno de los peligros serios asociados con la lectura uno por uno. ¿Se


EQUIPO #8

entiende por qué? de un índice en la memoria y la escritura posterior, cuando el programa termina, es que si el programa se interrumpe, la copia del índice en el disco estará desactualizada e incorrecta. Es imperativo que un programa contenga al menos las siguientes dos defensas contra esta clase de error: Debe existir un mecanismo que permita al programa saber cuándo el índice no está actualizado. Una posibilidad consiste en activar una bandera de estado tan pronto como la copia del índice en la memoria cambie. Esta bandera de estado se puede escribir en el registro de encabezado del archivo de índices del disco en cuanto se haya leído el índice en la memoria, y se puede desactivar después cuando el índice se haya reescrito. Todos los programas podrían revisar la bandera de estado antes de usar un índice. Si se encuentra que la bandera está activa, entonces el programa sabrá que el índice no está actualizado. o si un programa detecta que un índice no está actualizado, debe acceder a un procedimiento que reconstruya el índice a partir del archivo de datos. Esto debe suceder automáticamente, antes de cualquier intento de usar el índice. .

Hay varios métodos para la eliminación de registros en archivos con registros de longitud variable, para reutilizar el espacio ocupado por ellos. Estos métodos son completamente viables para nuestro archivo de datos, ya que, a diferencia de un archivo de datos clasificado, los registros de este archivo no necesitan moverse para mantener el orden. Esta es una de las grandes ventajas de una organización de archivo indizada: se accede rápido a los registros individuales por llave sin la molestia de tener otros fijos. De hecho, la indización por sí misma fija todos los registros. Por supuesto, cuando se elimina un registro del archivo de datos, también debe eliminarse el registro correspondiente del archivo de índices. Como el índice está contenido en un arreglo durante la ejecución del programa, la eliminaci6n del registro de índice y el desplazamiento de los demás registros para agrupar el espacio puede ser una operación no muy costosa. Una vez más, existen oportunidades de hacer este reacomodo aún más rápido, empleando alguna dirección adicional por medio del uso de un vector de apuntadores a estructuras. Una actualización de registros. La actualización de registros entra en dos categorías:

 La actualización cambia el valor del campo de llave: Esta clase de actualización puede traer consigo un reacomodo del archivo de índices, así como del de datos. Conceptualmente, la forma más fácil de concebir esta c1ase de cambio es como una eliminación seguida de una adición. Puede implantarse este método de eliminar y agregar, y dar al usuario del programa la impresión de que simplemente está cambiando un registro.

 La actualización no afecta el campo de la llave:


EQUIPO #8

Este segundo tipo de actualización no requiere reacomodo del archivo de índices, pero bien puede implicar el reacomodo del archivo de datos. Si el tamaño del registro no cambia, o si disminuye por la actualización, el registro puede escribirse directamente en el espacio que tenía, pero si aumenta por la actualización, se tendrá que encontrar una nueva entrada para el registro. En el último caso, la dirección de inicio del registro reescrito debe reemplazar la dirección antigua en el campo dist_bytes, del registro de índice correspondiente

Indices  

indexamiento en estructuras de archivos