Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Gerenciamento de Imagens

Ola pessoal, Estou desenvolvendo uma aplicação em Java EE, e preciso trabalhar muito com imagens, assim surgiu um duvida, qual a melhor maneira de manipular essas imagens, salva-las no banco causa muita dor de cabeça sem falar com perda de performance, estou pensando em salvar apenas uma identificação e ir buscar em alguma pasta dentro do projeto, essa e a melhor abordagem ou existe outra ? também quero disponibilizar através de um webservice.

2 respostas
solução!

Olá João, Acredito que a abordagem depende do projeto.

A titulo de exemplo já vi alguns ERPs que armazenavam por exemplo as fotos dos colaboradores dentro do banco de dados, nem por isso a aplicação ficava lenta, e estou falando de uma tabela com pouco mais de 1000 registros de imagens em BLOB.

Dependendo do volume no entanto você pode optar por armazenar em uma pasta local no mesmo servidor, isso é interessante para aplicações que no momento não serão escaláveis.

Para aplicações que exigem escala você normalmente armazenaria os arquivos em um outro servidor, assim como o banco de dados. O servidor principal iria ter apenas a aplicação de forma que ele possa ser efêmero (ser criado quando houver necessidade e destruído quando não for mais necessário).

Essa abordagem é mais comum em aplicações grandes, nestes casos há um ou mais servidores de banco de dados (existem técnicas para isso como replicação onde você grava em um servidor ele replica para outros dos quais suas instâncias de aplicações fazem leituras).

O mesmo pode ser feito para imagens, se você tiver um serviço com muitos acessos vale a pena mover o armazenamento das imagens para um serviço especializado como o S3 da amazon ou outro CDN.

Nestes serviços sua aplicação por meio de uma API pode gravar arquivos e armazenar referências ou URL que podem ser usadas na aplicação, quando a imagem for usada ela seria carregada deste serviço, evitando consumir banda e processamento do seu servidor para esta proposta.

Mas como eu disse isso varia muito de projeto para projeto, no exemplo do ERP que eu mencionei ele é um sistema com um número conhecido de usuários (colaboradores da empresa) cujo o acesso é conhecido ele rodava na rede interna não tendo latência e portanto a performance não era um problema.

Para disponibilizar via web service você pode usar qualquer uma das três abordagens, todas elas funcionam, o importante é ter uma noção de escala, eu ordenaria da seguinte forma:

  • Em banco para poucos acessos.
  • Local com servidor web para acessos moderados.
  • Em um CDN para acessos massivos (ex. E-commerces como Americanas, Submarino, Serviços como iFood, Zoom, ZapImoveis).

Espero ter te ajudado com sua dúvida.

Obrigado, muito util.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software