Armazenar imagens no banco de dados ou em arquivos com um link de banco de dados?


22

É 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?

Respostas:


22

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.


11

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.


Você também pode considerar soluções integradas. Por exemplo, no SQL Server, há FILESTREAM e Remote Blob Store .
Fernando Correia

4

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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.