La inconsistencia de datos se refiere a si los mismos datos guardados en diferentes lugares coinciden o no.
La coherencia en un momento determinado es una propiedad importante de los archivos de copia de seguridad y un objetivo fundamental del software que crea copias de seguridad. También es relevante para el diseño de sistemas de memoria de disco, en particular en lo que respecta a 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 necesita estar operativa las 24 horas del día, pero también debe respaldarse con regularidad para protegerse contra desastres. 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 respaldarse.
Estos archivos grandes, como cualquier base de datos, contienen numerosas estructuras de datos que se referencian entre sí por ubicación. Por ejemplo, algunas estructuras son índices que permiten al subsistema de la base de datos encontrar rápidamente los resultados de una búsqueda. Si las estructuras de datos dejan de referenciarse entre sí correctamente, se puede decir que la base de datos está dañada .
La importancia de la consistencia en un punto en el tiempo se puede ilustrar con lo que sucedería si se hiciera una copia de seguridad sin ella.
Supongamos que la base de datos de Wikipedia es un archivo enorme, que tiene un índice importante ubicado en el 20 % del recorrido y guarda los datos de los artículos en la marca del 75 %. Consideremos un escenario en el que un editor llega 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 tiene en cuenta 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 de artículos (en la marca del 75 %) y se agrega una entrada de índice correspondiente (en la marca del 20 %).
Como la copia de seguridad ya está a medio camino de realizarse 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 puede ser editada miles de veces por hora y las referencias están prácticamente siempre repartidas por todo el archivo y pueden llegar a ser millones, miles de millones o incluso más. Una copia de seguridad secuencial contendría literalmente tantas pequeñas corrupciones que la copia de seguridad sería completamente inutilizable sin un largo proceso de reparación que no podría ofrecer ninguna garantía en cuanto a 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 momento determinado. En el ejemplo de Wikipedia, garantizaría que la copia de seguridad se escribiera sin el artículo añadido en la marca del 75 %, de modo que los datos del artículo fueran coherentes con los datos del índice escritos anteriormente.
La consistencia en un punto en el tiempo también es relevante para los subsistemas de discos de computadora.
En concreto, 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 quedarse sin energía, bloquearse, fallar o dejar de funcionar en cualquier momento. Cuando están diseñados correctamente, garantizan que los datos no se corromperán de forma irrecuperable si se corta la energía. Los sistemas operativos y los sistemas de archivos hacen esto al garantizar que los datos se escriban en un disco duro en un orden determinado y confían en eso para detectar y recuperarse de apagados inesperados .
Por otro lado, escribir datos en el disco de manera rigurosa 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ápido al minimizar el tiempo que se dedica a mover los cabezales del disco.
Los problemas de consistencia 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 apagado 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 podría escribir los siguientes registros en un disco en el siguiente orden:
El sistema operativo se basa en la suposición de que si ve que el elemento n.° 1 está presente (lo que indica que el archivo está a punto de guardarse), pero que falta el elemento n.° 4 (lo que confirma que se ha realizado correctamente), la operación de guardado no se ha realizado correctamente y, por lo tanto, debe deshacer todos los pasos incompletos que ya se hayan realizado 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 guarden en el disco en orden secuencial.
Supongamos 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 el sistema se apaga después de escribir 4, antes de 3, 1 y 2, y por lo tanto esas escrituras nunca ocurren. Cuando se vuelve a encender la computadora, el sistema de archivos mostrará que contiene un archivo llamado XYZ que se encuentra en el sector 123, pero este sector en realidad no contiene el archivo. (En cambio, el sector contendrá basura, o ceros, o una porción 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á entonces dos archivos que inesperadamente reclaman el mismo sector (conocido 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 el caso de un apagado inesperado, los cuatro elementos se escribirán de una de solo cinco maneras posibles: completamente (1-2-3-4), parcialmente (1, 1-2, 1-2-3) o no se escribirán en absoluto.
Los controladores de disco de hardware de alta gama 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 y al mismo tiempo mitigar el riesgo de apagados involuntarios. La unidad de respaldo de batería mantiene la memoria alimentada incluso durante un apagado para que cuando la computadora se encienda nuevamente, pueda completar rápidamente cualquier escritura que haya realizado previamente. Con un controlador de este tipo, 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. El controlador básicamente miente al sistema operativo y le 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 corta la energía), y la batería de respaldo protege contra el riesgo de corrupción de datos al brindarle al controlador una forma de reparar silenciosamente cualquier daño que pueda ocurrir como resultado.
Si se corta la energía después de haber escrito el elemento 4, la memoria respaldada por batería contiene el registro de compromiso de los otros tres elementos y garantiza que se escriban ("vacíen") en el disco en la próxima oportunidad disponible.
La coherencia (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 de garantizar que los resultados de una transacción de base de datos sean visibles para todos los nodos simultáneamente. Es decir, una vez que se ha confirmado la transacción, 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 gestiona la transferencia de dinero. Supongamos que una transferencia de dinero requiere dos operaciones: escribir un débito en un lugar y un crédito en otro. Si el sistema se bloquea o se apaga cuando una operación se ha completado pero la otra no, y no hay nada en marcha para corregirlo, se puede decir que el sistema carece de coherencia de las transacciones. En el caso de una transferencia de dinero, es deseable que se complete toda la transacción o que no se complete ninguna de ellas. Ambos escenarios mantienen el saldo bajo control.
La consistencia 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.
La coherencia de la aplicación, de forma similar a la coherencia de las transacciones, se aplica a una escala mayor. En lugar de tener el alcance de una única transacción, los datos deben ser coherentes dentro de los límites de muchos flujos de transacciones diferentes de una o más aplicaciones. Una aplicación puede estar formada 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 todos los archivos y bases de datos relacionados están sincronizados, lo que representa el estado real de la aplicación.