problema trabalhando com milhares de arquivos  XML
Índice dos Fóruns » Arquitetura de Sistemas
Autor Mensagem
maschiojv
JavaChild
[Avatar]

Membro desde: 27/02/2007 18:29:37
Mensagens: 119
Offline

Boa tarde!

Juro que pesquisei no fórum e não achei nada... se eu estiver perguntando alguma coisa repetida por favor me perdoem

Bem, meu problema é o seguinte: tenho uma aplicação que armazena e exibe milhares de imagens por dia em um sistema web. A principio optamos por armazenar as imagens em diretórios, não no banco (o que se mostrou uma boa escolha, pois podemos apontar o apache para exibir diretamente as imagens, sem passar pela aplicação), porém (ai começa o problema) recentemente a estrutura de diretórios que comporta essas imagens chegou em uma ?massa critica? que ferra com tudo, o processamento sobe, o IO de disco dispara, a máquina cai, é um caos
resolvemos paliativamente retirando algumas imagens do diretório (algumas milhares, gigas), pois quando o numero de imagens sobe muito até mesmo um du -hs trava tudo.
Pesquisei sobre armazenamento de imagens ou arquivos, mas só encontrei discuções sobre qual era melhor, BD ou diretórios. Infelizmente migrar as imagens para o banco é a ultima opção que temos, por isso gostaria do conselho de vocês para resolver isso. Será que deveria mudar a estrutura dos diretórios (aumentando o numero de arquivos em cada pasta e diminuindo o numero de pastas por exemplo)

Valeu desde já pessoal
dijava
JavaGuru
[Avatar]

Membro desde: 02/11/2009 14:04:14
Mensagens: 204
Localização: RJ
Offline

maschiojv não é solução mas eu criaria um processo para zipar as imagens de acordo com tempo delas, e veria bem como ficaria a estrutura da arvore, caso seja possivel na sua regra, é ?
luistiagos
GUJ Expert
[Avatar]

Membro desde: 10/07/2006 10:37:23
Mensagens: 3161
Offline

ja pensou em distribuir estas imagens para varios servers?




SCJP 1.5
SCJA 1.0
IBM DB2 Associate
[Email] [MSN]
maschiojv
JavaChild
[Avatar]

Membro desde: 27/02/2007 18:29:37
Mensagens: 119
Offline

dijava wrote:maschiojv não é solução mas eu criaria um processo para zipar as imagens de acordo com tempo delas, e veria bem como ficaria a estrutura da arvore, caso seja possivel na sua regra, é ?


zipei algumas imagens pra testar, mas a diferença de tamanho ou foi insignificante ou ficou na mesma... sei não, mas acho que esse não é o caminho
maschiojv
JavaChild
[Avatar]

Membro desde: 27/02/2007 18:29:37
Mensagens: 119
Offline

luistiagos wrote:ja pensou em distribuir estas imagens para varios servers?


certamente isso resolveria, mas ai eu teria que convencer que não tem outra solução meeeeeeesmo e que eles (boss e cliente) vão ter que meter a mão no bolso pra comprar mais servidores (mais hospedagem, mais backup, etc)
esmiralha
JavaEvangelist

Membro desde: 19/07/2006 09:04:42
Mensagens: 402
Offline

Cara, segmenta essa budega em vários diretórios (por data/hora, numero de arquivos, whatever). O problema pode estar relacionado a você ter muitos arquivos no mesmo diretório.
maschiojv
JavaChild
[Avatar]

Membro desde: 27/02/2007 18:29:37
Mensagens: 119
Offline

[quote=esmiralha]Cara, segmenta essa budega em vários diretórios (por data/hora, numero de arquivos, whatever). O problema pode estar relacionado a você ter muitos arquivos no mesmo diretório.[/quote]

realmente me disseram isso quando eu tava analizando a melhor forma de fazer isso. nesse sistema eu dividi de forma que ficam no máximo 30 imagens por diretório, ta dividido por ano, mes, ponto de venda, processo. apenas 4 subdiretorios.
ouvi uma conversa tamém que o numero mágico é 64, 64 pastas dentro de cada pasta, 64 arquivos dentro de cada pasta e 64 subdiretorios para cada subdiretorio raiz, mas não achei nenhum fundamento que justificasse isso... seria um processo foda, não posso fazer isso baseado num numero cabalistico eu provavelmente não tenha fundamento... por isso estou pedindo opiniões aqui no forum, onde tem mais chance de alguem ja ter passado por algma coisa parecida
maschiojv
JavaChild
[Avatar]

Membro desde: 27/02/2007 18:29:37
Mensagens: 119
Offline

[quote=maschiojv][quote=esmiralha]Cara, segmenta essa budega em vários diretórios (por data/hora, numero de arquivos, whatever). O problema pode estar relacionado a você ter muitos arquivos no mesmo diretório.[/quote]

realmente me disseram isso quando eu tava analizando a melhor forma de fazer isso. nesse sistema eu dividi de forma que ficam no máximo 30 imagens por diretório, ta dividido por ano, mes, ponto de venda, processo. apenas 4 subdiretorios.
ouvi uma conversa tamém que o numero mágico é 64, 64 pastas dentro de cada pasta, 64 arquivos dentro de cada pasta e 64 subdiretorios para cada subdiretorio raiz, mas não achei nenhum fundamento que justificasse isso... seria um processo foda, não posso fazer isso baseado num numero cabalistico que provavelmente não tenha fundamento... por isso estou pedindo opiniões aqui no forum, onde tem mais chance de alguem ja ter passado por algma coisa parecida[/quote]
esmiralha
JavaEvangelist

Membro desde: 19/07/2006 09:04:42
Mensagens: 402
Offline

Nao entendi tua estrutura... seria assim?

2011
--> Jan
---->Pt Venda 1
------>Processo 1
------>Processo 2
---->Pt Venda 2
--> Fev
---->Pt Venda 1
------>Processo 1
------>Processo 2
---->Pt Venda 2
maschiojv
JavaChild
[Avatar]

Membro desde: 27/02/2007 18:29:37
Mensagens: 119
Offline

[quote=esmiralha]Nao entendi tua estrutura... seria assim?

2011
--> Jan
---->Pt Venda 1
------>Processo 1
------>Processo 2
---->Pt Venda 2
--> Fev
---->Pt Venda 1
------>Processo 1
------>Processo 2
---->Pt Venda 2[/quote]

isso ai. mais precisamente isso:

2011 (12 pastas dentro dessa)
-->1 (os meses estão em numeros, tem em média 140 pastas aqui dentro)
---->1000 (id do ponto de venda, ai varia entre 1 e 100 pastas)
-------> 12345 (id do processo com no máximo 30 imagens)

quando identificamos que essa estrutura estava dando problema, tiramos todas as pastas e arquivos de jan de 2011 pra tras, se tiver poucos meses não tem problema...
esmiralha
JavaEvangelist

Membro desde: 19/07/2006 09:04:42
Mensagens: 402
Offline

Qual o tamanho médio de cada imagem?
maschiojv
JavaChild
[Avatar]

Membro desde: 27/02/2007 18:29:37
Mensagens: 119
Offline

esmiralha wrote:Qual o tamanho médio de cada imagem?


entre 150 e 300k

This message was edited 2 times. Last update was at 26/04/2011 12:57:33

joaosouza
JavaEvangelist
[Avatar]

Membro desde: 14/08/2006 15:57:59
Mensagens: 331
Localização: São Paulo
Offline

É necessário manter todas as informações (arquivos/pastas/subpastas) indefinidamente..??

Aqui na empresa passamos por um problema parecido com este...Tinhamos um FileServer onde o Tomcat armazenava fisicamente os arquivos e guardava um index para estes arquivos em Banco de Dados...A medida que o tamanho do fileserver foi crescendo tivemos que montar uma estrutura de expurgo e restore de arquivos antigos, por exemplo, mais que 6 meses, atualmente por volta de 3 meses fica armazenado 700 GB de imagens, e o restante é transferido para outro fileserver.

Basicamente tinhamos um processo batch que ao executar varria o fileserver ativo em busca dos arquivos antigos baseando-se nos index armazenados no DB, e os transportavam para outro fileserver, neste momento o batch ajustava as informações no DB para os indexs destes arquivos movidos...

Com isso conseguimos resolver um problema.

Uma outra opção é utilizar alguma API para tratamento de Arquivos/Imagens, como por exemplo, o Apache Jackrabbit, muito boa por sinal, com ela você pode indexar tanto em filesystem, banco de dados e/ou filesystem+DB...

This message was edited 2 times. Last update was at 26/04/2011 14:54:56


João Paraiso.

# The Future is Open !!
[Email] [Yahoo!] [MSN]
maschiojv
JavaChild
[Avatar]

Membro desde: 27/02/2007 18:29:37
Mensagens: 119
Offline

joaosouza wrote:É necessário manter todas as informações (arquivos/pastas/subpastas) indefinidamente..??

Aqui na empresa passamos por um problema parecido com este...Tinhamos um FileServer onde o Tomcat armazenava fisicamente os arquivos e guardava um index para estes arquivos em Banco de Dados...A medida que o tamanho do fileserver foi crescendo tivemos que montar uma estrutura de expurgo e restore de arquivos antigos, por exemplo, mais que 6 meses, atualmente por volta de 3 meses fica armazenado 700 GB de imagens, e o restante é transferido para outro fileserver.

Basicamente tinhamos um processo batch que ao executar varria o fileserver ativo em busca dos arquivos antigos baseando-se nos index armazenados no DB, e os transportavam para outro fileserver, neste momento o batch ajustava as informações no DB para os indexs destes arquivos movidos...

Com isso conseguimos resolver um problema.

Uma outra opção é utilizar alguma API para tratamento de Arquivos/Imagens, como por exemplo, o Apache Jackrabbit, muito boa por sinal, com ela você pode indexar tanto em filesystem, banco de dados e/ou filesystem+DB...



Infelizmente sim, temos que manter por um bom tempo as informações...
quanto a transferir de um servidor para outro... acho que essa é a inevitavel solução, mas eu queria que pelo menos eu conseguisse utilizar totalmente o HD disponivel nesse servidor (que é de um tera), mas o problema começa com uns 250G só, se eu pelo menos conseguisse chegar nos 700G como você eu ficaria mais satisfeito. Qual é a estrutura de diretórios que vc está usando? quantoas subpastas e quantos arquivos por pasta em média?
joaosouza
JavaEvangelist
[Avatar]

Membro desde: 14/08/2006 15:57:59
Mensagens: 331
Localização: São Paulo
Offline

Olá maschiojv,

Cara a estrutura de diretórios que usamos aqui é bem simples, fica no máximo em 4 a 5 níveis e não chega a ter 10 arquivos em cada nível...

Uma pergunta, esse disco de 1 Tera que você disse ter é um disco local no server ou um storage com uma LUN de 1 Tera ??

Aqui, por exemplo, temos um disco com 1 tera, mas quebramos ele em várias Luns de 250 GB, por exemplo. Com isso voce ganha em disponibilidade pq se um destes discos cair vc não perde tudo e indisponibiliza o sistema, e por outro lado você tem mais performance pois como os discos são menores a indexação é melhor...

Espero que tenha ajudado.

João Paraiso.

# The Future is Open !!
[Email] [Yahoo!] [MSN]
 
Índice dos Fóruns » Arquitetura de Sistemas
Ir para:   
Powered by JForum 2.1.8 © JForum Team