Cómo hacer una base de datos inmutable

3 minutos

Base de datos inmutable

Una base de datos en la que los datos no pueden ser modificados una vez que han sido agregados. Esto significa que todos los datos deben ser validados antes de ser agregados a la base de datos y que cualquier intento de modificar los datos existentes será detectado y rechazado.

Son ideales para aplicaciones que requieren un alto nivel de consistencia y precisión de los datos (como la cronología de un paciente de un hospital), como los sistemas de contabilidad (los datos bancarios) o los sistemas de gestión de riesgos. También puede ser útil en entornos en los que se necesita un control estricto sobre los datos, como los sistemas de seguridad o los sistemas de gestión de la cadena de suministro.

Sus utilidades son varias. En primer lugar, garantizan que los datos sean consistentes y precisos, ya que no pueden ser modificados una vez que han sido agregados. En segundo lugar, simplifican el proceso de respaldar y restaurar los datos, porque siempre se puede volver a la versión original de los datos si es necesario. Finalmente, las bases de datos inmutables pueden simplificar el proceso de auditar y rastrear los cambios, ya que todos los cambios se registran de forma cronológica.

Voy a enseñarte como puedes diseñar una base de datos inmutable. Te ayudará a conocer los entresijos de otras base de datos similares (Datomic, immudb…) y como punto de partida en caso de querer construir una propia.

Principios

  • Las filas nunca se actualizan ni se borran, solo se agregan nuevas.
  • Disponemos de 2 columnas de control (id y rev), más una extra para los datos llamada data.
  • No hay restricciones en la estructura de datos, data, ya que se utilizan diccionarios sin limitaciones en anidaciones.
  • Un diccionario vacío en data, es equivalente a estar eliminado.
  • Al recuperar información, se devuelve la última revisión (rev), ignorando data

Estructura

id rev data
Número entero Número entero Diccionario
  • id es el identificador único del dato. Se asigna incrementalmente y nunca cambia en las diferentes versiones.
  • rev indica la revisión del dato. Según se realicen cambios, irá autoincrementándose.
  • data representa a la información, que será un diccionario sin limitaciones en anidaciones o número de keys.

Ejemplos reales

Agregar

La id se autoincrementará, rev siempre empezará por 1 y data debe contener información.

Se añaden 3 usuarios.

id rev data
1 1 {"nombre": "María", "edad": 34}
2 1 {"nombre": "Juan", "edad": 22}
3 1 {"nombre": "Marcos", "edad": 49}

Modificar

Para esta acción se agrega una nueva fila donde se mantiene la id, se autoincrementa rev y data cambia.

Se modifica la edad de Juan a 19. A continuación se añade altura a María. Por último, se modifica el nombre de María por Lucia.

id rev data
1 1 {"nombre": "María", "edad": 34}
2 1 {"nombre": "Juan", "edad": 22}
3 1 {"nombre": "Marcos", "edad": 49}
2 2 {"nombre": "Juan", "edad": 19}
1 2 {"nombre": "María", "edad": 34, "altura": 165}
1 3 {"nombre": "Lucia", "edad": 34, "altura": 165}

Eliminar

Para esta acción se agrega una nueva fila donde se mantiene la id, se autoincrementa rev y data se deja vacía.

Se elimina a Marcos.

id rev data
1 1 {"nombre": "María", "edad": 34}
2 1 {"nombre": "Juan", "edad": 22}
3 1 {"nombre": "Marcos", "edad": 49}
2 2 {"nombre": "Juan", "edad": 19}
1 2 {"nombre": "María", "edad": 34, "altura": 165}
1 3 {"nombre": "Lucia", "edad": 34, "altura": 165}
3 2 {}

Consultar

Para esta acción se busca el número más grande de rev de cada id. Los diccionarios vacíos de data serán ignorados.

Se consulta todos los usuarios registrados.

id rev data
2 2 {"nombre": "Juan", "edad": 19}
1 3 {"nombre": "Lucia", "edad": 34, "altura": 165}

Apuntes finales

Una buena forma de guardar y recuperar los datos podría ser almacenarlo en un JSON directamente en texto plano. Te ayudará a seguir la traza de los cambios. Además, como puedes comprobar, no debes limitarte a ningún lenguaje de programación. Lo más importante es la arquitectura, el resto ya son preferencias personales.

Web

Esta obra está bajo una Licencia Creative Commons Atribución-NoComercial-SinDerivadas 4.0 Internacional.

Atribución/Reconocimiento-NoComercial-SinDerivados 4.0 Internacional

¿Me ayudas?

No te sientas obligado a realizarme una donación, pero cada aportación me ayuda a mantener el sitio en activo para que continúe existiendo y me motiva a continuar creando nuevo contenido.

Comprame un café
Pulsa sobre la imagen
  • 1 café: Se mantiene el dominio durante 4 meses.
  • 2 cafés: Se liquida 1 mes del Servidor Web.
  • 3 cafés: Se paga 1 mes de Newsletter.

Comentarios

{{ comments.length }} comentarios

Nuevo comentario

Nueva replica  {{ formatEllipsisAuthor(replyComment.author) }}

Acepto la política de Protección de Datos.

Escribe el primer comentario

Tal vez también te interese...