Copiando & Redimensionando Imagens [era: Performance]

12 respostas
F

Ola amigos
Tenho uma dúvida com relação a uma aplicação que estou desenvolvendo.
Minha aplicação deve varrer um arquivo que contem 270.340 fotos ou até mais!O aplicativo deve também redimensiona-las qd for preciso, ou seja acima de 90 kbs por foto.Ok ,fiz o aplicativo,entretanto queria saber se para melhorar o desempenho seria melhor usar uma StringBuffer ,pois meu código vai varrendo e costruindo várias Strings para criar os caminhos,o que vcs acham??? :wink:

12 Respostas

A

Se vc nao tiver multithreading use StringBuilder, essa classe funciona como a StringBuffer mas nao possui metodos thread-safe (syncronized)

caso contrario use a StringBuffer… nao vai melhorar teu desempenho… mas te garanto q vc vai usar menos memoria, pois a StringBuffer nao é imutavel, ao contrario da classe String

faelcavalcanti

inicialmente, utilize streams para lidar sob este cenario. por exemplo, utilize o ByteArrayInputStream, nao tem porque utilizar o StringBuilder. [Leia mais]

agora nao entendi que ele vai varrer um arquivo com mais de 270 mil fotos e redimensionar depois. se for do jeito que tou pensando, isso vai demorar pacas.

pcalcado

O arquivo contêm fotos ou a localização destas?

F

sim o arquivo contem fotos e muitas 270540 +ou menos…

F

faelcavalcanti:
inicialmente, utilize streams para lidar sob este cenario. por exemplo, utilize o ByteArrayInputStream, nao tem porque utilizar o StringBuilder. [Leia mais]

agora nao entendi que ele vai varrer um arquivo com mais de 270 mil fotos e redimensionar depois. se for do jeito que tou pensando, isso vai demorar pacas.

Ok vou explicar melhor,o problema consiste no seguinte:
Existe um servidor Y que cada tantos dias recebe N fotos de pessoas diferentes.
Na maioria das vezes, essas fotos estão acima de 100 kb o que faz Agora,existe um servidor X que deve receber as fotos redimensionadas para controle de segurança.A solução inicial proposta pelo meu chefe foi a seguinte:
Criar um algoritmo que vá ao servidor Y ,faça uma lista de todas fotos redimensionadas ali contidas e compare com as que estão no servidor pricipal X.
As fotos no servidor X não devem ser alteredas pois são as originais, mas sempre que necessário deve-se ter uma copia no servidor Y.Por esse motivo a comparação é de uma foto no servidor X com todas no servidor Y caso não haja igualade então a foto encontrada deve ser redimensionada e colocada no servidor Y.

Agora eu estavo pensando que poderia existir uma outra solução,para melhorar a performance.Avisar para quem faz o cadastro que as fotos novas devem serem salvas com um nome em MAISCULO ,assim todas as fotos do servidor X que tiverem um nome minuscolo irá significar que ja foram redimensionada,ou seja,ja existe uma copia o servidor Y.Assim deixo de fazer 100000 comparações.O que achas?

pcalcado

Pelo que entendi do seu sistema eu dificilmente utilizaria Java para isso.

1 - Utilize rsync para mantêr os servidores sincronizados
2 - Utilize ImageMagick para redimensionar as fotos no diretório copiando-as par aonde queira

Você consegue criar um script bash com meia dúzia de linhas que faz isso.

F

Poxa cara legal!!Mas o meu coordenador ou seja, chefe quer tudo em java!mas vou atráse desta classe que tu mencionaste!valeu mesmo : :smiley:

F

vixxe mas que classe foi mal!! :oops:

faelcavalcanti

qual argumento ele levantou que deveria ser em java?

F

qual argumento ele levantou que deveria ser em java?

Cara na verdade por ser um trabalho que cabe a min,realmente não perguntei ,mas sou estagiário e de costume não questiono muito também por falta de experiência!

faelcavalcanti

talvez ele esteja preocupado com a manutenção do projeto.

a sugestão de pcalcado, me pareceu interessante. o rsync utiliza o mecanismo de cópia remota a partir do protocolo SSH, isso significa que é muito melhor que o FTP, pois atua em tráfico criptografado, ainda mais com um recurso do (remote-update), que me pareceu aumentar bastante a velocidade. a idéia é interessante!

você poderia por curiosidade fazer em java, e depois faça-o utilizando o rsync, e a partir de comparativos você adquire confiança nas outras pessoas provando que existem melhores formas de se resolver um problema, e não só somente java, pois só assim você desenvolve aprendizado.

faelcavalcanti

pcalcado:
Pelo que entendi do seu sistema eu dificilmente utilizaria Java para isso.

1 - Utilize rsync para mantêr os servidores sincronizados
2 - Utilize ImageMagick para redimensionar as fotos no diretório copiando-as par aonde queira

Você consegue criar um script bash com meia dúzia de linhas que faz isso.


uma curiosidade, o ganho foi muito grande em relação a uma outra sugestão parecida ou projeto que você se envolveu?

Criado 30 de agosto de 2008
Ultima resposta 1 de set. de 2008
Respostas 12
Participantes 4