Categoria

Pagina 2 di 3

Database: i dati veloci e integri, non solo "salvati da qualche parte"

Il database è quasi sempre il primo posto dove un'applicazione rallenta, e quasi sempre l'ultimo che qualcuno guarda. La maggior parte dei problemi di performance che ho visto in vent'anni non erano nel codice PHP: erano in una query senza indice, in uno schema pensato male o in un accesso ai dati che nessuno aveva mai profilato. In questa categoria il database torna al centro, dove merita di stare.

Il primo tema è la performance come questione di dati. Tuning e diagnosi delle query lente, indici usati con criterio, UUID v7 come chiave primaria per non distruggere le prestazioni di InnoDB, caching a più livelli quando ha senso. Il filo conduttore è sempre lo stesso: prima si misura dove sta davvero il collo di bottiglia, poi si interviene, e quasi sempre il guadagno arriva senza comprare un server più grande.

Il secondo tema è l'integrità e la continuità. Un database veloce ma che perde dati o che non si può ripristinare non serve a niente: backup che reggono davvero, dall'incrementale al dump senza lock, e migrazioni delicate come lo spostamento di una versione a fine vita senza fermare il business. Qui la posta in gioco non è la velocità, è la fiducia che i dati ci siano ancora domani.

Il terzo tema è la scala e il nuovo carico: sharding quando i record diventano milioni, la scelta ragionata fra MySQL e PostgreSQL, e il database che inizia a servire anche l'AI, con pgvector che trasforma PostgreSQL in un motore vettoriale senza aggiungere infrastruttura.

Se hai un database lento o uno schema da rivedere, vedi la consulenza IT e DevOps o scrivimi.

Il database non è un dettaglio implementativo. È il posto dove le scelte sbagliate diventano lente e costose.

Elasticsearch in produzione per Laravel: ricerca full-text su cataloghi di grandi dimensioni

Elasticsearch in produzione per Laravel: ricerca full-text su cataloghi di grandi dimensioni Un catalogo prodotti da 200.000 articoli con ricerca MySQL LIKE a 8 secondi. Ho integrato Elasticsearch 8 con Laravel tramite il pacchetto Scout, definito il mapping per il dominio specifico e costruito la sincronizzazione incrementale. La ricerca è scesa a 40ms, con rilevanza di risultati nettamente superiore. Continua a leggere
Ultima modifica:

Database sharding in MySQL per applicazioni Laravel con milioni di record

Database sharding in MySQL per applicazioni Laravel con milioni di record Una piattaforma SaaS con 8 milioni di record nella tabella principale aveva query a 4 secondi nonostante tutti gli indici corretti. L'analisi ha mostrato che il problema non era l'indicizzazione ma il volume. Vi racconto l'approccio di sharding che abbiamo implementato con Laravel e come abbiamo gestito la migrazione live. Continua a leggere
Ultima modifica:

Diagnosi e risoluzione di connessioni lente al database MySQL su VPS senza supporto tecnico: guida operativa per Debian e Ubuntu

Diagnosi e risoluzione di connessioni lente al database MySQL su VPS senza supporto tecnico: guida operativa per Debian e Ubuntu Un gestionale Laravel su Hetzner con MySQL che impiegava 3-4 secondi per ogni query di ricerca prodotti. La causa: InnoDB buffer pool a 128MB su un database da 6GB, reverse DNS lookup attivo e 47 query senza indice per ogni pagina catalogo. Diagnosi con slow query log, EXPLAIN e MySQLTuner, fix in due ore. Continua a leggere
Ultima modifica:

MySQL esposto su un VPS Hetzner con root senza password: il CIS benchmark che applico nelle prime due ore di hardening

MySQL esposto su un VPS Hetzner con root senza password: il CIS benchmark che applico nelle prime due ore di hardening Su un VPS Hetzner AX41 con un e-commerce Laravel, MySQL 8.0 era raggiungibile da internet sulla porta 3306, l'utente root non aveva password, e l'applicazione usava root per tutte le operazioni - dal checkout alle migration. L'audit ha rivelato 14 violazioni del CIS Benchmark. Il protocollo di hardening che applico in due ore: mysql_secure_installation, segregazione utenti, bind su localhost, TLS obbligatorio, disabilitazione local_infile e audit log. Continua a leggere
Ultima modifica:

Redis esposto senza password su un VPS Hetzner: come un cryptominer ha messo in ginocchio un'applicazione Laravel

Redis esposto senza password su un VPS Hetzner: come un cryptominer ha messo in ginocchio un'applicazione Laravel Un VPS Hetzner con Redis 6 esposto su 0.0.0.0:6379 senza password. Un attaccante ha usato il motore Lua integrato per scrivere un crontab che scaricava un cryptominer Monero. CPU al 100%, Laravel a 12 secondi di response time, e nessuno sapeva perché. Il caso reale di un SaaS piemontese del luglio 2025, la diagnosi in 40 minuti, l'eradicazione e l'hardening di Redis per impedire che succeda di nuovo. Continua a leggere
Ultima modifica:

Refactoring database MySQL su Laravel: report da 47 minuti a 11 secondi senza upgrade hardware

Refactoring database MySQL su Laravel: report da 47 minuti a 11 secondi senza upgrade hardware Un database MySQL da 12 GB su un VPS Contabo, un report mensile che impiegava 47 minuti, 38 indici su una tabella di cui 12 mai utilizzati, e una codebase Laravel 9 cresciuta per cinque anni senza che nessuno aprisse mai un EXPLAIN. Il caso reale di una PMI emiliana del marzo 2025: diagnosi con slow query log e EXPLAIN ANALYZE, invisible indexes per eliminare indici fantasma, tuning InnoDB, schema refactoring con migration sicure su tabelle da milioni di righe. Continua a leggere
Ultima modifica:

Migrare MySQL 5.7 EOL su Hetzner senza fermare il business: la strategia di replicazione che ho usato per spostare 78GB con quattro minuti di downtime

Migrare MySQL 5.7 EOL su Hetzner senza fermare il business: la strategia di replicazione che ho usato per spostare 78GB con quattro minuti di downtime Migrare un database MySQL 5.7 fuori supporto fa paura ai clienti, e quasi sempre per il motivo sbagliato: pensano al rischio di perdita dati quando il vero problema è il downtime. Il piano in cinque fasi che applico su Hetzner e OVH per spostare database critici con replicazione master-slave, riducendo il fermo da otto ore a cinque minuti. Continua a leggere
Ultima modifica:

Strumenti utili per i database

Tool gratuiti per il tuo lavoro sui dati:

SQL formatter, Generatore UUID, Convertitore CSV in JSON.