
En el seguimiento de una preguntaIpreguntó enDesbordamiento de pila, ¿existe algún sistema de archivos en el que los datos se escriban "de extremo a frente" o "de abajo hacia arriba", en lugar de de arriba a abajo?
Específicamente, estoy buscando (quizás una diseñada específicamente) una forma de almacenar archivos de registro en la primera forma más reciente (a lacómo se organizan los blogs y sitios de noticias, con los más recientes en la parte superior).
existe tal bestia? Si es así, ¿qué es y dónde se puede encontrar?
Respuesta1
Lo que estás pidiendo no es sólo un sistema de archivos "invertido". Quieres unestructurado en registros, sistema de archivos “invertido”, es decir, un sistema de archivos de registros donde el último registro agregado aparece primero en el archivo. De hecho, el aspecto inverso probablemente se implementaría como "puede insertar un registro antes del primer registro existente".
Las interfaces del sistema de archivos que se encuentran en los sistemas operativos que normalmente se encuentran en las PC (Unix, Windows e incluso otras más exóticas) están estructuradas únicamente en bytes: no tienen noción de registro. Entonces no tienes suerte.
Un posible enfoque sería hacer que cada entrada de registro sea un archivo separado en el directorio. Luego, recorra el directorio en orden inverso al tiempo de creación del archivo, o en orden inverso de nombres si proporciona nombres que aumentan monótonamente a las entradas del registro. Dado que es probable que tenga una gran cantidad de entradas de registro, asegúrese de usar un sistema de archivos que admita directorios grandes (por ejemplo, en Linux, reiserfs y ext3 con la dir_index
función están bien, pero ext2 no), o use subdirectorios (uno para las primeras 1000 entradas, uno para las siguientes 1000 y así sucesivamente).
Otro enfoque sería utilizar una base de datos más sofisticada, por ejemplo una que pueda consultar en SQL, y simplemente seleccionar los registros en orden inverso al de su creación ( SELECT message FROM logs ORDER BY date DESC
).
Respuesta2
No estoy del todo seguro de que exista ninguno, pero ciertamente nunca he oído hablar de ninguno. Si se pueden hacer, creo que habrá algunas desventajas importantes.
Anteponer un archivo generalmente requiere una copia completa de los datos existentes. En un sistema de archivos, es posible que pueda manejarlo agregando un bloque al principio del archivo, pero aún causa algunos problemas menores. Los bloques con espacio libre tendrían que mantener el espacio libre al principio, por lo que muy probablemente requeriría una búsqueda adicional por parte del disco para encontrar la ubicación adecuada.
Manejar el espacio libre en el disco, cuando se trabaja hacia atrás, se convertiría en una gran molestia. Contradiría la mayoría de las técnicas de programación, ya que tendría que encontrar el índice máximo y luego trabajar desde allí.
Me imagino que se ralentizaría en archivos grandes y definitivamente sería ridículo programarlo.
En lugar de encontrar un sistema de archivos inverso, ¿por qué no puedes simplemente escribir el archivo como de costumbre y analizarlo al revés? Elabora un esquema básico de formato de mensajes, lee el archivo y analiza los mensajes del mismo, luego muéstralos del último al primero. Si solo necesita los últimos mensajes, busque hasta el final del archivo y luego regresenortemensajes. Tendría un resultado similar, pero con mucho menos trabajo y un rendimiento comparable o mejor.
Respuesta3
Es necesario separar las ideas dealmacenamientoyrecuperación. Incluso en los blogs que mencionas, es probable que las entradasalmacenadoen orden cronológico directo, perodesplegadoen orden cronológico inverso (ignorando el hecho de que se facilita mediante el uso de almacenamiento estructurado).
Posiblemente se podría crear un sistema de almacenamiento estructurado simplista que almacenaría entradas en el conocido orden directo con "registros" de forma libre y longitud variable con punteros de desplazamiento de bytes almacenados en un archivo de recursos en un formato de longitud fija (64 bits archivos de soporte de más de 18 millones de terabytes). Buscar el último registro o el nth
registro o el last - n
registro en el archivo de puntero, entonces el byte al que apunta en el archivo principal sería trivial y rápido. El truco que permitiría un sistema de archivos o controlador especial sería hacerlo atómico y hacer que el archivo de recursos sea transparente.
Respuesta4
Me vienen a la mente dos pensamientos:
Algunos sistemas de control de versiones almacenan la primera versión completa del archivo controlado y todas las versiones posteriores como cambios, mientras que otros almacenan la versión actual completa del archivo controlado y todas las versiones anteriores como cambios.
Si registra eventos de tiempo de ejecución en una base de datos en lugar de en un archivo plano, puede resultarle opaco si la base de datos almacena eventos de forma secuencial, secuencial inversa o al azar.