SlideShare una empresa de Scribd logo
1 de 30
Descargar para leer sin conexión
Arquivos no banco o que fazer?




    Diogo Biazus <diogob em gmail.com>
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
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.
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.
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');
Compatibilidade com cliente

   LO:
       Muitos: npgsql, PyGreS, JDBC, PDO, ...
       Mas nem todos: psycopg2.
       Usamos chamadas especiais:
            lo_create
            lo_write
            lo_read
Compatibilidade com cliente

   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 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.
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 ...
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.
Bytea continua na frente

   Bytea 4 x LO 2 x SA 0
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.
Escala

            Muito bonito, mas
             será que agüenta o
             tranco?
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.
Escala

   LO
       Limite de 2 GB por arquivo.
       Operações são orientadas a fluxo de dados.
       Ótimo para arquivos muito grandes.
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.
Os adversários 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 distribuído: 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:
       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.
Performance

                      Inserção   Consulta Exclusão
Bytea                 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
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.
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.
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.
E finalmente o vencedor ...

   Considerando todos os aspectos, a resposta que
    todos aguardam é...
Temos um empate senhoras e
senhores
   Quase enganei vocês, como sempre a resposta
    certa em TI é: depende.
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!
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.
The End




          Muito Obrigado!

Más contenido relacionado

La actualidad más candente

Projetos de rede sistemas de servidores
Projetos de rede sistemas de servidoresProjetos de rede sistemas de servidores
Projetos de rede sistemas de servidoresAriel Fernando
 
Webcast Tutorial: Análise de dumps de memória no GNU/Linux
Webcast Tutorial: Análise de dumps de memória no GNU/LinuxWebcast Tutorial: Análise de dumps de memória no GNU/Linux
Webcast Tutorial: Análise de dumps de memória no GNU/LinuxDiego Santos
 
Alta disponibilidade com PostgreSQL
Alta disponibilidade com PostgreSQLAlta disponibilidade com PostgreSQL
Alta disponibilidade com PostgreSQLLeonardo Cezar
 
AIX - Gerência de Memória
AIX - Gerência de MemóriaAIX - Gerência de Memória
AIX - Gerência de MemóriaJean Pimentel
 
Sistema operativo servidor
Sistema operativo servidorSistema operativo servidor
Sistema operativo servidorTiago Dinis
 
Gerência de Memória: Memória Principal
Gerência de Memória: Memória PrincipalGerência de Memória: Memória Principal
Gerência de Memória: Memória PrincipalAlexandre Duarte
 
Rpm e yum - gerenciamento de pacotes
Rpm e yum - gerenciamento de pacotesRpm e yum - gerenciamento de pacotes
Rpm e yum - gerenciamento de pacotesFábio dos Reis
 
Gerenciamento de Backups PostgreSQL com pgbarman
Gerenciamento de Backups PostgreSQL com pgbarmanGerenciamento de Backups PostgreSQL com pgbarman
Gerenciamento de Backups PostgreSQL com pgbarmanJuliano Atanazio
 
Sistemas Operacionais
Sistemas OperacionaisSistemas Operacionais
Sistemas OperacionaisBia Vieira
 
AIX - Sistemas de Arquivos
AIX - Sistemas de ArquivosAIX - Sistemas de Arquivos
AIX - Sistemas de ArquivosJean Pimentel
 
Aula - Memórias - Montagem e Manutenção de Computadores - Ced@spy
Aula - Memórias - Montagem e Manutenção de Computadores - Ced@spyAula - Memórias - Montagem e Manutenção de Computadores - Ced@spy
Aula - Memórias - Montagem e Manutenção de Computadores - Ced@spyAlexandre Da Silva Azevedo
 
Hierarquia de memória
Hierarquia de memóriaHierarquia de memória
Hierarquia de memóriaPAULO Moreira
 
Introdução ao Linux - aula 05
Introdução ao Linux - aula 05Introdução ao Linux - aula 05
Introdução ao Linux - aula 05Renan Aryel
 
Gerenciamento de Memoria
Gerenciamento de MemoriaGerenciamento de Memoria
Gerenciamento de Memoriaaudineisilva1
 
A memoria do computador
A memoria do computadorA memoria do computador
A memoria do computadorchryslanne
 

La actualidad más candente (20)

Gfs slides
Gfs slidesGfs slides
Gfs slides
 
Projetos de rede sistemas de servidores
Projetos de rede sistemas de servidoresProjetos de rede sistemas de servidores
Projetos de rede sistemas de servidores
 
Webcast Tutorial: Análise de dumps de memória no GNU/Linux
Webcast Tutorial: Análise de dumps de memória no GNU/LinuxWebcast Tutorial: Análise de dumps de memória no GNU/Linux
Webcast Tutorial: Análise de dumps de memória no GNU/Linux
 
Alta Concorrência com Postgres
Alta Concorrência com PostgresAlta Concorrência com Postgres
Alta Concorrência com Postgres
 
Alta disponibilidade com PostgreSQL
Alta disponibilidade com PostgreSQLAlta disponibilidade com PostgreSQL
Alta disponibilidade com PostgreSQL
 
AIX - Gerência de Memória
AIX - Gerência de MemóriaAIX - Gerência de Memória
AIX - Gerência de Memória
 
Sistema operativo servidor
Sistema operativo servidorSistema operativo servidor
Sistema operativo servidor
 
Gerência de Memória: Memória Principal
Gerência de Memória: Memória PrincipalGerência de Memória: Memória Principal
Gerência de Memória: Memória Principal
 
Rpm e yum - gerenciamento de pacotes
Rpm e yum - gerenciamento de pacotesRpm e yum - gerenciamento de pacotes
Rpm e yum - gerenciamento de pacotes
 
Gerenciamento de Backups PostgreSQL com pgbarman
Gerenciamento de Backups PostgreSQL com pgbarmanGerenciamento de Backups PostgreSQL com pgbarman
Gerenciamento de Backups PostgreSQL com pgbarman
 
Endereçamento de memória
Endereçamento de memóriaEndereçamento de memória
Endereçamento de memória
 
Sistemas Operacionais
Sistemas OperacionaisSistemas Operacionais
Sistemas Operacionais
 
AIX - Sistemas de Arquivos
AIX - Sistemas de ArquivosAIX - Sistemas de Arquivos
AIX - Sistemas de Arquivos
 
Aula - Memórias - Montagem e Manutenção de Computadores - Ced@spy
Aula - Memórias - Montagem e Manutenção de Computadores - Ced@spyAula - Memórias - Montagem e Manutenção de Computadores - Ced@spy
Aula - Memórias - Montagem e Manutenção de Computadores - Ced@spy
 
Hierarquia de memória
Hierarquia de memóriaHierarquia de memória
Hierarquia de memória
 
Introdução ao Linux - aula 05
Introdução ao Linux - aula 05Introdução ao Linux - aula 05
Introdução ao Linux - aula 05
 
Gerenciamento de Memoria
Gerenciamento de MemoriaGerenciamento de Memoria
Gerenciamento de Memoria
 
Google File System
Google File SystemGoogle File System
Google File System
 
A memoria do computador
A memoria do computadorA memoria do computador
A memoria do computador
 
Gerenciamento memoria
Gerenciamento memoriaGerenciamento memoria
Gerenciamento memoria
 

Destacado

PostgreSQL: O melhor banco de dados Universo
PostgreSQL: O melhor banco de dados UniversoPostgreSQL: O melhor banco de dados Universo
PostgreSQL: O melhor banco de dados Universoelliando dias
 
Curso de PostgreSQL: Um pouco Além dos Comandos
Curso de PostgreSQL: Um pouco Além dos ComandosCurso de PostgreSQL: Um pouco Além dos Comandos
Curso de PostgreSQL: Um pouco Além dos ComandosMarcos Thomaz
 
Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0
Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0
Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0Marcos William Valentini
 
PGDay Campinas 2013 - Implementando o PostgreSQL de maneira escalável e com a...
PGDay Campinas 2013 - Implementando o PostgreSQL de maneira escalável e com a...PGDay Campinas 2013 - Implementando o PostgreSQL de maneira escalável e com a...
PGDay Campinas 2013 - Implementando o PostgreSQL de maneira escalável e com a...PGDay Campinas
 
PGDay Campinas 2013 - CASE: PostgreSQL no Tribunal de Justiça do Paraná
PGDay Campinas 2013 - CASE: PostgreSQL no Tribunal de Justiça do ParanáPGDay Campinas 2013 - CASE: PostgreSQL no Tribunal de Justiça do Paraná
PGDay Campinas 2013 - CASE: PostgreSQL no Tribunal de Justiça do ParanáPGDay Campinas
 
PGDay Campinas 2013 - Postgres XC @ Cloud
PGDay Campinas 2013 - Postgres XC @ CloudPGDay Campinas 2013 - Postgres XC @ Cloud
PGDay Campinas 2013 - Postgres XC @ CloudPGDay Campinas
 
Maximizing EC2 and Elastic Block Store Disk Performance (STG302) | AWS re:Inv...
Maximizing EC2 and Elastic Block Store Disk Performance (STG302) | AWS re:Inv...Maximizing EC2 and Elastic Block Store Disk Performance (STG302) | AWS re:Inv...
Maximizing EC2 and Elastic Block Store Disk Performance (STG302) | AWS re:Inv...Amazon Web Services
 
(SDD416) Amazon EBS Deep Dive | AWS re:Invent 2014
(SDD416) Amazon EBS Deep Dive | AWS re:Invent 2014(SDD416) Amazon EBS Deep Dive | AWS re:Invent 2014
(SDD416) Amazon EBS Deep Dive | AWS re:Invent 2014Amazon Web Services
 

Destacado (9)

PostgreSQL: O melhor banco de dados Universo
PostgreSQL: O melhor banco de dados UniversoPostgreSQL: O melhor banco de dados Universo
PostgreSQL: O melhor banco de dados Universo
 
Curso de PostgreSQL: Um pouco Além dos Comandos
Curso de PostgreSQL: Um pouco Além dos ComandosCurso de PostgreSQL: Um pouco Além dos Comandos
Curso de PostgreSQL: Um pouco Além dos Comandos
 
Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0
Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0
Pgday Campinas 2015 - Uma visão do PPAS 9.4 e PEM 5.0
 
PGDay Campinas 2013 - Implementando o PostgreSQL de maneira escalável e com a...
PGDay Campinas 2013 - Implementando o PostgreSQL de maneira escalável e com a...PGDay Campinas 2013 - Implementando o PostgreSQL de maneira escalável e com a...
PGDay Campinas 2013 - Implementando o PostgreSQL de maneira escalável e com a...
 
PGDay Campinas 2013 - CASE: PostgreSQL no Tribunal de Justiça do Paraná
PGDay Campinas 2013 - CASE: PostgreSQL no Tribunal de Justiça do ParanáPGDay Campinas 2013 - CASE: PostgreSQL no Tribunal de Justiça do Paraná
PGDay Campinas 2013 - CASE: PostgreSQL no Tribunal de Justiça do Paraná
 
PGDay Campinas 2013 - Postgres XC @ Cloud
PGDay Campinas 2013 - Postgres XC @ CloudPGDay Campinas 2013 - Postgres XC @ Cloud
PGDay Campinas 2013 - Postgres XC @ Cloud
 
Maximizing EC2 and Elastic Block Store Disk Performance (STG302) | AWS re:Inv...
Maximizing EC2 and Elastic Block Store Disk Performance (STG302) | AWS re:Inv...Maximizing EC2 and Elastic Block Store Disk Performance (STG302) | AWS re:Inv...
Maximizing EC2 and Elastic Block Store Disk Performance (STG302) | AWS re:Inv...
 
PostgreSQL
PostgreSQLPostgreSQL
PostgreSQL
 
(SDD416) Amazon EBS Deep Dive | AWS re:Invent 2014
(SDD416) Amazon EBS Deep Dive | AWS re:Invent 2014(SDD416) Amazon EBS Deep Dive | AWS re:Invent 2014
(SDD416) Amazon EBS Deep Dive | AWS re:Invent 2014
 

Similar a Arquivos No Banco

24HOP Session - Database Administration Strategies
24HOP Session - Database Administration Strategies24HOP Session - Database Administration Strategies
24HOP Session - Database Administration StrategiesMurilo Miranda
 
Tcvb2 diogo mendes_sistemas operativos servidor_v1
Tcvb2 diogo mendes_sistemas operativos servidor_v1Tcvb2 diogo mendes_sistemas operativos servidor_v1
Tcvb2 diogo mendes_sistemas operativos servidor_v1diogomendes99
 
Redes de computadores módulo 3
Redes de computadores módulo 3Redes de computadores módulo 3
Redes de computadores módulo 3ruitavares998
 
Sistemas operativos servidor
Sistemas operativos servidorSistemas operativos servidor
Sistemas operativos servidorsimoesflavio
 
Sistemas operativos servidor
Sistemas operativos servidorSistemas operativos servidor
Sistemas operativos servidorAndré bogas
 
[24HOP] SQL Server em maquinas virtuais do Windows Azure
[24HOP] SQL Server em maquinas virtuais do Windows Azure[24HOP] SQL Server em maquinas virtuais do Windows Azure
[24HOP] SQL Server em maquinas virtuais do Windows AzureVitor Tomaz
 
Livro 1 conceitos básicos
Livro 1 conceitos básicosLivro 1 conceitos básicos
Livro 1 conceitos básicosJ M
 
Avaliação de escalabilidade e desempenho de um sistema de arquivos distribuíd...
Avaliação de escalabilidade e desempenho de um sistema de arquivos distribuíd...Avaliação de escalabilidade e desempenho de um sistema de arquivos distribuíd...
Avaliação de escalabilidade e desempenho de um sistema de arquivos distribuíd...João Pedro Leôncio
 
Apostila 2 conceitos de hardware e software
Apostila 2   conceitos de hardware e softwareApostila 2   conceitos de hardware e software
Apostila 2 conceitos de hardware e softwarePaulo Fonseca
 
Sistemas de Arquivos.pptx
Sistemas de Arquivos.pptxSistemas de Arquivos.pptx
Sistemas de Arquivos.pptxstenio medeiros
 
MEO Cloud - Python Lisbon Meetup
MEO Cloud - Python Lisbon MeetupMEO Cloud - Python Lisbon Meetup
MEO Cloud - Python Lisbon MeetupAndré Cruz
 
ADRL00 - Inicio Administração de Redes Linux Server
ADRL00 - Inicio Administração de Redes Linux ServerADRL00 - Inicio Administração de Redes Linux Server
ADRL00 - Inicio Administração de Redes Linux ServerSilvano Oliveira
 
Discos barramentos e portas de comunicação
Discos barramentos e portas de comunicaçãoDiscos barramentos e portas de comunicação
Discos barramentos e portas de comunicaçãosimoesflavio
 
Introdução a Informatica
Introdução a InformaticaIntrodução a Informatica
Introdução a InformaticaKeny51
 
IntroducaoInformaticanovoarquivo2222.ppt
IntroducaoInformaticanovoarquivo2222.pptIntroducaoInformaticanovoarquivo2222.ppt
IntroducaoInformaticanovoarquivo2222.pptLamarck4
 

Similar a Arquivos No Banco (20)

24HOP Session - Database Administration Strategies
24HOP Session - Database Administration Strategies24HOP Session - Database Administration Strategies
24HOP Session - Database Administration Strategies
 
Tcvb2 diogo mendes_sistemas operativos servidor_v1
Tcvb2 diogo mendes_sistemas operativos servidor_v1Tcvb2 diogo mendes_sistemas operativos servidor_v1
Tcvb2 diogo mendes_sistemas operativos servidor_v1
 
Aula 01 .pdf
Aula 01 .pdfAula 01 .pdf
Aula 01 .pdf
 
Redes de computadores módulo 3
Redes de computadores módulo 3Redes de computadores módulo 3
Redes de computadores módulo 3
 
Sistemas operativos servidor
Sistemas operativos servidorSistemas operativos servidor
Sistemas operativos servidor
 
Sistemas operativos servidor
Sistemas operativos servidorSistemas operativos servidor
Sistemas operativos servidor
 
[24HOP] SQL Server em maquinas virtuais do Windows Azure
[24HOP] SQL Server em maquinas virtuais do Windows Azure[24HOP] SQL Server em maquinas virtuais do Windows Azure
[24HOP] SQL Server em maquinas virtuais do Windows Azure
 
Livro 1 conceitos básicos
Livro 1 conceitos básicosLivro 1 conceitos básicos
Livro 1 conceitos básicos
 
Hardware
HardwareHardware
Hardware
 
Redes e Servidores
Redes e ServidoresRedes e Servidores
Redes e Servidores
 
Avaliação de escalabilidade e desempenho de um sistema de arquivos distribuíd...
Avaliação de escalabilidade e desempenho de um sistema de arquivos distribuíd...Avaliação de escalabilidade e desempenho de um sistema de arquivos distribuíd...
Avaliação de escalabilidade e desempenho de um sistema de arquivos distribuíd...
 
Apostila 2 conceitos de hardware e software
Apostila 2   conceitos de hardware e softwareApostila 2   conceitos de hardware e software
Apostila 2 conceitos de hardware e software
 
PostgreSQL Conceitos e aplicações
PostgreSQL  Conceitos e aplicaçõesPostgreSQL  Conceitos e aplicações
PostgreSQL Conceitos e aplicações
 
Sistemas de Arquivos.pptx
Sistemas de Arquivos.pptxSistemas de Arquivos.pptx
Sistemas de Arquivos.pptx
 
MEO Cloud - Python Lisbon Meetup
MEO Cloud - Python Lisbon MeetupMEO Cloud - Python Lisbon Meetup
MEO Cloud - Python Lisbon Meetup
 
ADRL00 - Inicio Administração de Redes Linux Server
ADRL00 - Inicio Administração de Redes Linux ServerADRL00 - Inicio Administração de Redes Linux Server
ADRL00 - Inicio Administração de Redes Linux Server
 
1106
11061106
1106
 
Discos barramentos e portas de comunicação
Discos barramentos e portas de comunicaçãoDiscos barramentos e portas de comunicação
Discos barramentos e portas de comunicação
 
Introdução a Informatica
Introdução a InformaticaIntrodução a Informatica
Introdução a Informatica
 
IntroducaoInformaticanovoarquivo2222.ppt
IntroducaoInformaticanovoarquivo2222.pptIntroducaoInformaticanovoarquivo2222.ppt
IntroducaoInformaticanovoarquivo2222.ppt
 

Más de Diogo Biazus

Más de Diogo Biazus (7)

Utilizando Rails e PostgreSQL
Utilizando Rails e PostgreSQLUtilizando Rails e PostgreSQL
Utilizando Rails e PostgreSQL
 
Hercules
HerculesHercules
Hercules
 
Collectd
CollectdCollectd
Collectd
 
Testes Unitarios Com PostgreSQL
Testes Unitarios Com PostgreSQLTestes Unitarios Com PostgreSQL
Testes Unitarios Com PostgreSQL
 
PostgreSQL Ha
PostgreSQL HaPostgreSQL Ha
PostgreSQL Ha
 
Minicurso PostgreSQL
Minicurso PostgreSQLMinicurso PostgreSQL
Minicurso PostgreSQL
 
Git
GitGit
Git
 

Arquivos No Banco

  • 1. Arquivos no banco o que fazer? Diogo Biazus <diogob em gmail.com>
  • 2. 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
  • 3. 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.
  • 4. 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.
  • 5. 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');
  • 6. Compatibilidade com cliente  LO:  Muitos: npgsql, PyGreS, JDBC, PDO, ...  Mas nem todos: psycopg2.  Usamos chamadas especiais:  lo_create  lo_write  lo_read
  • 7. Compatibilidade com cliente  Sistema de arquivos  Nenhum (se virem programadores)  NFS, SMB, HTTP existem para isso.  + trabalhoso.
  • 8. Até agora ...  Bytea 2 x LO 1 x SA 0
  • 9. 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.
  • 10. 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 ...
  • 11. 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.
  • 12. Bytea continua na frente  Bytea 4 x LO 2 x SA 0
  • 13. 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.
  • 14. Escala  Muito bonito, mas será que agüenta o tranco?
  • 15. 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.
  • 16. Escala  LO  Limite de 2 GB por arquivo.  Operações são orientadas a fluxo de dados.  Ótimo para arquivos muito grandes.
  • 17. 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.
  • 18. Os adversários se recuperam  Bytea 4 x LO 3 x SA 2
  • 19. 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
  • 20. 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
  • 21. 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.
  • 22. Performance Inserção Consulta Exclusão Bytea 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
  • 23. 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.
  • 24. 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.
  • 25. 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.
  • 26. E finalmente o vencedor ...  Considerando todos os aspectos, a resposta que todos aguardam é...
  • 27. Temos um empate senhoras e senhores  Quase enganei vocês, como sempre a resposta certa em TI é: depende.
  • 28. 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!
  • 29. 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.
  • 30. The End Muito Obrigado!