Modelos RicosUm outro motivo para usar NoSQL                                     Luciano Ramalho                          ...
Modelo de dados LILACSVisãoparcial!
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 advoc...
A missão da nossa equipe•   Renovar os métodos, práticas e as ferramentas de    desenvolvimento•   Práticas ágeis•   Ferra...
Projeto piloto•   OpenTrials    •   sistema de registro de ensaios clínicos        •   testes de medicamentos e procedimen...
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á ...
Onde a normalizaçãoatrapalhou•   Traduções: para alguns campos, precisamos ter o    texto em n línguas•    Mas nunca vamos...
Onde a normalizaçãoatrapalhou 2•   Vários campos repetitivos viraram tabelas auxiliares•   Versionamento    •    Quando um...
Onde a normalizaçãoatrapalhou 3•   Auditoria: precisamos saber sempre que qualquer    dado de um registro (ou registros au...
Como resolvemos?•   Criamos uma app chamada django-fossil (no Github)•   O django-fossil cria um fósil de cada registro pu...
Isto é um fóssil!
Lição aprendidaPersistência   poliglota
Persistência poliglota•   Usar um BD relacional para aproveitar o seu    conhecimento e ferramental existente•   Integrar ...
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 semies...
Para o OpenTrials/ReBEC•   A melhor solução é o CouchDB    •   Mas o MongoDB também seria apropriado, com        todas as ...
Minicurso gratuito em 1 de novembro, 19h00:        OO sem Sotaque em Python    http://python.globalcode.com.br
Brnosql luciano ramalho-modelosricos
Brnosql luciano ramalho-modelosricos
Brnosql luciano ramalho-modelosricos
Brnosql luciano ramalho-modelosricos
Brnosql luciano ramalho-modelosricos
Brnosql luciano ramalho-modelosricos
Brnosql luciano ramalho-modelosricos
Brnosql luciano ramalho-modelosricos
Brnosql luciano ramalho-modelosricos
Brnosql luciano ramalho-modelosricos
Brnosql luciano ramalho-modelosricos
Brnosql luciano ramalho-modelosricos
Brnosql luciano ramalho-modelosricos
Brnosql luciano ramalho-modelosricos
Brnosql luciano ramalho-modelosricos
Brnosql luciano ramalho-modelosricos
Brnosql luciano ramalho-modelosricos
Brnosql luciano ramalho-modelosricos
Brnosql luciano ramalho-modelosricos
Brnosql luciano ramalho-modelosricos
Brnosql luciano ramalho-modelosricos
Brnosql luciano ramalho-modelosricos
Brnosql luciano ramalho-modelosricos
Próximos SlideShares
Carregando em…5
×

Brnosql luciano ramalho-modelosricos

558 visualizações

Publicada em

0 comentários
0 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
558
No SlideShare
0
A partir de incorporações
0
Número de incorporações
2
Ações
Compartilhamentos
0
Downloads
5
Comentários
0
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Brnosql luciano ramalho-modelosricos

  1. 1. Modelos RicosUm outro motivo para usar NoSQL Luciano Ramalho @luciano BIREME/OPAS/OMS Academia Python/Globalcode
  2. 2. Modelo de dados LILACSVisãoparcial!
  3. 3. Parte de um registro ISIS
  4. 4. Parte de um registro ISIS
  5. 5. 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
  6. 6. 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
  7. 7. 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
  8. 8. www.ensaiosclinicos.gov.br
  9. 9. 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
  10. 10. Onde a normalizaçãoatrapalhou• 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
  11. 11. Onde a normalizaçãoatrapalhou 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!
  12. 12. Onde a normalizaçãoatrapalhou 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
  13. 13. 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!
  14. 14. Isto é um fóssil!
  15. 15. Lição aprendidaPersistência poliglota
  16. 16. 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
  17. 17. Referências: elas existem!A palavra-chave é: semistructured (ou semi-structured)
  18. 18. 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
  19. 19. 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
  20. 20. Minicurso gratuito em 1 de novembro, 19h00: OO sem Sotaque em Python http://python.globalcode.com.br

×