Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Índices
M. Oscar F. D’Cuire Galeano
Objetivos
• Listar las diferentes características de los
archivos de longitud fija y de longitud.
• Contrastar la utilización de índices versus la
no utilización de los mismos.
Contenido
• Repaso
• Operaciones sobre archivos
– Archivos Longitud Fija – Recuperación dinámica de
espacio
– Archivos Longitud Variable – Eliminación
– Fragmentación
• Índices
– Primario
– Secundario
Repaso
Mantenimiento de un archivo
• Con el fin de optimizar el desempeño de la
manipulación de un archivo, es necesario
conocer cual es el mantenimiento que se le
dará a ese archivo:
– Frecuencia Escritura
• Inserciones o nuevos registros
• Eliminaciones
• Respaldos
– Frecuencia Lectura (consulta)
• El mantenimiento es importante porque con
el tiempo el desempeño se va deteriorando.
Ejemplos prácticos
Tipo de Procesamiento Frecuencia de Ejemplo Características
actualización
Habitaciones en un hotel
Listas de correos
Ejecución de software de
monitoreo
¿Qué hacer frente a situaciones
extraordinarias?
• Ejemplo:
– Archivo con registros de longitud variable
– Se elimina un registro
– ¿Dónde insertaría un nuevo registro?
Compactación
• El proceso que consiste en la
redistribución del espacio dentro del
archivo con el fin de aprovecharlo al
máximo.
• Para ello:
– Identificar los registros eliminados
– Marcar los registros antes de eliminarlos (la
idea es dar opción a poder recuperar
información)
– Reutilizar el espacio
Compactación
• Identificación del registro
– Borrar (Lopez, Pedro)
• Marcar el registro
Importancia de un buen diseño
desde el inicio
• ¿Es posible pasar de
Apuntador
Size 45 40 Size 38 300 Size 68 -1
Inicial (130)
Apuntador
Size 45 40 Size 38 190 Size 68 -1
Inicial (130)
9529 15 PRO 8
SPS 2
SPS 14
TGU 1
TGU 16
Índices Primarios o Simples
• Para implementar la utilización de índices se requiere:
– Archivo de Datos: el archivo que tiene todos los registros
– Archivo de Índices: el archivo donde se almacenan los índices del
archivos
• Un archivo mas pequeño
• Normalmente de longitud fija
• Se impone un límite en la cantidad de llaves
• El archivo de índices contiene la siguiente información:
– Campo llave (o clave): un identificador que debe ser único para cada
registro. (Ejm. Identidad, número de cuenta, código de producto, etc…)
– Posición en el archivo:
• Longitud variable / fija : la ubicación (número de columna) donde inicia el registro
• Longtud fija: número de registro (se puede calcular la posición exacta
conociendo el tamaño de cada registro)
• Adicionalmente se podría incluir otros campos como:
– Longitud: el tamaño en bytes del registro en el archivo de datos.
– Fecha de última modificación
Índices Primarios o Simples
• En este ejemplo, asumimos que
trabajamos con registros de longitud fija
(ejm 100 bytes por registro).
– El archivo de datos se encuentra
desordenado.
– El archivo de índices debe encontrarse
ordenado.
• En este archivo se podrá ver dos columnas
(campo llave, dirección donde inicia el registro)
Algunas consideraciones al
utilizar índices simples
• Un archivo de índices debe ser mas fácil de manejar ya que normalmente debería
ser mas pequeño que el archivo de datos.
• Debe tenerse cuidado al momento de definir el campo que será utilizado como llave.
Ejm. Si se el campo llave a utilizar será identidad, no puede definirse un campo con
5 caracteres.
• La idea de utilizar índices simples es hacerlo con archivos de datos que no tengan
demasiado información
– ¿Por qué? De esta manera el archivo de índice puede ser cargado en memoria
(haciendo que el acceso al mismo sea mas rápido)
• Para cargar el archivo en memoria se puede considerar la utilización de arreglo
INDICES[], con al menos dos columnas (llave, posición en el archivo).
• El tener el archivo en memoria nos permitirá acceder a él mas rápido y por ende
podremos detectar la dirección del registro y acceder mas rápido al archivo de datos
con el registro.
– Cada lenguaje de programación tiene sus comandos específicos para copiar
datos en memoria.
– Ejm. memcpy ( C )
Operaciones con índices
simples
• El trabajar con índices simples nos obliga a
analizar las siguientes operaciones:
1.Crear archivos originales de índices y de datos.
2.Cargar el archivo de índices en memoria antes
de usarlo.
3.Reescribir el archivo de índices cuando se realice
un cambio en memoria.
4.Agregar registros al archivo de datos e índices.
5.Eliminar registros del archivo de datos.
6.Actualizar registros del archivo de datos.
Creación de archivos originales
de índices y de datos
• Se deben crear los archivos como se hace
normalmente.
• Es una operación relativamente fácil.
• En el archivo de índices algunas veces se reservan los
primeros bytes para el “encabezado”
– Encabezado: información especial que define función de un
archivo, dentro de la cual se pueden citar algunos atributos:
cantidad de registros, última fecha de modificación, autor, etc…
ARCHIVO ARCHIVO
DATOS INDICE
Carga de archivos de índices en
memoria
• Utilizar un arreglo INDICES[] para copiar la información
del archivo de índices en memoria.
• Las funciones para copiar valores a memoria varían de
acuerdo al lenguaje de programación utilizado.
– Ejm. Memcpy (c++)
ARCHIVO
INDICE[ ]
INDICE
Reescritura del archivo de índices
después de realizar un cambio en
memoria
• Una vez que se haga alguna modificación en INDICES[]
se debe buscar el mecanismo para grabar esos cambios
en el archivo de índices.
• Prever que puede pasar en caso de interrupciones
eléctricas (incongruencia entre archivo de índices e
INDICES[])
– Buscar un método para reconstruir el archivo de índices a partir
del archivo de datos.
– Utilizar alguna bandera para indicar que INDICES[] y archivo
índices están sincronizados
ARCHIVO
INDICE
INDICE[ ]
Agregar nuevos registros
• Si se agregan registros al archivo de datos
debe agregarse un registro a INDICES[]
• Al modificar INDICES[] debe modificarse
también el archivo de índices.
ARCHIVO ARCHIVO
DATOS
INDICE[ ] INDICE
Eliminación de registros
• Utilizar las técnicas ya vistas (borrado
lógico / físico).
• El índice del registro también tiene que ser
afectado, primero eliminando el registro de
INDICES[], luego actualizando el archivo
de índices.
ARCHIVO ARCHIV
DATOS
INDICE[ ]
O INDICE
Actualización de registros
• Hay dos posibles escenarios:
– Modificar un campo que no es llave
• No afecta el índice
• Solo se modifica el archivo de datos.
– Modificar solo el campo llave
• Realizar el cambio en el archivo de datos
• Realizar el cambio en INDICE[]
• Reacomodar INDICE[] si fuera necesario
• Actualizar el archivo de índices con los cambios
• Ejm. Si en el ejemplo se modifica el registro con la llave
4146165, con la nueva llave 58541010 INDICE[] y el
archivo de índices deberían de pasar de:
Se cambia el valor de la
llave y se reacomoda el
archivo de índices. La
posición del registro no
cambia.
Índices Secundarios
• Surgen como una opción cuando se tienen archivos
con grandes volúmenes de información.
• Cuando se busca un libro en una biblioteca le
decimos a la bibliotecaria ¿Tiene el libro de
estructura de datos ? le decimos ¿Tiene el libro
código CD4587986X-23?
• Por lo general no buscamos la información por llaves
primarias, si no por descriptores que pueden ser
nombres o palabras clave. Esto es lo que se conoce
como llaves secundarias.
Indices Secundarios
• Para implementar un índice secundario,
agregamos a la estructura de índice
primario o simple un tercer archivo:
archivo de índice secundario.
Índice
Índice Primario:
Secundario: ordenado
ordenado por código
por ciudad
Datos: en
desorden
Indices Secundarios
• El índice secundario se compone de:
– Clave secundario (un campo que no necesariamente identifica
exclusivamente a un registro y cuyo valor puede repetirse en varios
registros)
– Llave primaria (identificador único de cada registro)
• Algunas operaciones con índices secundarios:
– Agregar registros: también hay que agregar el nuevo registro en el
archivo de índices primario y en el archivo de índice secundario
– Eliminar registros: se debe eliminar del archivo de índices y del
secundario, para ambos casos hay que reacomodar el archivo.
– Actualizar registros:
• Campo no llave: solo afecta archivo de datos.
• Campo llave secundaria: afecta archivo de datos, y archivo de índice secundario.
Este último debe reacomodarse.
• Campo llave primaria: afecta archivo de datos, archivo de índice primario y archivo
de índice secundario. Los dos deben reacomodarse
Desventajas de los índices
secundarios
• Hay que reacomodar el archivo secundario cada
vez que se inserte un nuevo registro al archivo de
datos, aún y cuando ya haya algún registro que
tenga esa llave secundaria.
– Si hay llaves secundarias duplicadas, el campo de
llave secundaria se repite para cada registro en el a.
de índices secundarios. Esto desperdicia el espacio y
dificulta que sea cargado en memoria.
• Una solución puede ser:
– Cambiar la estructura del índice secundario
– Asociar un arreglo de referencias con cada llave
secundaria.
Asociando varias claves
primarias a una llave
• Siguiendo el ejemplo
secundaria