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