SlideShare uma empresa Scribd logo
Modelos Ricos
Um outro motivo para usar NoSQL




                                     Luciano Ramalho
                                             @luciano
                                  BIREME/OPAS/OMS
                           Academia Python/Globalcode
Modelo de dados LILACS


Visão
parcial!
Parte de um registro ISIS
Parte de um registro ISIS
Um contexto de uso
ISIS ainda é largamente utilizado em bibliotecas,
museus, arquivos públicos, escritórios de advocacia
BIREME/OPAS/OMS: convênio entre a Escola Paulista
de Medicina (Unifesp), Organização Panamericana da
Saúde e Ministério da Saúde do Brasil, com a missão
de organizar, indexar e disseminar a produção
científica da América Latina e do Caribe
BIREME usa ISIS há 25 anos, SOLR/Lucene há 5 anos
e CouchDB há alguns meses
A missão da nossa equipe

Renovar os métodos, práticas e as ferramentas de
desenvolvimento
Práticas ágeis
Ferramentas e métodos de trabalho Open Source
Primeiro passo: de PHP sem framework para Python
com Django
Projeto piloto
 OpenTrials
   sistema de registro de ensaios clínicos
     testes de medicamentos e procedimentos com
     seres humanos
 Registro Brasileiro de Ensaios Clínicos
   Financiado pelo Ministério da Saúde e OPAS
   Operado pela Fiocruz com suporte da BIREME
www.ensaiosclinicos.gov.br
Retrospectiva

No projeto piloto com Python e Django, optamos por
não inovar no banco de dados, usamos MySQL, que já
era conhecido da instituição
O ReBEC está em produção desde 2010
Ganhamos um ótimo contra-exemplo: a aplicação
OpentTrials ficaria muito mais simples usando um
modelos de dados não normalizado
Onde a normalização
atrapalhou
Traduções: para alguns campos, precisamos ter o
texto em n línguas
Mas nunca vamos querer acessar estes campos fora
do contexto do resto do registro principal, eles são de
fato parte integrante e inseparável dele
Não queremos que eles possam ser atualizados
indendentemente do registro principal
Onde a normalização
atrapalhou 2
Vários campos repetitivos viraram tabelas auxiliares
Versionamento
  Quando um registro (ou registro auxiliar) é atualizado,
  o registro inteiro (e seus registros auxliares) precisam
  ser revalidados pelos revisores (para verificar
  inconsistências) e re-publicados
  Mas o histórico não pode ser perdido!
Onde a normalização
atrapalhou 3
Auditoria: precisamos saber sempre que qualquer
dado de um registro (ou registros auxiliares) foi alterado
Jamais um registro de uma tabela auxiliar pode ser
atualizado independente do registro principal
  Ex: o contato científico que foi registrado
  originalmente nunca poderá ser esquecido
  A descrição da metodologia de intervenção é como
  um contrato do pesquisador com a sociedade
Como resolvemos?
Criamos uma app chamada django-fossil (no Github)
O django-fossil cria um fósil de cada registro publicado
  Um fóssil é um registro desnormalizado,
  “petrificado”, imutável
  Usa como chave primária uma assinatura digital
  (hash) do conteúdo
  Tem uma chave estrangeira que aponta para a
  versão anterior
                                 Solução inspirada no
                                 CouchDB e no GIT!
Isto é um fóssil!
Lição aprendida


Persistência
   poliglota
Persistência poliglota

 Usar um BD relacional para aproveitar o seu
 conhecimento e ferramental existente
 Integrar um BD NoSQL apropriado assim que o
 modelo relacional deixa de ser parte da solução e
 começa a ser parte do problema
Referências: elas existem!




A palavra-chave é: semistructured (ou semi-structured)
Document databases
Bases de dados documentais
  ISIS é um exemplo antigo dessa categoria
Modelo de dados semiestruturado, parecido com
JSON (mais simples que XML)
O esquema é armazenado junto com cada registro
Exemplos modernos e Open Source:
  CouchDB e MongoDB
Para o OpenTrials/ReBEC
A melhor solução é o CouchDB
  Mas o MongoDB também seria apropriado, com
  todas as chaves de durabilidade ligadas
Motivo fundamental: MVCC (multi-version concurrency
control), garante que a aplicação não consegue
sobrescrever acidentalmente um registro
  Para fazer update, é obrigatório informar o hash da
  versão anterior, e assim provar que você não está
  fazendo uma atualização com dados vencidos
                                        sem saber
Minicurso gratuito em 1 de novembro, 19h00:
        OO sem Sotaque em Python




    http://python.globalcode.com.br

Mais conteúdo relacionado

Semelhante a Modelos ricos

Pesquisa Reproduzivel
Pesquisa ReproduzivelPesquisa Reproduzivel
Pesquisa Reproduzivel
João Pedro Albino
 
Poster Python Brasil [5] 2009
Poster Python Brasil [5] 2009Poster Python Brasil [5] 2009
Poster Python Brasil [5] 2009
Timothy Cook
 
Sistemas de recuperação de informação
Sistemas de recuperação de informação Sistemas de recuperação de informação
Sistemas de recuperação de informação
Célia Dias
 
Visão geral sobre o SIBiUSP 2015
Visão geral sobre o SIBiUSP 2015Visão geral sobre o SIBiUSP 2015
Visão geral sobre o SIBiUSP 2015
SIBiUSP
 
Sessão 06 de 06 - Criação de registros Multimídia (vídeos, imagens e apresent...
Sessão 06 de 06 - Criação de registros Multimídia (vídeos, imagens e apresent...Sessão 06 de 06 - Criação de registros Multimídia (vídeos, imagens e apresent...
Sessão 06 de 06 - Criação de registros Multimídia (vídeos, imagens e apresent...
http://bvsalud.org/
 
OpenEHT e ISO 13.606
OpenEHT e ISO 13.606OpenEHT e ISO 13.606
OpenEHT e ISO 13.606
Isaias Oliveira
 
Sessão 04 de 06- Metodologia LILACS: criação de registros bibliográficos - M...
 Sessão 04 de 06- Metodologia LILACS: criação de registros bibliográficos - M... Sessão 04 de 06- Metodologia LILACS: criação de registros bibliográficos - M...
Sessão 04 de 06- Metodologia LILACS: criação de registros bibliográficos - M...
http://bvsalud.org/
 
Acesso Aberto e preprints: alguns aspectos
Acesso Aberto e preprints: alguns aspectos Acesso Aberto e preprints: alguns aspectos
Acesso Aberto e preprints: alguns aspectos
Edilson Damasio, PhD
 
SISTEMAS DE IDENTIFICAÇÃO DE PLÁGIO = Similarity plagiarism systems UEPG brazil
SISTEMAS DE IDENTIFICAÇÃO DE PLÁGIO = Similarity plagiarism systems UEPG brazilSISTEMAS DE IDENTIFICAÇÃO DE PLÁGIO = Similarity plagiarism systems UEPG brazil
SISTEMAS DE IDENTIFICAÇÃO DE PLÁGIO = Similarity plagiarism systems UEPG brazil
Edilson Damasio, PhD
 
Sistemas de informação Open Source: reflexões críticas e casos de uso
Sistemas de informação Open Source: reflexões críticas e casos de usoSistemas de informação Open Source: reflexões críticas e casos de uso
Sistemas de informação Open Source: reflexões críticas e casos de uso
Pedro Príncipe
 
Gestão de dados de investigação da recolha até ao depósito: Uma abordagem bas...
Gestão de dados de investigação da recolha até ao depósito: Uma abordagem bas...Gestão de dados de investigação da recolha até ao depósito: Uma abordagem bas...
Gestão de dados de investigação da recolha até ao depósito: Uma abordagem bas...
Conferência Luso-Brasileira de Ciência Aberta
 
Oficina 1 Confoa 2013 - Parte 3 - Interoperabilidade e repositórios - josé c...
Oficina 1  Confoa 2013 - Parte 3 - Interoperabilidade e repositórios - josé c...Oficina 1  Confoa 2013 - Parte 3 - Interoperabilidade e repositórios - josé c...
Oficina 1 Confoa 2013 - Parte 3 - Interoperabilidade e repositórios - josé c...
Conferência Luso-Brasileira de Ciência Aberta
 
Oficina online para compartilhamento de experiências no uso do DSPACE: BIREME
Oficina online para compartilhamento de experiências no uso do DSPACE: BIREMEOficina online para compartilhamento de experiências no uso do DSPACE: BIREME
Oficina online para compartilhamento de experiências no uso do DSPACE: BIREME
ComunidadRedDes
 
Gt4, slide
Gt4, slideGt4, slide
Gt4, slide
swcb1234
 
PHP 5 de Forma Correta e Segura
PHP 5 de Forma Correta e SeguraPHP 5 de Forma Correta e Segura
PHP 5 de Forma Correta e Segura
Kleber Silva
 
Tendências SciELO para publicações científicas
Tendências SciELO para publicações científicasTendências SciELO para publicações científicas
Tendências SciELO para publicações científicas
Portal de Periódicos UFSC
 
Ontologias - Para quê e para quem?
Ontologias - Para quê e para quem?Ontologias - Para quê e para quem?
Ontologias - Para quê e para quem?
Cristiane Mendes
 
Big Data, JVM e Redes Sociais
Big Data, JVM e Redes SociaisBig Data, JVM e Redes Sociais
Big Data, JVM e Redes Sociais
José Renato Pequeno
 
Apresentacao I3 G Eng. Ontologias
Apresentacao I3 G   Eng. OntologiasApresentacao I3 G   Eng. Ontologias
Apresentacao I3 G Eng. Ontologias
Web2 Brasil
 
Bioinformática - O início a Evolução
Bioinformática - O início a EvoluçãoBioinformática - O início a Evolução
Bioinformática - O início a Evolução
Renato Puga
 

Semelhante a Modelos ricos (20)

Pesquisa Reproduzivel
Pesquisa ReproduzivelPesquisa Reproduzivel
Pesquisa Reproduzivel
 
Poster Python Brasil [5] 2009
Poster Python Brasil [5] 2009Poster Python Brasil [5] 2009
Poster Python Brasil [5] 2009
 
Sistemas de recuperação de informação
Sistemas de recuperação de informação Sistemas de recuperação de informação
Sistemas de recuperação de informação
 
Visão geral sobre o SIBiUSP 2015
Visão geral sobre o SIBiUSP 2015Visão geral sobre o SIBiUSP 2015
Visão geral sobre o SIBiUSP 2015
 
Sessão 06 de 06 - Criação de registros Multimídia (vídeos, imagens e apresent...
Sessão 06 de 06 - Criação de registros Multimídia (vídeos, imagens e apresent...Sessão 06 de 06 - Criação de registros Multimídia (vídeos, imagens e apresent...
Sessão 06 de 06 - Criação de registros Multimídia (vídeos, imagens e apresent...
 
OpenEHT e ISO 13.606
OpenEHT e ISO 13.606OpenEHT e ISO 13.606
OpenEHT e ISO 13.606
 
Sessão 04 de 06- Metodologia LILACS: criação de registros bibliográficos - M...
 Sessão 04 de 06- Metodologia LILACS: criação de registros bibliográficos - M... Sessão 04 de 06- Metodologia LILACS: criação de registros bibliográficos - M...
Sessão 04 de 06- Metodologia LILACS: criação de registros bibliográficos - M...
 
Acesso Aberto e preprints: alguns aspectos
Acesso Aberto e preprints: alguns aspectos Acesso Aberto e preprints: alguns aspectos
Acesso Aberto e preprints: alguns aspectos
 
SISTEMAS DE IDENTIFICAÇÃO DE PLÁGIO = Similarity plagiarism systems UEPG brazil
SISTEMAS DE IDENTIFICAÇÃO DE PLÁGIO = Similarity plagiarism systems UEPG brazilSISTEMAS DE IDENTIFICAÇÃO DE PLÁGIO = Similarity plagiarism systems UEPG brazil
SISTEMAS DE IDENTIFICAÇÃO DE PLÁGIO = Similarity plagiarism systems UEPG brazil
 
Sistemas de informação Open Source: reflexões críticas e casos de uso
Sistemas de informação Open Source: reflexões críticas e casos de usoSistemas de informação Open Source: reflexões críticas e casos de uso
Sistemas de informação Open Source: reflexões críticas e casos de uso
 
Gestão de dados de investigação da recolha até ao depósito: Uma abordagem bas...
Gestão de dados de investigação da recolha até ao depósito: Uma abordagem bas...Gestão de dados de investigação da recolha até ao depósito: Uma abordagem bas...
Gestão de dados de investigação da recolha até ao depósito: Uma abordagem bas...
 
Oficina 1 Confoa 2013 - Parte 3 - Interoperabilidade e repositórios - josé c...
Oficina 1  Confoa 2013 - Parte 3 - Interoperabilidade e repositórios - josé c...Oficina 1  Confoa 2013 - Parte 3 - Interoperabilidade e repositórios - josé c...
Oficina 1 Confoa 2013 - Parte 3 - Interoperabilidade e repositórios - josé c...
 
Oficina online para compartilhamento de experiências no uso do DSPACE: BIREME
Oficina online para compartilhamento de experiências no uso do DSPACE: BIREMEOficina online para compartilhamento de experiências no uso do DSPACE: BIREME
Oficina online para compartilhamento de experiências no uso do DSPACE: BIREME
 
Gt4, slide
Gt4, slideGt4, slide
Gt4, slide
 
PHP 5 de Forma Correta e Segura
PHP 5 de Forma Correta e SeguraPHP 5 de Forma Correta e Segura
PHP 5 de Forma Correta e Segura
 
Tendências SciELO para publicações científicas
Tendências SciELO para publicações científicasTendências SciELO para publicações científicas
Tendências SciELO para publicações científicas
 
Ontologias - Para quê e para quem?
Ontologias - Para quê e para quem?Ontologias - Para quê e para quem?
Ontologias - Para quê e para quem?
 
Big Data, JVM e Redes Sociais
Big Data, JVM e Redes SociaisBig Data, JVM e Redes Sociais
Big Data, JVM e Redes Sociais
 
Apresentacao I3 G Eng. Ontologias
Apresentacao I3 G   Eng. OntologiasApresentacao I3 G   Eng. Ontologias
Apresentacao I3 G Eng. Ontologias
 
Bioinformática - O início a Evolução
Bioinformática - O início a EvoluçãoBioinformática - O início a Evolução
Bioinformática - O início a Evolução
 

Mais de Luciano Ramalho

Orientação a objetos em Python (compacto)
Orientação a objetos em Python (compacto)Orientação a objetos em Python (compacto)
Orientação a objetos em Python (compacto)
Luciano Ramalho
 
Encapsulamento com descritores
Encapsulamento com descritoresEncapsulamento com descritores
Encapsulamento com descritores
Luciano Ramalho
 
Iteraveis e geradores
Iteraveis e geradoresIteraveis e geradores
Iteraveis e geradores
Luciano Ramalho
 
Arduino: hardware hacking & coding dojo
Arduino: hardware hacking & coding dojoArduino: hardware hacking & coding dojo
Arduino: hardware hacking & coding dojo
Luciano Ramalho
 
Iteraveis e geradores em Python
Iteraveis e geradores em PythonIteraveis e geradores em Python
Iteraveis e geradores em Python
Luciano Ramalho
 
Encapsulamento com Descritores em Python
Encapsulamento com Descritores em PythonEncapsulamento com Descritores em Python
Encapsulamento com Descritores em Python
Luciano Ramalho
 
Dojo com Processing
Dojo com ProcessingDojo com Processing
Dojo com Processing
Luciano Ramalho
 
Dojo com Arduino
Dojo com ArduinoDojo com Arduino
Dojo com Arduino
Luciano Ramalho
 
Python: Iteraveis, geradores etc
Python: Iteraveis, geradores etcPython: Iteraveis, geradores etc
Python: Iteraveis, geradores etc
Luciano Ramalho
 
Open Library no Mongodb
Open Library no MongodbOpen Library no Mongodb
Open Library no Mongodb
Luciano Ramalho
 
Jython no JavaOne Latin America 2011
Jython no JavaOne Latin America 2011Jython no JavaOne Latin America 2011
Jython no JavaOne Latin America 2011
Luciano Ramalho
 
Python para quem sabe Python (aula 2)
Python para quem sabe Python (aula 2)Python para quem sabe Python (aula 2)
Python para quem sabe Python (aula 2)
Luciano Ramalho
 
OO em Python sem sotaque
OO em Python sem sotaqueOO em Python sem sotaque
OO em Python sem sotaque
Luciano Ramalho
 
Python, a arma secreta do Google
Python, a arma secreta do GooglePython, a arma secreta do Google
Python, a arma secreta do Google
Luciano Ramalho
 
Ensinando OO com Python
Ensinando OO com PythonEnsinando OO com Python
Ensinando OO com Python
Luciano Ramalho
 
Alex Martelli's Python Design Patterns
Alex Martelli's Python Design PatternsAlex Martelli's Python Design Patterns
Alex Martelli's Python Design Patterns
Luciano Ramalho
 
Dspace em 5 minutos
Dspace em 5 minutosDspace em 5 minutos
Dspace em 5 minutos
Luciano Ramalho
 
JavaScript agora é sério (TDC 2011)
JavaScript agora é sério (TDC 2011)JavaScript agora é sério (TDC 2011)
JavaScript agora é sério (TDC 2011)
Luciano Ramalho
 
JavaScript agora é sério (FISL 2011)
JavaScript agora é sério (FISL 2011)JavaScript agora é sério (FISL 2011)
JavaScript agora é sério (FISL 2011)
Luciano Ramalho
 
Wiki sa-v2
Wiki sa-v2Wiki sa-v2
Wiki sa-v2
Luciano Ramalho
 

Mais de Luciano Ramalho (20)

Orientação a objetos em Python (compacto)
Orientação a objetos em Python (compacto)Orientação a objetos em Python (compacto)
Orientação a objetos em Python (compacto)
 
Encapsulamento com descritores
Encapsulamento com descritoresEncapsulamento com descritores
Encapsulamento com descritores
 
Iteraveis e geradores
Iteraveis e geradoresIteraveis e geradores
Iteraveis e geradores
 
Arduino: hardware hacking & coding dojo
Arduino: hardware hacking & coding dojoArduino: hardware hacking & coding dojo
Arduino: hardware hacking & coding dojo
 
Iteraveis e geradores em Python
Iteraveis e geradores em PythonIteraveis e geradores em Python
Iteraveis e geradores em Python
 
Encapsulamento com Descritores em Python
Encapsulamento com Descritores em PythonEncapsulamento com Descritores em Python
Encapsulamento com Descritores em Python
 
Dojo com Processing
Dojo com ProcessingDojo com Processing
Dojo com Processing
 
Dojo com Arduino
Dojo com ArduinoDojo com Arduino
Dojo com Arduino
 
Python: Iteraveis, geradores etc
Python: Iteraveis, geradores etcPython: Iteraveis, geradores etc
Python: Iteraveis, geradores etc
 
Open Library no Mongodb
Open Library no MongodbOpen Library no Mongodb
Open Library no Mongodb
 
Jython no JavaOne Latin America 2011
Jython no JavaOne Latin America 2011Jython no JavaOne Latin America 2011
Jython no JavaOne Latin America 2011
 
Python para quem sabe Python (aula 2)
Python para quem sabe Python (aula 2)Python para quem sabe Python (aula 2)
Python para quem sabe Python (aula 2)
 
OO em Python sem sotaque
OO em Python sem sotaqueOO em Python sem sotaque
OO em Python sem sotaque
 
Python, a arma secreta do Google
Python, a arma secreta do GooglePython, a arma secreta do Google
Python, a arma secreta do Google
 
Ensinando OO com Python
Ensinando OO com PythonEnsinando OO com Python
Ensinando OO com Python
 
Alex Martelli's Python Design Patterns
Alex Martelli's Python Design PatternsAlex Martelli's Python Design Patterns
Alex Martelli's Python Design Patterns
 
Dspace em 5 minutos
Dspace em 5 minutosDspace em 5 minutos
Dspace em 5 minutos
 
JavaScript agora é sério (TDC 2011)
JavaScript agora é sério (TDC 2011)JavaScript agora é sério (TDC 2011)
JavaScript agora é sério (TDC 2011)
 
JavaScript agora é sério (FISL 2011)
JavaScript agora é sério (FISL 2011)JavaScript agora é sério (FISL 2011)
JavaScript agora é sério (FISL 2011)
 
Wiki sa-v2
Wiki sa-v2Wiki sa-v2
Wiki sa-v2
 

Último

Guardioes Digitais em ação: Como criar senhas seguras!
Guardioes Digitais em ação: Como criar senhas seguras!Guardioes Digitais em ação: Como criar senhas seguras!
Guardioes Digitais em ação: Como criar senhas seguras!
Jonathas Muniz
 
Escola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdf
Escola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdfEscola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdf
Escola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdf
Gabriel de Mattos Faustino
 
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
Faga1939
 
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdfTOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
Momento da Informática
 
História da Rádio- 1936-1970 século XIX .2.pptx
História da Rádio- 1936-1970 século XIX   .2.pptxHistória da Rádio- 1936-1970 século XIX   .2.pptx
História da Rádio- 1936-1970 século XIX .2.pptx
TomasSousa7
 
Logica de Progamacao - Aula (1) (1).pptx
Logica de Progamacao - Aula (1) (1).pptxLogica de Progamacao - Aula (1) (1).pptx
Logica de Progamacao - Aula (1) (1).pptx
Momento da Informática
 
Segurança Digital Pessoal e Boas Práticas
Segurança Digital Pessoal e Boas PráticasSegurança Digital Pessoal e Boas Práticas
Segurança Digital Pessoal e Boas Práticas
Danilo Pinotti
 

Último (7)

Guardioes Digitais em ação: Como criar senhas seguras!
Guardioes Digitais em ação: Como criar senhas seguras!Guardioes Digitais em ação: Como criar senhas seguras!
Guardioes Digitais em ação: Como criar senhas seguras!
 
Escola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdf
Escola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdfEscola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdf
Escola Virtual - Fundação Bradesco - ITIL - Gabriel Faustino.pdf
 
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
PRODUÇÃO E CONSUMO DE ENERGIA DA PRÉ-HISTÓRIA À ERA CONTEMPORÂNEA E SUA EVOLU...
 
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdfTOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
TOO - TÉCNICAS DE ORIENTAÇÃO A OBJETOS aula 1.pdf
 
História da Rádio- 1936-1970 século XIX .2.pptx
História da Rádio- 1936-1970 século XIX   .2.pptxHistória da Rádio- 1936-1970 século XIX   .2.pptx
História da Rádio- 1936-1970 século XIX .2.pptx
 
Logica de Progamacao - Aula (1) (1).pptx
Logica de Progamacao - Aula (1) (1).pptxLogica de Progamacao - Aula (1) (1).pptx
Logica de Progamacao - Aula (1) (1).pptx
 
Segurança Digital Pessoal e Boas Práticas
Segurança Digital Pessoal e Boas PráticasSegurança Digital Pessoal e Boas Práticas
Segurança Digital Pessoal e Boas Práticas
 

Modelos ricos

  • 1. Modelos Ricos Um outro motivo para usar NoSQL Luciano Ramalho @luciano BIREME/OPAS/OMS Academia Python/Globalcode
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7. Modelo de dados LILACS Visão parcial!
  • 8. Parte de um registro ISIS
  • 9. Parte de um registro ISIS
  • 10. Um contexto de uso ISIS ainda é largamente utilizado em bibliotecas, museus, arquivos públicos, escritórios de advocacia BIREME/OPAS/OMS: convênio entre a Escola Paulista de Medicina (Unifesp), Organização Panamericana da Saúde e Ministério da Saúde do Brasil, com a missão de organizar, indexar e disseminar a produção científica da América Latina e do Caribe BIREME usa ISIS há 25 anos, SOLR/Lucene há 5 anos e CouchDB há alguns meses
  • 11. A missão da nossa equipe Renovar os métodos, práticas e as ferramentas de desenvolvimento Práticas ágeis Ferramentas e métodos de trabalho Open Source Primeiro passo: de PHP sem framework para Python com Django
  • 12. Projeto piloto OpenTrials sistema de registro de ensaios clínicos testes de medicamentos e procedimentos com seres humanos Registro Brasileiro de Ensaios Clínicos Financiado pelo Ministério da Saúde e OPAS Operado pela Fiocruz com suporte da BIREME
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28. Retrospectiva No projeto piloto com Python e Django, optamos por não inovar no banco de dados, usamos MySQL, que já era conhecido da instituição O ReBEC está em produção desde 2010 Ganhamos um ótimo contra-exemplo: a aplicação OpentTrials ficaria muito mais simples usando um modelos de dados não normalizado
  • 29.
  • 30. Onde a normalização atrapalhou Traduções: para alguns campos, precisamos ter o texto em n línguas Mas nunca vamos querer acessar estes campos fora do contexto do resto do registro principal, eles são de fato parte integrante e inseparável dele Não queremos que eles possam ser atualizados indendentemente do registro principal
  • 31. Onde a normalização atrapalhou 2 Vários campos repetitivos viraram tabelas auxiliares Versionamento Quando um registro (ou registro auxiliar) é atualizado, o registro inteiro (e seus registros auxliares) precisam ser revalidados pelos revisores (para verificar inconsistências) e re-publicados Mas o histórico não pode ser perdido!
  • 32. Onde a normalização atrapalhou 3 Auditoria: precisamos saber sempre que qualquer dado de um registro (ou registros auxiliares) foi alterado Jamais um registro de uma tabela auxiliar pode ser atualizado independente do registro principal Ex: o contato científico que foi registrado originalmente nunca poderá ser esquecido A descrição da metodologia de intervenção é como um contrato do pesquisador com a sociedade
  • 33. Como resolvemos? Criamos uma app chamada django-fossil (no Github) O django-fossil cria um fósil de cada registro publicado Um fóssil é um registro desnormalizado, “petrificado”, imutável Usa como chave primária uma assinatura digital (hash) do conteúdo Tem uma chave estrangeira que aponta para a versão anterior Solução inspirada no CouchDB e no GIT!
  • 34. Isto é um fóssil!
  • 36. Persistência poliglota Usar um BD relacional para aproveitar o seu conhecimento e ferramental existente Integrar um BD NoSQL apropriado assim que o modelo relacional deixa de ser parte da solução e começa a ser parte do problema
  • 37. Referências: elas existem! A palavra-chave é: semistructured (ou semi-structured)
  • 38.
  • 39.
  • 40. Document databases Bases de dados documentais ISIS é um exemplo antigo dessa categoria Modelo de dados semiestruturado, parecido com JSON (mais simples que XML) O esquema é armazenado junto com cada registro Exemplos modernos e Open Source: CouchDB e MongoDB
  • 41.
  • 42. Para o OpenTrials/ReBEC A melhor solução é o CouchDB Mas o MongoDB também seria apropriado, com todas as chaves de durabilidade ligadas Motivo fundamental: MVCC (multi-version concurrency control), garante que a aplicação não consegue sobrescrever acidentalmente um registro Para fazer update, é obrigatório informar o hash da versão anterior, e assim provar que você não está fazendo uma atualização com dados vencidos sem saber
  • 43. Minicurso gratuito em 1 de novembro, 19h00: OO sem Sotaque em Python http://python.globalcode.com.br

Notas do Editor

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n
  29. \n
  30. \n
  31. \n
  32. \n
  33. \n
  34. \n
  35. \n
  36. \n
  37. \n
  38. \n
  39. \n
  40. \n
  41. \n
  42. \n
  43. \n