Estoy tratando de implementar un mecanismo de almacenamiento de archivos que contiene una cantidad de registros de tamaño variable en un solo archivo con la garantía de que el conjunto de registros siempre será recuperable en un estado consistente, incluso si el sistema falló en un hardware nivel.¿Se garantiza que los datos en un archivo mapeado en memoria se descarguen secuencialmente?
Hasta ahora, cada esquema que he propuesto pivota al escribir datos secuencialmente. Se adjuntará algún dato al final de cada registro que confirma que la escritura tuvo éxito. Sin embargo, si los datos no se escriben necesariamente en el disco de forma secuencial cuando se vacían, es posible que los datos de confirmación se escriban antes de los datos de contenido.
Hay dos maneras obvias de todo esto, pero ambos son indeseables:
- a vaciar el contenido, a continuación, escribir la confirmación y tirar de la cadena. Agregar la descarga adicional puede degradar el rendimiento.
- Incluya una suma de comprobación en la confirmación (sería necesario leer el contenido para confirmar que es válido).
estoy usando C# en Windows (32 y 64 bits) y la memoria asignada la ejecución de archivos de .Net 4.0
La segunda idea (verificar los datos , la marca de tiempo, el número de secuencia y la suma de comprobación) parece legítimo. Sin embargo, en general, debería buscar clusters de alta disponibilidad, con máquinas separadas en una red. Todos los registros o escrituras de diarios deben replicarse a través de la red en dos o más máquinas. No puede extraer ninguna garantía de una sola máquina, punto. – rwong