[firebase-br] Imagens no banco de dados

Gladiston Santana gladiston em vidy.com.br
Ter Out 8 11:58:43 -03 2013


Vai fundo, é assim mesmo.
Colocar as figuras em disco é sua pior opção, preguiçosamente pode ser mais
fácil, mas é inseguro porque voce tem que amarrar permissões unix ou
DACL(Windows) que com o tempo afrouxam porque quem administra a rede pode
ser diferente de quem administra o sistema. Tambem perde flexibilidade, por
exemplo, fica dificil depois se voce for criar um programa para acesso via
internet (web) e obter estas figuras.

Os blobs binarios são guardados em páginas de dados em separado das páginas
de dados de sua tabela, então não há problema performatico em que deva
dividir em 2 databases como sugeriram os colegas. Nem mesmo em duas tabelas
se for 1 para 1, o problema numa tabela única é o maldito select * from que
dá uma carga desnecessária para um campo que muitas vezes não irá usar
naquele modulo. O MSSQL tem um recurso que permite proibir o "*" nas
sentenças SQL, acho que o FB deveria ter um tambem.


O problema de usar stream, não é o stream em si, são os componentes que o
recebem.
Como seu desenho esta guardado em formato jpg, o componente precisa tratar
isso corretamente e na hora de salvar tambem. Tem componentes que se o jpg
(cada jpg pode ter especificidade diferente) não estiver nas especificações
esperadas, dá uns tilts com LoadFromStream e as vezes é melhor salvar o
stream em disco e depois praticar o LoadFromFile para o componente. Mas
isso não é culpa do stream, mas do componente que não trata exceções de
modo adequado.
Já aconteceu dum componente salvar em bitmap e eu achar que estava em jpg,
daí ao carregar a figura para o componente que esperava um jpg dava um
tilt, lembre-se que o FB não sabe que é jpg, para ele todo blob é conteudo
binário e ele não trata o seu conteúdo. Já os componentes não, por isso, o
Delphi tem uma unit para tratar jpg para uniformizar a forma de acesso dos
componentes.

Para registro historico é bom gravar a figura como voce está fazendo, mas
tambem acrescentar uma coluna de tipo para num futuro permitir lidar com
formatos diferentes que apareceram. Eu faço isso em forma de DOMAIN onde
'1' é bmp, '2' é 'jpg' etc.... e um campo calculado que diz exatamente isso
com palavras para que nunca esqueça o que é 1, 2, 3, ....

Mas cuidado com formatos comprimidos (jpg é um deles), embora ele economize
espaço em disco, ele consome mais RAM e CPU. Para mim, num banco de dados a
prioridade é performance e não espaço. Quanto mais compactado for, em
geral, mais ciclos de CPU são necessários. A versatilidade do jpg é que
vocÊ pode usá-lo com baixo grau de compressão, e ainda assim diminuir
bastante o tamanho do arquivo porque seu algoritimo destroi cores e pontos
que não percebemos na resolução indicada.

[]´s


Em 8 de outubro de 2013 07:17, Wesley Oliveira <wesley em rgsystem.com.br>escreveu:

> Bom dia pessoal!
>
>
>
> Qual seria a melhor configuração de campo Blob para gravar imagens no banco
> de dados? Preciso salvar fotos de alunos e professores e imagens para usar
> de cabeçalho e fundo de alguns relatórios, mas às vezes com imagens
> grandes,
> dá violação de acesso ao imprimir o relatório (rave reports / Fast
> Report)...
>
>
>
> Hoje tenho campos Blob binários com Segment Size 80, 200  400, mas não
> tenho
> certeza qual seria o melhor cenário.
>
>
>
> Obrigado!
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use:
> http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>



Mais detalhes sobre a lista de discussão lista