Brnosql luciano ramalho-modelosricos
Upcoming SlideShare
Loading in...5
×
 

Brnosql luciano ramalho-modelosricos

on

  • 459 views

 

Statistics

Views

Total Views
459
Views on SlideShare
459
Embed Views
0

Actions

Likes
0
Downloads
4
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Brnosql luciano ramalho-modelosricos Brnosql luciano ramalho-modelosricos Presentation Transcript

    • Modelos RicosUm outro motivo para usar NoSQL Luciano Ramalho @luciano BIREME/OPAS/OMS Academia Python/Globalcode
    • 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 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çã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
    • 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!
    • 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
    • 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 aprendidaPersistê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