Categoria

Pagina 1 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.

Creazione di un database IP-to-Country

Creazione di un database IP-to-Country Mappare un indirizzo IP al suo paese è ancora utile, per servire la lingua giusta, per analytics o per regole di accesso. Ma il modo in cui si costruisce un database IP-to-country è cambiato del tutto: oggi serve gestire IPv6, scegliere una fonte dati affidabile, fare il lookup per range nel modo corretto, e soprattutto sapere che un indirizzo IP è un dato personale sotto GDPR. Vediamo come si fa nel 2026, partendo dalla domanda che conviene farsi: ti serve davvero un database tuo?. Continua a leggere
Ultima modifica:

Backup incrementale di MySQL con xtrabackup: recovery point granulare senza blocchi

Backup incrementale di MySQL con xtrabackup: recovery point granulare senza blocchi mysqldump su database da 200GB richiede 4 ore e blocca le query durante l'esecuzione. Con Percona XtraBackup ho configurato backup incrementali ogni ora senza un singolo lock: il database continua a servire richieste, il backup è verificabile, il recovery è testato settimanalmente in automatico. Vi mostro la configurazione completa. Continua a leggere
Ultima modifica:

Backup di Mysql con mysqldump senza lock sulle tabelle

Backup di Mysql con mysqldump senza lock sulle tabelle Lanciare mysqldump su un database in produzione senza fermare i servizi è possibile, ma il modo in cui si fa cambia tutto. La ricetta che gira da anni, basata su --lock-tables=false, evita i blocchi ma produce un dump che può essere internamente incoerente: un dettaglio che non si nota finché non provi a ripristinarlo. La soluzione corretta per le tabelle InnoDB è --single-transaction, che dà uno snapshot consistente senza lock prolungati. Continua a leggere
Ultima modifica:

Reporting aziendale con Laravel e dati aggregati: costruire dashboard per il management

Reporting aziendale con Laravel e dati aggregati: costruire dashboard per il management Il reparto finance di un cliente generava i report mensili esportando 50.000 righe in Excel e filtrando manualmente. Ho costruito una dashboard Laravel con report pre-aggregati: query ottimizzate con indici covering, cache di 4 ore con invalidazione selettiva, export PDF/Excel e grafici interattivi con Chart.js. Continua a leggere
Ultima modifica:

Caching multi-livello in Laravel: strategie per applicazioni ad alto traffico

Caching multi-livello in Laravel: strategie per applicazioni ad alto traffico Un portale di notizie Laravel con 50.000 utenti al giorno mandava in ginocchio il database MySQL ogni volta che arrivava un articolo virale. Ho implementato tre livelli di cache: in-process (array driver), Redis per i dati di business, Nginx proxy cache per le risposte HTTP. Il database ora riceve il 3% delle richieste originali. Continua a leggere
Ultima modifica:

Doctrine ORM avanzato: query builder, DQL e ottimizzazione per applicazioni Symfony

Doctrine ORM avanzato: query builder, DQL e ottimizzazione per applicazioni Symfony Doctrine è potente ma le sue trappole di performance sono subdole. Ho ottimizzato un'applicazione Symfony con 2 milioni di record: lazy loading che generava 8.000 query per pagina, identity map che saturava la memoria nei batch, eager loading mal configurato. Vi mostro le soluzioni sistematiche per ciascun problema. Continua a leggere
Ultima modifica:

Backup del filesystem e dei database di server web

Backup del filesystem e dei database di server web Il backup di un server web non è uno script da lanciare e dimenticare: è una strategia che mette insieme due cose diverse, i file e i database, ognuna con le sue regole. Il vecchio approccio "un programma che zippa tutto e te lo manda via email" è pericoloso: password in chiaro, nessuna cifratura, copia sulla stessa macchina. Vediamo come si fa davvero nel 2026, con gli strumenti giusti e la regola che conta più di tutte: un backup non è un backup finché non lo hai ripristinato. Continua a leggere
Ultima modifica:

Soluzione errore 1256 mysql "data truncated for column"

Soluzione errore 1256 mysql "data truncated for column" L'errore "Data truncated for column" durante l'import di un dump MySQL è uno dei più comuni e dei più fraintesi quando si spostano dati fra ambienti configurati in modo diverso. La diagnosi corretta non è quella che suggeriscono molti tutorial: la causa reale è lo strict sql_mode, che promuove a errore bloccante una troncatura che altrove sarebbe un semplice avviso. Vediamo cos'è davvero questo errore, le cinque cause che lo scatenano, e come si risolve e si previene. Continua a leggere
Ultima modifica:

Rate limiting avanzato in Laravel: proteggere le API da abusi senza bloccare utenti legittimi

Rate limiting avanzato in Laravel: proteggere le API da abusi senza bloccare utenti legittimi Un'API pubblica Laravel per la verifica dei codici fiscali veniva martellata da scraper: 4.000 richieste al minuto da IP singoli. Il throttle di default di Laravel non bastava. Ho implementato un sistema multi-livello: rate limit per IP, per chiave API, per endpoint e un adaptive rate limiter che scala in base al carico. 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.