Come organizzare i file multimediali nella propria web application

Nel contesto in cui dovessimo sviluppare una web application che utilizzi un database come MySQL dovremmo decidere come organizzare i file multimediali.

La domanda cioè che potremmo porci sarebbe più o meno la seguente:

Immagini, PDF, filmati e file audio dove li metto, nel database sottoforma di BLOB o li tengo su filesystem?

Come sempre, entrambe le soluzioni hanno pregi e difetti che elencherò a breve; conoscerli equivale a prendere la decisione giusta in base al contesto in cui ci troviamo.

File multimediali nel database come BLOB

Pregi

  • il loro backup è facilitato in quanto è incluso nel backup del database;
  • non è necessario organizzarli né dare loro un nome;
  • sono direttamente collegati ai dati dell’applicazione;

Difetti

  • andranno ad occupare spazio su database e in genere questo è sconveniente dal momento che i servizi di hosting tendono a far pagare lo spazio occupato dal database piuttosto che lo spazio web, in genere illimitato anche nei pacchetti più economici;
  • il database tratta immagini, PDF, filmati e file audio allo stesso modo, cioè come larghi oggetti binari, BLOB appunto e quindi, a meno di software apposito, non avremo nessun tipo di supporto da parte del database per vedere e manipolare questi contenuti;
  • ad un certo punto questi file andranno probabilmente letti dal database per poter essere mostrati all’utente impedendo al web server di attuare alcuna forma di caching verso il client. Questo aumenterà banda e tempi di caricamento anche per immagini immutate;

File multimediali su filesystem

Pregi

  • non occupano spazio su database e quindi risultano più economici per i servizi di hosting a pagamento;
  • il filesystem dei moderni S.O. abbinato al FileManager e a un lettore multimediale offrono un supporto di base ai vari formati multimediali (anteprima, visualizzazione, ricerca), per di più ne consentono un’organizzazione gerarchica e una gestione di massa attraverso console e tools a riga di comando (es. ridimensionare tutte le immagini alla tal dimensione utilizzando mogrify di ImageMagick);
  • il web server è in grado di attuare del caching diminuendo la banda occupata e velocizzando il processo di caricamento delle pagine da parte degli utenti;

Difetti

  • rispetto ai dati contenuti nel database, ne va fatto un backup a parte;
  • va decisa un’organizzazione in cartelle e va scelta una policy per i nomi;
  • non sono immediatamente collegati al resto dei dati: andrà scritto del codice per collegare i record ai file attraverso la policy scelta per organizzarli e nominarli;

In definitiva a meno che non abbiate necessità particolari di backup o mirroring dei contenuti multimediali quasi sempre sarà più conveniente tenerli su filesystem.