Escolar Documentos
Profissional Documentos
Cultura Documentos
Arquivos podem fazer parte de um modelo de banco de dados. No entre em pnico. Temos opes:
As opes do PostgreSQL
Bytea:
Campo normal, array de bytes com tamanho varivel. Armazena na tabela apenas um OID. Usa a pg_largeobject para armazenar o arquivo em vrias linhas com bytea. Gravamos apenas o caminho no sistema de arquivos.
LO (Large Object):
Sistema de arquivos:
Bytea:
Total, um campo como qualquer um. S precisamos usar a codificao do bytea. INSERT INTO tabela VALUES ('arquivo com byte zero (\000) no conteudo');
LO:
Muitos: npgsql, PyGreS, JDBC, PDO, ... Mas nem todos: psycopg2. Usamos chamadas especiais:
Sistema de arquivos
Nenhum (se virem programadores) NFS, SMB, HTTP existem para isso. + trabalhoso.
At agora ...
Bytea 2 x LO 1 x SA 0
Facilidade de gerenciamento
Bytea
Muito fcil. Na verdade exatamente igual a qualquer outro campo. Apenas cria um certo desconforto ao usar o SELECT * ..., cuidado com consultas desse tipo. Integridade e backup no precisam de nenhum cuidado extra.
Facilidade de gerenciamento
LO
Fcil. Backup e no precisa de cuidados extra. Integridade pode gerar orfos. Cuidados especiais:
DELETE e DROP podem criar LOs orfos. Use gatilhos com lo_unlink. Em ltimo caso DELETE FROM pg_largeobject ...
Facilidade de gerenciamento
Sistema de arquivos
Nem um pouco fcil. Backup precisa de rotina para buscar arquivos e salvar uma cpia. Integridade no existe, precisamos implementar gatilhos para tudo. DELETE e DROP no liberam espao sem um gatilho.
Bytea 4 x LO 2 x SA 0
Segurana
Bytea e LO
Aproveita todos os mecanismos do banco de restrio de acesso. Dificulta a implementao de restries de acesso, pois passa a ser responsabilidade do desenvolvedor cuidar das permisses no SA.
Sistema de arquivos
Escala
Escala
Bytea
Limite de 1 GB por arquivo. Operaes s gravam ou lem arquivos inteiros. SELECT * um desastre. Consome bastante memria no cliente. No bom para arquivos muito grandes.
Escala
LO
Limite de 2 GB por arquivo. Operaes so orientadas a fluxo de dados. timo para arquivos muito grandes.
Escala
Sistema de arquivos
Limitao de tamanho depende do sistema de arquivos subjacente, mas muito superior aos outros. Operaes podem ser feitas diretamente sobre o arquivo. timo para arquivos muito grandes.
Os adversrios se recuperam
Bytea 4 x LO 3 x SA 2
Performance
Ambiente de testes
Cliente (Core 2 Duo, 1 GB RAM, SATA 2) Servidor (Pentium D, 1GB RAM, SATA 2) SO Ubuntu 7.10 Sistema de arquivos: ext3 Sistema de arquivos distribudo: NFS Rede 100 Mbps
Performance
postgresql.conf
shared_buffers = 300MB work_mem = 10MB max_fsm_pages = 204800 wal_buffers = 512kB checkpoint_segments = 13 checkpoint_timeout = 35min effective_cache_size = 400MB
Performance
Testes:
Insero Insero com INSERT de 1.1 GB em aprox. 2700 arquivos. Consulta 20 execues de SELECTs com ORDER BY random() e LIMIT 50 em 10 clientes concorrentes. Copiando um total de aprox. 700 MB do servidor. Excluso Excluso de todos arquivos do banco (considerando o unlink para LO e rm para o SA). Arquivos variando de poucos KB at 30 MB.
Performance
Insero Bytea LO Sistema de arquivos Consulta Excluso 00:01:56 00:02:17 00:00:34
Performance
Bytea
Muita carga na mquina do cliente. Load no cliente chegou a 24 na consulta. Uso de memria e CPU altos no cliente. Servidor ocioso durante todos os testes exceto o de excluso, mas com grande consumo de memria.
Performance
LO
Consumo de recursos muito inferior no cliente. Usa mais recursos de CPU no servidor. Mesmo assim o servidor continuou ocioso na insero. Carga do servidor chegou a 4 nas consultas.
Performance
Sistema de arquivos
Baixo consumo de recursos no cliente. Trabalho sujo feito pelo sistema NFS. Baixo uso de CPU. Servidor ocioso na insero. Carga chegou a 3 nas consultas.
Isso eu j sabia
Se para ver essa concluso porque assistimos essa palestra? importante conhecer bem as opes e saber quando e onde cada uma pode ser a estratgia vencedora!
Eu responderia:
Consideraes finais
The End
Muito Obrigado!