SlideShare une entreprise Scribd logo
1  sur  43
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

Contenu connexe

Similaire à Modelos ricos

Poster Python Brasil [5] 2009
Poster Python Brasil [5] 2009Poster Python Brasil [5] 2009
Poster Python Brasil [5] 2009Timothy 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 2015SIBiUSP
 
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/
 
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 brazilEdilson 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 usoPedro Príncipe
 
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: BIREMEComunidadRedDes
 
Gt4, slide
Gt4, slideGt4, slide
Gt4, slideswcb1234
 
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 SeguraKleber 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íficasPortal 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
 
Apresentacao I3 G Eng. Ontologias
Apresentacao I3 G   Eng. OntologiasApresentacao I3 G   Eng. Ontologias
Apresentacao I3 G Eng. OntologiasWeb2 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çãoRenato Puga
 

Similaire à 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
 

Plus 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 descritoresLuciano Ramalho
 
Arduino: hardware hacking & coding dojo
Arduino: hardware hacking & coding dojoArduino: hardware hacking & coding dojo
Arduino: hardware hacking & coding dojoLuciano Ramalho
 
Iteraveis e geradores em Python
Iteraveis e geradores em PythonIteraveis e geradores em Python
Iteraveis e geradores em PythonLuciano Ramalho
 
Encapsulamento com Descritores em Python
Encapsulamento com Descritores em PythonEncapsulamento com Descritores em Python
Encapsulamento com Descritores em PythonLuciano Ramalho
 
Python: Iteraveis, geradores etc
Python: Iteraveis, geradores etcPython: Iteraveis, geradores etc
Python: Iteraveis, geradores etcLuciano Ramalho
 
Jython no JavaOne Latin America 2011
Jython no JavaOne Latin America 2011Jython no JavaOne Latin America 2011
Jython no JavaOne Latin America 2011Luciano 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 sotaqueLuciano Ramalho
 
Python, a arma secreta do Google
Python, a arma secreta do GooglePython, a arma secreta do Google
Python, a arma secreta do GoogleLuciano Ramalho
 
Alex Martelli's Python Design Patterns
Alex Martelli's Python Design PatternsAlex Martelli's Python Design Patterns
Alex Martelli's Python Design PatternsLuciano 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
 

Plus 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
 

Dernier

ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docxATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx2m Assessoria
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx2m Assessoria
 
Luís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdfLuís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdfLuisKitota
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx2m Assessoria
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx2m Assessoria
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsDanilo Pinotti
 
Programação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdfProgramação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdfSamaraLunas
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploDanilo Pinotti
 
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx2m Assessoria
 

Dernier (9)

ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docxATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 
Luís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdfLuís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdf
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 
Programação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdfProgramação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdf
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
 

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

Notes de l'éditeur

  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