Qual forma mais adequada que armazenar imagem em sistema - Fórum DevMedia
Qual forma mais adequada que armazenar imagem em sistema
Me deparo com uma dúvida, sobre qual a forma mais adequada de armazenar imagens em um sistema, no caso se fosse necessário cadastrar várias fotos de um mesmo usuário, poderia salvar o caminho da imagem no banco de dados, e salvar a imagem em uma pasta em minha aplicação ou salvar a foto diretamente no banco. Então qual das duas forma é a mais adequada para manipular imagens? Seus benefícios e desvantagens?
Gabriell Amaral
Salvando direto no banco você tem como principal benefício poder tratar a imagem como mais um campo da tabela, sem procedimentos adicionais para abrir arquivo, fechar, etc. Porém, dependendo da quantidade e tamanho das imagens, seu banco pode crescer rapidamente, o que eu considero a principal desvantagem.
Ao salvar o caminho no banco você reduz a quantidade de dados armazenados e transfere os arquivos diretamente para o sistema operacional, ou seja, uma pasta também vai crescer, mas não vai afetar o desempenho do banco.
EU prefiro salvar em arquivo e manter o caminho no banco (também costumo fixar uma parte do caminho e salvar só a parte que varia para reduzir ainda mais).
Lopes, no banco acho que armazena-se o caminho da imagem.
Obrigado pela ajuda. Porém entro em outra questão, no caso de um sistema que tenha que fazer o cadastro de duas fotos por pessoa, se eu chegar a cadastrar 3 mil pessoas, vou ter 6 mil fotos armazenada no diretório em minha aplicação ou 6 mil fotos no banco, no caso são fotos que vão ser acessadas de acordo com a necessidade de acesso, pois não vão ser acessadas em uma galeria de fotos, somente no cadastro isolado de uma pessoa.O que passa na minha cabeça é como Joel falou, as vantagens e desvantagens dos modos que podemos fazer, porque fico pensando se eu gravar o caminho, a longo prazo posso estar prejudicando o desempenho de toda aplicação, no banco talvez teria menos onerosidade nas operações do sistema, tendo um déficit menor nas operações. Entro em outras questão, pergunto se alguém tem experiência de utilizar um Web service para este tipo de situação, talvez com um repositório externo teria um melhor desempenho e somente teria que acessar o caminho foto que está no repositório externo.
Rapaz, você tocou num ponto interessante. Já vi isso sendo usado, mas pessoalmente nunca usei. Porém, dê uma pesquisada melhor sobre isso, inclusive sobre a viabilidade de esse serviço externo prover a imagem em formato base64, pra ver se é fica mais leve.
Joel, veja se eu entendi bem, você utiliza as duas formas?
Lopes só consigo ver vantagens em gravar somente o caminho das imagens no banco de dados, um dos portais da empresa onde trabalho possui uma tabela de fotos para determinados tipos de anúncio onde temos nada menos que 70.000 registros de caminhos para imagens (SQL Server 2008 R2), cada registro é multiplicado por 3 (70.000 x 3 = 210000), isso porque para cada imagem geramos 1 -> mobile, 1 -> small e 1 -> full, depois só reaproveitamos o mesmo nome com o prefixo no início sendo alterado.
E não temos problemas nenhum de performance ao carregar as páginas tanto na versão desktop quanto para versão mobile, as consultas nessa tabela possuem velocidade de retorno muito boa e nem precisamos nos esforçar muito para indexação.
Se você quer desempenho então com certeza a melhor forma é gravar apenas o caminho da imagem no banco, mas se você quer praticidade então pode usar algoritmos como Base64 que transformam a imagem em um conjunto de caracteres e você pode salvar no banco, porém você perde um pouco do desempenho de acordo com o tamanho da imagem.
Eu tive a experiência de usar as duas formas e a que melhor me atendeu foi salvar no banco a imagem em campo BLOB. Mas uma aplicação que precise carregar múltiplas imagens simultaneamente (que não foi meu caso) é recomendável utilizar "salvar o caminho", porém a gestão da pasta fica a cargo da aplicação (salvar a imagem, editar, excluir, etc). Quanto a performance, não senti nenhuma perda no meu caso, usando salvar a imagem no banco, pois administrei o salvamento em banco (redução do tamanho, tipo de imagem, etc). Qualquer dúvida, entre em contato.