back to top

MySQL: utilizzare BLOB per archiviare immagini ed altri tipi di file

In MySQL, esiste un particolare tipo di dato che si presta a ospitare grandi volumi di dati, stiamo parlando di BLOB (Binary Large Object). All’interno di un campo di tipo BLOB, è possibile archiviare oggetti come immagini, PDF o video. Questa funzionalità può rivelarsi molto vantaggiosa per applicazioni che richiedono la gestione di file di grandi dimensioni, specialmente in contesti in cui la coesione dei dati e l’accesso tramite query sono prioritari.

La comodità di archiviare questo tipo di oggetti all’interno di un database può essere notevole. Tuttavia, è bene considerare che l’utilizzo di campi BLOB porta a un aumento esponenziale delle dimensioni del database, con potenziali criticità, ad esempio, in caso di migrazione. Ad esempio, durante un backup o una ripristino, operazioni sui database di grandi dimensioni possono richiedere tempi significativamente maggiori.

Pubblicità

Utilizzare BLOB per archiviare immagini

Come accennato, un campo BLOB può essere utilizzato per archiviare immagini all’interno di un database MySQL. Questa operazione può risultare utile in numerosi scenari, come nel caso di piattaforme di e-commerce che devono gestire gallerie di immagini assistite da query efficaci.

Caricare immagini all’interno di un database

Per prima cosa, vediamo come caricare un’immagine all’interno di una ipotetica tabella “immagini”. Utilizzando la seguente query SQL:

INSERT INTO immagini (dati_immagine) VALUES (LOAD_FILE('/var/www/html/img/immagine.jpg'));

Come potete notare, si tratta di una comune operazione di INSERT in cui il valore da inserire nel campo “dati_immagine” è restituito dal comando LOAD_FILE, al quale viene passato come argomento il percorso del file da importare. È importante assicurarsi che il server MySQL abbia i permessi per accedere al percorso in cui si trova l’immagine, altrimenti l’operazione fallirà.

Esportare un’immagine salvata in un database

Vediamo ora come sia possibile esportare il contenuto di un campo di tipo BLOB e salvarlo sotto forma di immagine. Di seguito è riportata la query che consente di esportare questi dati e ricreare l’immagine originale:

SELECT dati_immagine FROM immagini WHERE id = 123 INTO DUMPFILE '/var/www/html/img/immagine.jpg';

Il valore utilizzato per la selezione del record mediante ID – in questo caso “123” – è ovviamente arbitrario; potete utilizzare i criteri di selezione che preferite. Quello che conta è l’introduzione del costrutto INTO DUMPFILE, che permette di esportare il contenuto di un campo in un file di cui viene specificato il percorso fisico. Questa operazione è utile per recuperare facilmente i dati archiviati nel database e per l’analisi successiva.

Gestione del percorso del file

È fondamentale prestare attenzione alla gestione del percorso del file. Se il percorso fornito non è corretto, l’operazione di esportazione fallirà. Inoltre, assicuratevi che la directory in cui si intende esportare il file abbia i permessi adeguati per consentire al server MySQL di scrivere il file. È buona prassi testare i percorsi e i permessi in anticipo.

Campi BLOB e prestazioni

Naturalmente, maggiori saranno le dimensioni del file che si desidera archiviare, maggiori saranno i tempi di esecuzione necessari per il completamento dell’INSERT; lo stesso discorso vale anche per quanto riguarda la grandezza dei dati da esportare tramite la SELECT. L’aumento delle dimensioni del database può portare anche a operazioni di manutenzione più lunghe e complesse.

Come già detto all’inizio di questo articolo, l’utilizzo di campi BLOB, nonostante l’indiscussa utilità, deve essere valutato attentamente. Può avere ricadute in termini di prestazioni e di “maneggevolezza” dei dati. Inoltre, in scenari di alto traffico, l’accesso a file di grandi dimensioni può rallentare le performance generali del database, rendendo opportuno il monitoraggio delle query eseguite.

Alternative ai campi BLOB

In alcuni casi, potrebbe essere più vantaggioso archiviare i file al di fuori del database e memorizzare nel database solo il percorso del file. Questa pratica, conosciuta come “file streaming”, può migliorare le prestazioni e semplificare il backup e il ripristino. In questo modo, i dati rimangono facilmente accessibili senza aumentare drasticamente le dimensioni del database. Ad esempio, si possono utilizzare sistemi di gestione file o server di archiviazione dedicati.

Altri contenuti interessanti

Pubblicità

Potrebbero interessarti queste guide

Claudio Garau
Claudio Garau
Web developer, programmatore, Database Administrator, Linux Admin, docente e copywriter specializzato in contenuti sulle tecnologie orientate a Web, mobile, Cybersecurity e Digital Marketing per sviluppatori, PA e imprese.

Leggi anche...

Come ottenere l’ID dell’ultimo record inserito in MySQL, PostgreSQL, SQL Server e Oracle?

Ottenere l'ID dell'ultimo record inserito in una tabella, dopo...

Database completo regioni, province e comuni italiani (in formato SQL)

Quando si sviluppa un sito web o un'applicazione in...

File CSV: cosa sono, come si aprono e come crearli

In questo articolo cercheremo di capire cos'è il formato...

Confrontare due tabelle e trovare i record senza corrispondenza

all'interno di un database relazionale può essere utile poter...

Eseguire comandi SQL online con SQL Fiddle

Sì. E' possibile testare codice SQL senza aver installato...

SQL: Calcolare la media dei valori di più campi

Attraverso una semplice query SQL è possibile calcolare dinamicamente...
Pubblicità