È appropriato memorizzare i file di immagine nel database? O sarebbe meglio memorizzare solo il percorso del file nel database, mantenendo il file stesso sul server?
Ci sono altri metodi per fare ciò giusto?
È appropriato memorizzare i file di immagine nel database? O sarebbe meglio memorizzare solo il percorso del file nel database, mantenendo il file stesso sul server?
Ci sono altri metodi per fare ciò giusto?
Ti consiglio vivamente di salvare le immagini nel filesystem e non nel database.
L'archiviazione delle immagini nel database presenta diversi svantaggi:
Il database potrebbe crescere in modo imprevisto. A volte lo spazio è un problema. Per esempio con SQLServer Express hai un limite di 4 GB.
Le migrazioni dei dati possono diventare un problema, ad esempio se passi da SQLServer a Oracle
Le query possono diventare molto lente e il caricamento del database è elevato
L'interoperabilità con altre applicazioni è migliore se le immagini si trovano sul file system e altre applicazioni utilizzano un database diverso. Puoi anche accedervi direttamente e non sono necessari strumenti di database.
Prestazioni peggiori in generale
Probabilmente dovrai creare file temporanei quando recupererai comunque le immagini dal database. Non è necessario.
Questi svantaggi superano di gran lunga il costo di mantenere i percorsi delle immagini archiviate nel database sincronizzate con il filesystem. Ci sono solo alcuni casi speciali in cui è meglio memorizzare le immagini nel database.
Ricerca su SQL Server 2005 e il file system NTFS (Microsoft) per confrontare le prestazioni CRUD: A BLOB o non BLOB . Questo studio è stato fatto anche in un'applicazione web. Hai elencato un altro database (MySQL) e presumo che tu non stia utilizzando Windows Server per il tuo sito PHP, quindi sarebbe interessante se qualcuno avesse fatto uno studio simile su diverse tecnologie.
Risulta che dipende dalla dimensione dei file. SQL Server favorisce (almeno 2 volte) blob di 256 KB o meno e il file system favorisce file di 1 MB +. I file system in questo studio gestiscono la frammentazione meglio del database, quindi se si aggiornano costantemente questi file o questo sistema cresce nel tempo, la frammentazione sarà un fattore più importante che il file system farà un lavoro migliore.
Devi determinare la responsabilità del tuo sito per il mantenimento di questi file. Se stai costruendo un sito per agenti di reclami assicurativi per caricare le foto di un incidente, è meglio avere il controllo delle transazioni e assicurarsi che quei file siano sul server. Buoni database fanno questo per te, così come lo sviluppatore, hai aggiunto pressione.
Durante la progettazione è necessario prendere in considerazione la replica, il backup, il ripristino di emergenza, la frammentazione, la capacità residua del disco e le prestazioni nel tempo. Questo è solo uno studio sulla versione precedente di SQL Server e, come altri produttori di database, suppongo che la gestione di file di grandi dimensioni e di binari sia uno dei principali ambiti competitivi.
Se hai un numero enorme di immagini, la loro memorizzazione in un database potrebbe rimuovere problemi con l'esaurimento degli inode a livello di file system.
Tuttavia, è meglio risolvere questo problema utilizzando un filesystem più appropriato e qualunque misura venga consigliata con quel file system sull'organizzazione.
Altrimenti, la memorizzazione delle immagini in un database è uno spreco completo di risorse. Memorizza il percorso come hai detto.
Leggi altre domande sui tag database web-development php mysql