Migraciones de base de datos

Esas grandes desconocidas

Madrid DevOps, 2025-03-12

Vuestro anfitrión hoy

Alex "pinchito" Fernández

DevOps de lomo plateado

Head of development en Fullcircle

Migrador de bases de datos impenitente

Fuente: Mi hija Lucía

Un clásico

Fuente: ChatGPT

(falso)

Lo que veremos hoy

  • Cambios de esquema
  • Cambios de tabla
  • Cambios de almacenamiento
  • Conclusiones

Cambios de almacenamiento

Eran otros tiempos...

2013-2017 (mediasmart.io)

Caso práctico: Librecounter.org

  • Proyecto personal
  • Contador de visitas a la antigua
  • Respeta la GDPR (no cookies)
  • Usando MongoDB

2024-02-12: visita de midu.dev

Fuente: Twitter

No está mal para un linode de €8/mes

MongoDB apesta; probemos SQLite

  • De ~20 a ~20k escrituras por segundo
  • Perfecto para el caso de uso
  • Rápido y fácil
  • Backup instantáneo

Migración a SQLite

  • Preparar el código, con tests
  • Desplegar en producción
  • Empezamos a guardar datos en SQLite
  • ... ¿Y los datos antiguos?

Proceso de migración

  • Hay que *pogramallo
  • Y hay que limpiar los datos
  • Se puede ejecutar múltiples veces
  • El resultado se borra fácil
  • Añadimos tests

Estrategia de combinación

El desafío a midu.dev

Fuente: cinemagia.ro

Pero de buen rollo

Fuente: el autor

Challenge extended

Cambios de tabla

El trasfondo

  • Empresa de deep tech
  • Analíticas en tiempo real
  • ClickHouse gestionado
  • Guardar agregados (Materialized Views)

Creando una vista materializada

CREATE MATERIALIZED VIEW new_materialized_view
ENGINE = MergeTree()
ORDER BY (column1, column2)
AS SELECT column1, column2, column3
FROM source_table
WHERE some_condition;

Acumulados

Fuente: DashThis

Versionado de datos en tiempo real

Fuente: Gifer

¿Cómo versionar datos?

Diferentes pilas de datos

Fuente: AsmodeeGames

Caso práctico: nueva agregación

  • ¿Qué pasa si cambia la forma de acumular?
  • Hay que volver a agregar todo
  • Se sigue copiando en background
  • Creación de jobs específicos ("populate jobs")

Copia interna de datos

  • Paso de v1 a v2
  • Cambio atómico
  • Paso de v2 a v3
  • ...

Cambios de esquema

Modificando datos estáticos

  • Clásico cambio de esquema
  • Migración hacia delante y hacia atrás
  • Cambio reversible

Modificando datos dinámicos

  • Clásico cambio de esquema
  • Migración hacia delante y hacia atrás
  • ¿Qué hacemos con los datos según llegan?

Caso práctico: añadir campo

Mínimo cambio no trivial

¡Magia!

ALTER TABLE users
  ADD COLUMN shoe_size int;

ClickHouse docs

  • Permite añadir una columna
  • La columna no tendrá datos
  • ¿Default, backfill?

El cambiazo

EXCHANGE TABLES new_mv AND old_mv;

ClickHouse docs

  • Cambio atómico
  • Una de las MVs no tendrá datos
  • Volvemos al traspaso entre tablas

El cambio atómico

ALTER TABLE mv MODIFY QUERY
  SELECT * from src;

ClickHouse docs

  • Paso por una vista materializada intermedia
  • La columna no tendrá datos
  • ¿Default, backfill?

El transformador

ALTER TABLE table
  MODIFY COLUMN name Nullable(String);

ClickHouse docs

  • Permite eliminar datos de una columna
  • Paso previo al borrado
  • El inverso no es trivial

Mutaciones

Cambios que manipulan datos de una tabla

ClickHouse docs

  •  Eliminar columna
  •  Hacer no nullable
  •  Cambiar tipo (?)

Cambios graduales

Conclusiones

  • Cambios atómicos
  • Dar entidad a las migraciones
  • Cambios reversibles
  • Respeta a las bases de datos

Referencias

¡Gracias!

VISITE NUESTRO BAR

Soluciones digitales a medida

 

Desde un operador móvil virtual 100% operativo...

 

...a un  prototipo de integración con OpenAI

 

Fullcircle.es

Migraciones de base de datos

By Alex Fernández

Migraciones de base de datos

Migraciones de base de datos, esas grandes desconocidas. Presentación para Madrid DevOps, 2025-03-12.

  • 141