Interesante pregunta; normalmente no se ve eso como un diseño. Tengo un programa que usa una técnica ligeramente similar para registrar el historial, pero usa un formato binario. El 'archivo de registro' tiene cuatro partes, todas en un formato neutral para la máquina:
- Un encabezado que contiene el número mágico y el número (máximo) de entradas en la lista usada y lista libre, el número de secuencia para la siguiente entrada del historial, el número real de entradas en la lista usada, el número real de entradas en la lista libre , y la longitud del archivo (cada uno de los cuales es de 4 bytes).
- La lista utilizada, cada entrada proporciona un desplazamiento y una longitud (4 bytes para cada parte de cada entrada).
- La lista libre, cada entrada similar a la entrada de la lista utilizada.
- Los datos principales, cada registro histórico que consiste en un conjunto contiguo de bytes terminados en un byte terminador nulo.
Cuando se asigna un nuevo registro, si hay espacio en la lista libre, sobrescribe una entrada allí (no necesariamente usándolo todo, en cuyo caso el fragmento permanece en la lista libre). Cuando no hay espacio en la lista libre, se asigna nuevo espacio al final. Cuando un registro antiguo gira, su espacio se mueve a la lista libre y se fusiona con cualquier registro libre adyacente. Está diseñado para manejar declaraciones SQL para que los registros se puedan distribuir en muchas líneas. Este código funciona en un número específico de registros. No limita el tamaño del archivo per se (aunque no sería difícil hacerlo).
El código principal del historial del código está en dos archivos, history.c e history.h, disponibles en la fuente del programa SQLCMD (mi versión, no la de Microsoft; la mía existía una década o más antes que la de Microsoft), que se puede descargar desde el archivo de software del grupo internacional de usuarios Informix . También hay un programa de volcado de archivos de historial (histdump.c) y un probador de historial (histtest.ec; afirma que es ESQL / C, pero en sí mismo es realmente un código C; una de las funciones de soporte que llama utiliza algunos Informix ESQL / C funciones de biblioteca). Póngase en contacto conmigo si desea experimentar sin utilizar Informix ESQL / C; consulte mi perfil. Hay algunos cambios triviales para que compile histtest fuera de su entorno de diseño, además de que necesita un archivo MAKE.