[Mysql] Qual è il modo migliore per archiviare i file multimediali su un database?


Answers

Penso che archiviarli nel database sia ok, a patto che tu usi una buona implementazione. Puoi leggere questo articolo vecchio ma buono per idee su come mantenere le maggiori quantità di dati nel database da influire sulle prestazioni.

http://www.dreamwerx.net/phpforum/?id=1

Ho avuto letteralmente centinaia di concerti caricati nei database mysql senza problemi. La progettazione e l'implementazione sono fondamentali, sbagliate e soffrirete.

Ulteriori vantaggi DB (non ancora menzionati): - Funziona meglio in un ambiente con bilanciamento del carico - È possibile creare una maggiore scalabilità dello storage di back-end

Question

Voglio memorizzare un gran numero di file audio in un database, ma non so se sia una buona pratica. Mi piacerebbe sapere i pro e i contro di farlo in questo modo.

Ho anche pensato alla possibilità di avere "collegamenti" a questi file, ma forse questo porterà più problemi che soluzioni. Qualsiasi esperienza in questa direzione sarà il benvenuto :)

Nota: il database sarà MySQL.




I vantaggi dell'utilizzo di un database:

  • Facile unire file audio con altri bit di dati.
  • Evitare operazioni di i / o file che aggirano la sicurezza del database.
  • Non sono necessarie operazioni di separazione per eliminare i file audio quando i record del database vengono cancellati.

Svantaggi dell'utilizzo di un database:

  • Gonfiamento del database
  • I database possono essere più costosi dei file system



Alcuni vantaggi dell'utilizzo dei BLOB per archiviare i file

  • Minori costi di gestione: utilizzare un singolo strumento per il backup / ripristino ecc
  • Nessuna possibilità per database e filesystem di essere fuori sincrono
  • Capacità transazionale (se necessario)

Alcuni svantaggi

  • fa esplodere la RAM dei server di database con inutile spazzatura che potrebbe essere utilizzata per memorizzare righe, indici, ecc
  • Rende i backup del DB molto grandi, quindi meno gestibili
  • Non conveniente come un filesystem da servire ai client (ad es. Con un server web)

Che dire delle prestazioni? Il tuo chilometraggio può variare. I filesystem sono estremamente vari, così come i database nelle loro prestazioni. In alcuni casi vincerà un filesystem (probabilmente con meno file più grandi). In alcuni casi un DB potrebbe essere migliore (forse con un numero molto grande di file piccoli).

In ogni caso, non ti preoccupare, fai quello che sembra il migliore al momento.

Alcuni database offrono un server Web integrato per servire BLOB. Al momento della scrittura, MySQL no.




Una soluzione semplice sarebbe quella di archiviare le posizioni relative dei file come stringhe e lasciare che sia il filesystem a gestirle. L'ho provato su un progetto (stavamo conservando allegati di file di Office a un sondaggio), e ha funzionato bene.




Links