La coherencia de los datos se refiere a si los mismos datos guardados en diferentes lugares coinciden o no.
Consistencia puntual
La coherencia en un momento determinado es una propiedad importante de los archivos de respaldo y un objetivo crítico del software que crea respaldos. También es relevante para el diseño de sistemas de memoria de disco, específicamente en relación con lo que sucede cuando se apagan inesperadamente.
Como ejemplo de copia de seguridad relevante, considere un sitio web con una base de datos como la enciclopedia en línea Wikipedia , que debe estar operativa las 24 horas del día, pero también debe respaldarse con regularidad para protegerse contra desastres. Algunas partes de Wikipedia se actualizan constantemente cada minuto de cada día, mientras tanto, la base de datos de Wikipedia se almacena en servidores en forma de uno o varios archivos muy grandes que requieren minutos u horas para realizar copias de seguridad.
Estos archivos grandes, como con cualquier base de datos, contienen numerosas estructuras de datos que hacen referencia entre sí por ubicación. Por ejemplo, algunas estructuras son índices que permiten al subsistema de base de datos encontrar rápidamente resultados de búsqueda. Si las estructuras de datos dejan de hacer referencia entre sí correctamente, se puede decir que la base de datos está dañada .
Ejemplo de contador
La importancia de la coherencia en un momento determinado se puede ilustrar con lo que sucedería si se hiciera una copia de seguridad sin ella.
Suponga que la base de datos de Wikipedia es un archivo enorme, que tiene un índice importante ubicado al 20% del recorrido y guarda los datos del artículo en la marca del 75%. Considere un escenario en el que viene un editor y crea un nuevo artículo al mismo tiempo que se realiza una copia de seguridad, que se realiza como una simple " copia de archivo " que copia desde el principio hasta el final de los archivos grandes y no lo hace. Considere la coherencia de los datos, y en el momento de la edición del artículo, está completo en un 50%. El nuevo artículo se agrega al espacio del artículo (en la marca del 75%) y se agrega una entrada de índice correspondiente (en la marca del 20%).
Debido a que la copia de seguridad ya está a mitad de camino y el índice ya se copió, la copia de seguridad se escribirá con los datos del artículo presentes, pero sin la referencia del índice. Como resultado de la inconsistencia, este archivo se considera dañado.
En la vida real, una base de datos real como la de Wikipedia se puede editar miles de veces por hora, y las referencias están prácticamente siempre repartidas por todo el archivo y pueden ascender a millones, miles de millones o más. Una copia de seguridad de "copia" secuencial contendría literalmente tantas pequeñas corrupciones que la copia de seguridad sería completamente inutilizable sin un proceso de reparación prolongado que no podría garantizar la integridad de lo que se ha recuperado.
Un proceso de copia de seguridad que tenga en cuenta la coherencia de los datos garantiza que la copia de seguridad sea una instantánea de cómo se veía toda la base de datos en un solo momento. En el ejemplo de Wikipedia dado, se aseguraría de que la copia de seguridad se escribiera sin el artículo agregado en la marca del 75%, de modo que los datos del artículo fueran consistentes con los datos del índice escritos previamente.
Sistemas de almacenamiento en caché de disco
La coherencia en un punto en el tiempo también es relevante para los subsistemas de discos de computadora.
Específicamente, los sistemas operativos y los sistemas de archivos están diseñados con la expectativa de que el sistema informático en el que se ejecutan podría perder energía, fallar, fallar o dejar de funcionar en cualquier momento. Cuando se diseñan correctamente, garantizan que los datos no se corrompan irrecuperablemente si se pierde la energía. Los sistemas operativos y los sistemas de archivos hacen esto asegurándose de que los datos se escriban en un disco duro en un orden determinado, y confían en eso para detectar y recuperarse de apagones inesperados .
Por otro lado, la escritura rigurosa de datos en el disco en el orden que maximiza la integridad de los datos también afecta el rendimiento. Se utiliza un proceso de almacenamiento en caché de escritura para consolidar y volver a secuenciar las operaciones de escritura de modo que se puedan realizar más rápidamente minimizando el tiempo empleado en mover cabezales de disco.
Las preocupaciones sobre la coherencia de los datos surgen cuando el almacenamiento en caché de escritura cambia la secuencia en la que se llevan a cabo las escrituras, porque existe la posibilidad de un cierre inesperado que viole la expectativa del sistema operativo de que todas las escrituras se confirmarán secuencialmente.
Por ejemplo, para guardar un documento típico o un archivo de imagen, un sistema operativo puede escribir los siguientes registros en un disco en el siguiente orden:
- Entrada de diario que dice que el archivo XYZ está a punto de guardarse en el sector 123.
- El contenido real del archivo XYZ se escribe en el sector 123.
- El sector 123 ahora está marcado como ocupado en el registro de espacio libre / utilizado.
- Entrada de diario que anota el archivo completamente guardado, y su nombre es XYZ y se encuentra en el sector 123.
El sistema operativo se basa en la suposición de que si ve que el elemento n. ° 1 está presente (que indica que el archivo está a punto de guardarse), pero ese elemento n. ° 4 falta (confirmando el éxito), la operación de guardado no tuvo éxito y, por lo tanto, debería deshacerse. cualquier paso incompleto que ya se haya tomado para guardarlo (por ejemplo, marcar el sector 123 como libre ya que nunca se llenó correctamente y eliminar cualquier registro de XYZ del directorio de archivos). Se basa en que estos elementos se envíen al disco en orden secuencial.
Suponga que un algoritmo de almacenamiento en caché determina que sería más rápido escribir estos elementos en el disco en el orden 4-3-1-2, y comienza a hacerlo, pero la energía se apaga después de escribir 4, antes de 3, 1 y 2, y por lo que esas escrituras nunca ocurren. Cuando se vuelve a encender la computadora, el sistema de archivos mostraría que contiene un archivo llamado XYZ que se encuentra en el sector 123, pero este sector realmente no contiene el archivo. (En cambio, el sector contendrá basura, ceros o una parte aleatoria de algún archivo antiguo, y eso es lo que se mostrará si se abre el archivo).
Además, el mapa de espacio libre del sistema de archivos no contendrá ninguna entrada que muestre que el sector 123 está ocupado, por lo que más adelante, probablemente asignará ese sector al siguiente archivo que se guardará, creyendo que está disponible. El sistema de archivos tendrá dos archivos que reclamarán inesperadamente el mismo sector (lo que se conoce como archivo con vínculos cruzados ). Como resultado, una escritura en uno de los archivos sobrescribirá parte del otro archivo, dañándolo de forma invisible.
Un subsistema de almacenamiento en caché de disco que garantiza la coherencia en un punto en el tiempo garantiza que, en caso de un apagado inesperado, los cuatro elementos se escribirían de una de las cinco formas posibles: completamente (1-2-3-4), parcialmente (1, 1-2, 1-2-3), o nada.
Los controladores de disco de hardware de gama alta del tipo que se encuentran en los servidores incluyen una pequeña unidad de respaldo de batería en su memoria caché para que puedan ofrecer las ganancias de rendimiento del almacenamiento en caché de escritura al tiempo que mitigan el riesgo de apagados no deseados. La unidad de respaldo de batería mantiene la memoria encendida incluso durante un apagado, de modo que cuando la computadora se enciende nuevamente, puede completar rápidamente cualquier escritura que haya realizado previamente. Con tal controlador, el sistema operativo puede solicitar cuatro escrituras (1-2-3-4) en ese orden, pero el controlador puede decidir que la forma más rápida de escribirlas es 4-3-1-2. Básicamente, el controlador le miente al sistema operativo e informa que las escrituras se han completado en orden (una mentira que mejora el rendimiento a expensas de la corrupción de datos si se pierde la energía), y la batería de respaldo se protege contra el riesgo de corrupción de datos al dar la controlador una forma de reparar silenciosamente todos y cada uno de los daños que pudieran ocurrir como resultado.
Si se corta la energía después de que se haya escrito el elemento 4, la memoria respaldada por batería contiene el registro de compromiso de los otros tres elementos y asegura que se escriban ("descarguen") en el disco en la próxima oportunidad disponible.
Consistencia de transacciones
La consistencia (sistemas de bases de datos) en el ámbito de los sistemas de bases de datos distribuidas se refiere a la propiedad de muchas bases de datos ACID para garantizar que los resultados de una transacción de la base de datos sean visibles para todos los nodos simultáneamente. Es decir, una vez que la transacción se ha comprometido, todas las partes que intentan acceder a la base de datos pueden ver los resultados de esa transacción simultáneamente.
Un buen ejemplo de la importancia de la coherencia de las transacciones es una base de datos que maneja la transferencia de dinero. Suponga que una transferencia de dinero requiere dos operaciones: escribir un débito en un lugar y un crédito en otro. Si el sistema falla o se apaga cuando una operación se ha completado pero la otra no, y no hay nada para corregir esto, se puede decir que el sistema carece de coherencia en las transacciones. Con una transferencia de dinero, es deseable que se complete la transacción completa o que no se complete ninguna. Ambos escenarios mantienen el equilibrio bajo control.
La coherencia de las transacciones garantiza precisamente eso: que un sistema esté programado para poder detectar transacciones incompletas cuando se enciende y deshacer (o "revertir") la parte de las transacciones incompletas que se encuentren.
Consistencia de la aplicación
La coherencia de la aplicación , similar a la coherencia de las transacciones, se aplica a una escala mayor. En lugar de tener el alcance de una sola transacción, los datos deben ser consistentes dentro de los límites de muchos flujos de transacciones diferentes de una o más aplicaciones. Una aplicación puede estar compuesta por muchos tipos diferentes de datos, varios tipos de archivos y fuentes de datos de otras aplicaciones. La coherencia de la aplicación es el estado en el que se sincronizan todos los archivos y bases de datos relacionados, lo que representa el estado real de la aplicación.