📝 BLOG

Migrazione del Database: Modifiche dello Schema e Deploy senza Downtime

La migrazione del database è il processo di applicazione delle modifiche dello schema in modo sicuro e controllato. Questa guida copre le strategie di migrazione, il deploy senza downtime e i piani di rollback.

Ultimo aggiornamento:

Preparato da: Gsetsoft

Migrazione del Database: Modifiche dello Schema e Deploy senza Downtime

Cos'è la Migrazione del Database?

La migrazione del database è un processo controllato utilizzato per cambiare lo schema del database (strutture delle tabelle, indici, vincoli).

Modifiche dello schema: Aggiungere nuova tabella, aggiungere/modificare/eliminare colonna, aggiungere indice, aggiungere foreign key, cambiare tipo di dato.

Rischi: Perdita di dati, downtime, degradazione delle prestazioni, incompatibilità all'indietro.

Obiettivo: Applicare le modifiche dello schema in modo sicuro, ripetibile e reversibile.

Strumenti di Migrazione

Flyway: Strumento di migrazione basato su SQL. File di migrazione versionati (V1__create_users.sql). Supporto Java, Node.js, CLI.

Liquibase: Changelog in formato XML/YAML/JSON/SQL. Supporto rollback, generazione diff, confronto database.

Prisma Migrate: Integrato con Prisma ORM. Genera automaticamente la migrazione da schema.prisma.

Knex.js: Strumento di migrazione Node.js. File di migrazione in JavaScript. Funzioni up e down.

Django/ActiveRecord: Strumenti di migrazione integrati nel framework. Crea automaticamente la migrazione dalle modifiche del modello.

Strategie di Migrazione senza Downtime

Expand and Contract (Parallel Change): 1) Aggiungere nuova colonna/tabella (expand), 2) Aggiornare il codice (supportare colonna nuova e vecchia), 3) Rimuovere colonna vecchia (contract).

Modifiche compatibili all'indietro: Aggiungere nuova colonna (nullable), aggiungere nuova tabella, aggiungere nuovo indice. Queste modifiche non richiedono downtime.

Modifiche breaking: Eliminazione colonna, cambio tipo colonna, rename. Queste modifiche devono essere fatte con il pattern expand-contract.

Feature flags: Mettete il nuovo schema dietro un feature flag. Riducete il rischio con rollout graduale.

Blue-green deployment: Testate il nuovo schema in ambiente parallelo. Cambiate il traffico. Tornate all'ambiente vecchio se c'è problema.

Migrazione dei Dati

Backfill: Rendete i dati esistenti compatibili con il nuovo schema. Processate grandi insiemi di dati con batch processing.

Dual write: Scrivete sia nel vecchio che nel nuovo schema. Mantenete la coerenza dei dati durante il periodo di transizione.

Validazione dei dati: Verificate l'integrità dei dati dopo la migrazione. Conteggio righe, checksum, comparazione campione.

Prestazioni: La migrazione su tabelle grandi crea carico di lock e I/O. Eseguite durante le ore di basso traffico. Usate il processing per chunks.

Piano di Rollback

Down migration: Scrivete la down migration corrispondente (rollback) per ogni up migration. Flyway, Liquibase supportano il rollback.

Backup: Fate un backup completo prima della migrazione. Abbiate la capacità di point-in-time recovery (PITR).

Test: Testate la migrazione nell'ambiente di staging. Usate lo stesso volume di dati e schema della produzione.

Monitoraggio: Monitorate le prestazioni delle query e il tasso di errore dopo la migrazione. Rollback in caso di deviazione anormale.

Comunicazione: Condividete il piano di migrazione con il team. Definite la finestra di manutenzione.

Migliori Pratiche

Controllo versione: Tracciate i file di migrazione con Git. Ogni migrazione deve essere atomica (una singola modifica).

Idempotenza: Eseguire la migrazione più volte deve produrre lo stesso risultato. Usate IF NOT EXISTS, IF EXISTS.

Migrazioni piccole: Dividete i grandi cambiamenti in migrazioni piccole. Ogni migrazione deve essere distribuibile indipendentemente.

Code review: Fate passare i file di migrazione per il code review. Le modifiche dello schema sono critiche e difficili da annullare.

Documentazione: Documentate lo scopo e l'impatto di ogni migrazione. Indicate chiaramente i cambiamenti breaking.

La tua scelta sulla privacy

I cookie essenziali gestiscono sicurezza e sessioni. Contiamo le visite di base; con il consenso attiviamo analisi aggiuntive. Informativa cookie