Por quê não é recomendado gravar arquivos e imagens no database?

Por quê não é recomendado gravar arquivos e imagens no database ?

Há casos e casos, pode haver momentos em que gravar no banco de dados é algo viável (ou mesmo necessário).

O que ocorre muito é o desenvolvedor querer tratar arquivos no geral (imagens, documentos, áudios) como outros tipos de dados (varchar, datetime, float, decimal, int), sendo que o contexto de uso de um arquivo geralmente é diferente do contexto de uso desses dados, muitas vezes por simples preguiça de lidar com cópia de arquivos. Por isso, para esse tipo de pergunta, a recomendação geral é não gravar.

Alguns exemplos baseado na minha experiência em aplicações comerciais (ERPs, CRM e CMS’s):

  • arquivos normalmente são maiores que outros campos, e tê-los dentro da base aumenta o tamanho dela, dificultando a manutenção;
  • raramente é necessário - ou mesmo possível - fazer buscas no conteúdo de um arquivo (como fazer where numa imagem, por exemplo?);
  • consultas que retornam os campos com arquivos podem ser lentas e usar muita memória, sem que o arquivo seja imediatamente necessário. É mais viável ter os arquivos fora do banco para diversos processamentos, deixando-os acessíveis diretamente;
  • os tipos de dados que o banco suporta às vezes exigem conversões para armazenar arquivos. Ficar convertendo a cada vez que o arquivo é necessário torna-se custoso;

Que me lembre, só em 1 ou 2 casos até hoje trabalhei em projetos que mantinham arquivos binários na base de dados, por motivos bem específicos.

Abraço.

5 curtidas

Porque é pesado, exige processamento, desnecessário de se fazer, e vai competir com as transações do sistema. Uma bomba relógio.

Simples, pense em 1000 cadastros com imagens de 2mb, quanto de armazenamento você teria de ter ? Pense agora em um crescimento mensal de 50%, gigante os resultados certo?

Você precisa separar as responsabilidades e tratá-las cada uma da melhor maneira (pensando sempre em uma aplicação grande, o que é facil de ocorrer).

@edpickler @wallacecampanha

Buscar ajudar e adicionar pontos de vista aos tópicos é válido, mas recomendo sempre darem uma olhada nas datas dos tópicos e das últimas respostas antes de responder, e focar nos tópicos mais recentes.

Infelizmente, noto que isso é comum em sites que usam o sistema Discourse, pois ele costuma recomendar tópicos antigos, quando não são mais relevantes e, em alguns casos, o usuário que fez a pergunta original já nem participa mais. Então acaba recaindo pros usuários prestar atenção nas datas das postagens.

Abraços.

2 curtidas