Modelos ricos

4,057 views

Published on

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.

Published in: Technology
0 Comments
8 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
4,057
On SlideShare
0
From Embeds
0
Number of Embeds
1,010
Actions
Shares
0
Downloads
89
Comments
0
Likes
8
Embeds 0
No embeds

No notes for 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

    ×