Modelos ricos

4.065 visualizações

Publicada em

Um outro motivo para usar NoSQL: apresentação de 20 minutos feita no 2º Encontro NoSQL Brasil (no:sql(br/v2) em 21/10/2011.

Publicada em: Tecnologia
0 comentários
8 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
4.065
No SlideShare
0
A partir de incorporações
0
Número de incorporações
1.011
Ações
Compartilhamentos
0
Downloads
89
Comentários
0
Gostaram
8
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • Modelos ricos

    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 usoISIS ainda é largamente utilizado em bibliotecas,museus, arquivos públicos, escritórios de advocaciaBIREME/OPAS/OMS: convênio entre a Escola Paulistade Medicina (Unifesp), Organização Panamericana daSaúde e Ministério da Saúde do Brasil, com a missãode organizar, indexar e disseminar a produçãocientífica da América Latina e do CaribeBIREME usa ISIS há 25 anos, SOLR/Lucene há 5 anose CouchDB há alguns meses
    6. 6. A missão da nossa equipeRenovar os métodos, práticas e as ferramentas dedesenvolvimentoPráticas ágeisFerramentas e métodos de trabalho Open SourcePrimeiro passo: de PHP sem framework para Pythoncom 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. RetrospectivaNo projeto piloto com Python e Django, optamos pornão inovar no banco de dados, usamos MySQL, que jáera conhecido da instituiçãoO ReBEC está em produção desde 2010Ganhamos um ótimo contra-exemplo: a aplicaçãoOpentTrials ficaria muito mais simples usando ummodelos de dados não normalizado
    10. 10. Onde a normalizaçãoatrapalhouTraduções: para alguns campos, precisamos ter otexto em n línguasMas nunca vamos querer acessar estes campos forado contexto do resto do registro principal, eles são defato parte integrante e inseparável deleNão queremos que eles possam ser atualizadosindendentemente do registro principal
    11. 11. Onde a normalizaçãoatrapalhou 2Vários campos repetitivos viraram tabelas auxiliaresVersionamento 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 3Auditoria: precisamos saber sempre que qualquerdado de um registro (ou registros auxiliares) foi alteradoJamais um registro de uma tabela auxiliar pode seratualizado 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 databasesBases de dados documentais ISIS é um exemplo antigo dessa categoriaModelo de dados semiestruturado, parecido comJSON (mais simples que XML)O esquema é armazenado junto com cada registroExemplos modernos e Open Source: CouchDB e MongoDB
    19. 19. Para o OpenTrials/ReBECA melhor solução é o CouchDB Mas o MongoDB também seria apropriado, com todas as chaves de durabilidade ligadasMotivo fundamental: MVCC (multi-version concurrencycontrol), garante que a aplicação não conseguesobrescrever 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

    ×