Registro de escritura anticipada

De Wikipedia, la enciclopedia libre

En informática, el registro de escritura anticipada (WAL) es una familia de técnicas para proporcionar atomicidad y durabilidad (dos de las propiedades ACID) en sistemas de bases de datos.[1]​ Puede verse como una implementación de la arquitectura "Event Sourcing", en la que el estado de un sistema es el resultado de la evolución de los eventos entrantes a partir de un estado inicial. Un registro de escritura anticipada es una estructura residente en disco auxiliar que sólo permite añadir información y que se utiliza para la recuperación de fallas y de transacciones. Los cambios se registran primero en el registro, que debe escribirse en un almacenamiento estable, antes de escribir los cambios en la base de datos.[2]

[3]​ La funcionalidad principal de un registro de escritura anticipada se puede resumir así:

  • Permitir que la caché de páginas almacene en un búfer las actualizaciones a las páginas que residen en el disco y, al mismo tiempo, garantizar una semántica de durabilidad en el contexto más amplio de un sistema de base de datos.
  • Conservar todas las operaciones en el disco hasta que las copias en caché de las páginas afectadas por estas operaciones se sincronicen en el disco. Cada operación que modifique el estado de la base de datos debe agregarse al registro en el disco antes de que se puedan modificar los contenidos de las páginas asociadas.
  • Permitir que los cambios perdidos en la memoria se reconstruyan a partir del registro de operaciones en caso de un fallo.

En un sistema que utiliza WAL, todas las modificaciones se escriben en un registro antes de aplicarse. Usualmente, tanto la información de rehacer como la de deshacer se almacenan en el registro.

El objetivo de esto se puede ilustrar con un ejemplo. Imagine un programa que está realizando alguna operación cuando la máquina en la que se está ejecutando pierde energía. Al reiniciar, es posible que ese programa necesite saber si la operación que estaba realizando tuvo éxito, o éxito parcial o falló. Si se utiliza un registro de escritura anticipada, el programa puede verificar este registro y comparar lo que se suponía que debía hacer cuando inesperadamente se perdió la energía con lo que realmente se hizo. Sobre la base de esta comparación, el programa podría decidir deshacer lo que había empezado, completar lo que había empezado o mantener las cosas como están.

Tras cierta cantidad de operaciones, el programa debe agregar un punto de control, escribiendo todos los cambios especificados en el WAL en la base de datos y borrando el registro.

WAL permite que las actualizaciones de una base de datos se realicen in situ . Otra forma de implementar actualizaciones atómicas es con paginación oculta, que no se hace in situ. La principal ventaja de realizar actualizaciones in situ es que reduce la necesidad de modificar índices y listas de bloqueo.

ARIES es un algoritmo popular de la familia WAL.

Los sistemas de archivos modernos suelen utilizar una variante de WAL al menos para los metadatos del sistema de archivos; a esto se le llama llevar un diario .

Referencias[editar]

  1. Hellerstein, Joseph M.; Stonebraker, Michael; Hamilton, James (2007). Architecture of a database system. Boston: Now. ISBN 978-1-60198-079-3. OCLC 191079239. 
  2. «30.3. Write-Ahead Logging (WAL)». PostgreSQL Documentation (en inglés). 11 de mayo de 2023. Consultado el 5 de junio de 2023. 
  3. Petrov, Alex (2019). Database Internals : a deep dive into how distributed data systems work. O'Reilly Media. ISBN 978-1492040347. OCLC 1103591515.