É apropriado armazenar os arquivos de imagem no banco de dados? Ou seria melhor armazenar apenas o caminho do arquivo no banco de dados, mantendo o próprio arquivo no servidor?
Existem outros métodos para fazer isso direito?
fonte
É apropriado armazenar os arquivos de imagem no banco de dados? Ou seria melhor armazenar apenas o caminho do arquivo no banco de dados, mantendo o próprio arquivo no servidor?
Existem outros métodos para fazer isso direito?
Eu recomendo fortemente que você armazene as imagens no sistema de arquivos e não no banco de dados.
Armazenar imagens no banco de dados tem várias desvantagens:
O banco de dados pode crescer inesperadamente grande. Às vezes, o espaço é um problema. Por exemplo, com o SQLServer express, você tem um limite de 4 GB.
Migrações de dados podem se tornar um problema, por exemplo, se você alternar do SQLServer para o Oracle
As consultas podem ficar muito lentas e você terá uma alta carga de banco de dados
A interoperabilidade com outros aplicativos é melhor se as imagens estiverem no sistema de arquivos e outros aplicativos usarem um banco de dados diferente. Você também pode acessá-los diretamente e não precisa de ferramentas de banco de dados.
Pior desempenho em geral
Você provavelmente precisará criar arquivos temporários ao recuperar as imagens do banco de dados de qualquer maneira. Isso é desnecessário.
Essas desvantagens superam em muito o custo de manter os caminhos para as imagens armazenadas no banco de dados sincronizados com o sistema de arquivos. Existem apenas alguns casos especiais em que é melhor armazenar as imagens no banco de dados.
Pesquisa no SQL Server 2005 e no sistema de arquivos NTFS (Microsoft) para comparar o desempenho do CRUD: BLOB ou não . Este estudo também foi realizado em um aplicativo da web. Você listou outro banco de dados (MySQL) e eu presumo que você não está usando o Windows Server para o seu site PHP, por isso seria interessante se alguém fizesse um estudo semelhante sobre diferentes tecnologias.
Acontece que isso depende do tamanho dos arquivos. O SQL Server favorece (2x melhor) os blobs de 256K ou menos e o sistema de arquivos favorece os arquivos com mais de 1 MB. Os sistemas de arquivos deste estudo lidam com a fragmentação melhor do que o banco de dados; portanto, se você estiver atualizando constantemente esses arquivos ou esse sistema cresce com o tempo, a fragmentação será um fator maior para o sistema de arquivos realizar um trabalho melhor.
Você precisa determinar a responsabilidade do site por manter esses arquivos. Se você está construindo um site para agentes de sinistros de seguros fazerem upload de fotos de um acidente, é melhor ter controle de transação e garantir que esses arquivos estejam no servidor. Bons bancos de dados fazem isso por você; assim, como desenvolvedor, você adicionou pressão.
Replicação, backup, recuperação de desastre, fragmentação, capacidade restante do disco e desempenho ao longo do tempo devem ser considerados durante o design. Este é apenas um estudo da versão anterior do SQL Server e, como outros fabricantes de bancos de dados, acho que lidar com arquivos e binários grandes é uma grande arena competitiva.
Se você tiver um grande número de imagens, armazená-las em um banco de dados pode remover problemas com a falta de inodes no nível do sistema de arquivos.
No entanto, esse problema seria melhor resolvido usando um sistema de arquivos mais apropriado e quaisquer medidas recomendadas com esse sistema de arquivos na organização.
Caso contrário, armazenar imagens em um banco de dados é um completo desperdício de recursos. Armazene o caminho como você disse.
fonte