Salvando arquivos no banco de dados

5 respostas
R

Hi, eu estou trabalhando em um sistema que armazena arquivos no banco de dados, estes arquivos ficam armazenados em uma coluna do tipo blob.
Eu estou encontrando varios problemas para trabalhar com esta abordagem, o primeiro problema é que usamos o framework ORM (Hibernate) para persisitir os objetos, e este acusa problemas de falta de memoria e algo do genero
Eu consegui configurar o hibernate para trabalhar com arquivos binarios, fica mais lento mas tudo bem, mas agora o servidor de aplicação acusa falta de memoria.
Ao aumentar a capacidade de memoria do servidor de aplicação o sistema ficou extramamente lento.

Eu estou começando a imaginar que salvar arquivos no banco de dados é uma péssima idéia, pois qualquer consulta de 100 registro eu imagino que deva carregar uns 100 megas na memoria, porque cada arquivo tem cerca de 1 mega.

Alguem tem uma dica ?

5 Respostas

tengan

Por que vc não faz como imagens ao invés de salvar o arquivo em si, salva o local onde o arquivo fique salvo, se os arquivos forem muito importantes deixe eles um um local de acesso restrito permitindo somente a aplicação acessar o local.

R

Eu estou adotando esta abordagem agora… que é a tradicional que eu comumente usava, porem eu me sinto mais seguro gradando estas informações no banco de dados, mas acho que nao é possivel.

maquiavelbona

Estás trabalhando com Lazy-Loading e com cache de segundo nível habilitado? Isso pode, e vai, abocanhar um bom espaço da sua memória caso não tenhas cuidado com isso.

Até!

esqueleto

Estás trabalhando com Lazy-Loading e com cache de segundo nível habilitado? Isso pode, e vai, abocanhar um bom espaço da sua memória caso não tenhas cuidado com isso.

Kra estou tento o mesmo problema mas como checo o Lazy-Loading e o cache de segundo nivel? Tem uma propriedade no hibernate.cfg.xml pra configurar isso?? E o q é isso

Esqueleto

erickmelo

Existem algumas considerações a serem feitas:

  1. Você fará consulta em cima dos arquivos armazenados no campo BLOB, isto é, você fará uma busca em cima de um trecho desse BLOB por exemplo, ou o arquivo será somente armazenado (ex: foto, doc, etc)?

Se for o caso de apenas armazenar os dados e não haver consulta diretamente em cima do BLOB, não há problemas de performance no Banco. Quando você fizer um SELECT, utilizando índices o banco NÃO carregará todos os registros para a memória.

Supondo que você tenha 1024 registros, com cada BLOB de 1 MB. Nesse caso a tua base teria um tamanho aproximado de 1 GB. Isso não significa que na hora de fazer uma busca o teu banco de dados precisará carregar 1 GB pra memória. Se os índices forem bem construídos e as consultas forem em cima deles, não haverá probemas de performance.

  1. Qual a necessidade de carregar simultaneamente 100 registros BLOB em memória simultaneamente? Supondo que sejam arquivos, tua aplicação necessita necessariamente dar o display desses 100 BLOB simultaneamente? Talvez caiba uma análise quanto a isso. Se vc carregar o conteúdo do BLOB on demand talvez resolva o teu problema de falta de memória.

[]s
Erick

Criado 7 de agosto de 2007
Ultima resposta 3 de out. de 2007
Respostas 5
Participantes 5