Arquivos No Banco
-
Upload
diogo-biazus -
Category
Technology
-
view
2.097 -
download
2
description
Transcript of Arquivos No Banco
![Page 1: Arquivos No Banco](https://reader033.fdocuments.net/reader033/viewer/2022042701/559c1dab1a28abde298b4616/html5/thumbnails/1.jpg)
Arquivos no banco o que fazer?
Diogo Biazus <diogob em gmail.com>
![Page 2: Arquivos No Banco](https://reader033.fdocuments.net/reader033/viewer/2022042701/559c1dab1a28abde298b4616/html5/thumbnails/2.jpg)
Arquivos no banco o que fazer?
Arquivos podem fazer parte de um modelo de banco de dados.
Não entre em pânico. Temos opções:
Bytea LO Sistema de arquivos
![Page 3: Arquivos No Banco](https://reader033.fdocuments.net/reader033/viewer/2022042701/559c1dab1a28abde298b4616/html5/thumbnails/3.jpg)
As opções do PostgreSQL
Bytea: Campo normal, array de bytes com tamanho
variável.
LO (Large Object): Armazena na tabela apenas um OID. Usa a pg_largeobject para armazenar o arquivo em
várias linhas com bytea.
Sistema de arquivos: Gravamos apenas o caminho no sistema de
arquivos.
![Page 4: Arquivos No Banco](https://reader033.fdocuments.net/reader033/viewer/2022042701/559c1dab1a28abde298b4616/html5/thumbnails/4.jpg)
Critérios para seleção (ou: não deixe a sorte escolher)
Pense um pouco, o que você quer? Compatibilidade com
cliente. Facilidade de
gerenciamento. Segurança. Escala. Performance.
![Page 5: Arquivos No Banco](https://reader033.fdocuments.net/reader033/viewer/2022042701/559c1dab1a28abde298b4616/html5/thumbnails/5.jpg)
Compatibilidade com cliente
Bytea: Total, é um campo como qualquer um. Só precisamos usar a codificação do bytea. INSERT INTO tabela VALUES ('arquivo com byte
zero (\000) no conteudo');
![Page 6: Arquivos No Banco](https://reader033.fdocuments.net/reader033/viewer/2022042701/559c1dab1a28abde298b4616/html5/thumbnails/6.jpg)
Compatibilidade com cliente
LO: Muitos: npgsql, PyGreS, JDBC, PDO, ... Mas nem todos: psycopg2. Usamos chamadas especiais:
lo_create lo_write lo_read
![Page 7: Arquivos No Banco](https://reader033.fdocuments.net/reader033/viewer/2022042701/559c1dab1a28abde298b4616/html5/thumbnails/7.jpg)
Compatibilidade com cliente
Sistema de arquivos Nenhum (se virem programadores) NFS, SMB, HTTP existem para isso. + trabalhoso.
![Page 8: Arquivos No Banco](https://reader033.fdocuments.net/reader033/viewer/2022042701/559c1dab1a28abde298b4616/html5/thumbnails/8.jpg)
Até agora ...
Bytea 2 x LO 1 x SA 0
![Page 9: Arquivos No Banco](https://reader033.fdocuments.net/reader033/viewer/2022042701/559c1dab1a28abde298b4616/html5/thumbnails/9.jpg)
Facilidade de gerenciamento
Bytea Muito fácil. 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 não precisam de nenhum
cuidado extra.
![Page 10: Arquivos No Banco](https://reader033.fdocuments.net/reader033/viewer/2022042701/559c1dab1a28abde298b4616/html5/thumbnails/10.jpg)
Facilidade de gerenciamento
LO Fácil. Backup e não precisa de cuidados extra. Integridade pode gerar orfãos. Cuidados especiais:
DELETE e DROP podem criar LOs orfãos. Use gatilhos com lo_unlink. Em último caso DELETE FROM pg_largeobject ...
![Page 11: Arquivos No Banco](https://reader033.fdocuments.net/reader033/viewer/2022042701/559c1dab1a28abde298b4616/html5/thumbnails/11.jpg)
Facilidade de gerenciamento
Sistema de arquivos Nem um pouco fácil. Backup precisa de rotina para buscar arquivos e
salvar uma cópia. Integridade não existe, precisamos implementar
gatilhos para tudo. DELETE e DROP não liberam espaço sem um
gatilho.
![Page 12: Arquivos No Banco](https://reader033.fdocuments.net/reader033/viewer/2022042701/559c1dab1a28abde298b4616/html5/thumbnails/12.jpg)
Bytea continua na frente
Bytea 4 x LO 2 x SA 0
![Page 13: Arquivos No Banco](https://reader033.fdocuments.net/reader033/viewer/2022042701/559c1dab1a28abde298b4616/html5/thumbnails/13.jpg)
Segurança
Bytea e LO Aproveita todos os mecanismos do banco de
restrição de acesso.
Sistema de arquivos Dificulta a implementação de restrições de acesso,
pois passa a ser responsabilidade do desenvolvedor cuidar das permissões no SA.
![Page 14: Arquivos No Banco](https://reader033.fdocuments.net/reader033/viewer/2022042701/559c1dab1a28abde298b4616/html5/thumbnails/14.jpg)
Escala
Muito bonito, mas será que agüenta o tranco?
![Page 15: Arquivos No Banco](https://reader033.fdocuments.net/reader033/viewer/2022042701/559c1dab1a28abde298b4616/html5/thumbnails/15.jpg)
Escala
Bytea Limite de 1 GB por arquivo. Operações só gravam ou lêem arquivos inteiros. SELECT * é um desastre. Consome bastante memória no cliente. Não é bom para arquivos muito grandes.
![Page 16: Arquivos No Banco](https://reader033.fdocuments.net/reader033/viewer/2022042701/559c1dab1a28abde298b4616/html5/thumbnails/16.jpg)
Escala
LO Limite de 2 GB por arquivo. Operações são orientadas a fluxo de dados. Ótimo para arquivos muito grandes.
![Page 17: Arquivos No Banco](https://reader033.fdocuments.net/reader033/viewer/2022042701/559c1dab1a28abde298b4616/html5/thumbnails/17.jpg)
Escala
Sistema de arquivos Limitação de tamanho depende do sistema de
arquivos subjacente, mas é muito superior aos outros.
Operações podem ser feitas diretamente sobre o arquivo.
Ótimo para arquivos muito grandes.
![Page 18: Arquivos No Banco](https://reader033.fdocuments.net/reader033/viewer/2022042701/559c1dab1a28abde298b4616/html5/thumbnails/18.jpg)
Os adversários se recuperam
Bytea 4 x LO 3 x SA 2
![Page 19: Arquivos No Banco](https://reader033.fdocuments.net/reader033/viewer/2022042701/559c1dab1a28abde298b4616/html5/thumbnails/19.jpg)
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 distribuído: NFS Rede 100 Mbps
![Page 20: Arquivos No Banco](https://reader033.fdocuments.net/reader033/viewer/2022042701/559c1dab1a28abde298b4616/html5/thumbnails/20.jpg)
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
![Page 21: Arquivos No Banco](https://reader033.fdocuments.net/reader033/viewer/2022042701/559c1dab1a28abde298b4616/html5/thumbnails/21.jpg)
Performance
Testes: Inserção – Inserção com INSERT de 1.1 GB em
aprox. 2700 arquivos. Consulta – 20 execuções de SELECTs com ORDER
BY random() e LIMIT 50 em 10 clientes concorrentes. Copiando um total de aprox. 700 MB do servidor.
Exclusão – Exclusão de todos arquivos do banco (considerando o unlink para LO e rm para o SA).
Arquivos variando de poucos KB até 30 MB.
![Page 22: Arquivos No Banco](https://reader033.fdocuments.net/reader033/viewer/2022042701/559c1dab1a28abde298b4616/html5/thumbnails/22.jpg)
Performance
Inserção Consulta Exclusão
00:24:10 00:31:50 00:01:56
LO 00:05:16 00:03:38 00:02:17
Sistema de arquivos 00:02:29 00:05:24 00:00:34
Bytea
![Page 23: Arquivos No Banco](https://reader033.fdocuments.net/reader033/viewer/2022042701/559c1dab1a28abde298b4616/html5/thumbnails/23.jpg)
Performance
Bytea Muita carga na máquina do cliente. Load no cliente chegou a 24 na consulta. Uso de memória e CPU altos no cliente. Servidor ocioso durante todos os testes exceto o de
exclusão, mas com grande consumo de memória.
![Page 24: Arquivos No Banco](https://reader033.fdocuments.net/reader033/viewer/2022042701/559c1dab1a28abde298b4616/html5/thumbnails/24.jpg)
Performance
LO Consumo de recursos muito inferior no cliente. Usa mais recursos de CPU no servidor. Mesmo assim o servidor continuou ocioso na
inserção. Carga do servidor chegou a 4 nas consultas.
![Page 25: Arquivos No Banco](https://reader033.fdocuments.net/reader033/viewer/2022042701/559c1dab1a28abde298b4616/html5/thumbnails/25.jpg)
Performance
Sistema de arquivos Baixo consumo de recursos no cliente. Trabalho sujo é feito pelo sistema NFS. Baixo uso de CPU. Servidor ocioso na inserção. Carga chegou a 3 nas consultas.
![Page 26: Arquivos No Banco](https://reader033.fdocuments.net/reader033/viewer/2022042701/559c1dab1a28abde298b4616/html5/thumbnails/26.jpg)
E finalmente o vencedor ...
Considerando todos os aspectos, a resposta que todos aguardam é...
![Page 27: Arquivos No Banco](https://reader033.fdocuments.net/reader033/viewer/2022042701/559c1dab1a28abde298b4616/html5/thumbnails/27.jpg)
Temos um empate senhoras e senhores
Quase enganei vocês, como sempre a resposta certa em TI é: depende.
![Page 28: Arquivos No Banco](https://reader033.fdocuments.net/reader033/viewer/2022042701/559c1dab1a28abde298b4616/html5/thumbnails/28.jpg)
Isso eu já sabia
Alguém pode perguntar: Se é para ver essa conclusão porque assistimos
essa palestra?
Eu responderia: É importante conhecer bem as opções e saber
quando e onde cada uma pode ser a estratégia vencedora!
![Page 29: Arquivos No Banco](https://reader033.fdocuments.net/reader033/viewer/2022042701/559c1dab1a28abde298b4616/html5/thumbnails/29.jpg)
Considerações finais
Você quer armazenar a foto do cliente? Considere usar o tipo bytea.
Ou talvez grandes conjuntos de áudio compactado? LO pode ser mais adequado.
Arquivos com mais de 2 GB? Sistema de arquivos é o caminho.
![Page 30: Arquivos No Banco](https://reader033.fdocuments.net/reader033/viewer/2022042701/559c1dab1a28abde298b4616/html5/thumbnails/30.jpg)
The End
Muito Obrigado!