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.

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:

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:

Strumenti utili per i database

Tool gratuiti per il tuo lavoro sui dati:

SQL formatter, Generatore UUID, Convertitore CSV in JSON.