brnosql luciano ramalho-modelosricos

Post on 05-Jun-2015

237 Views

Category:

Documents

1 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Modelos RicosUm outro motivo para usar NoSQL

Luciano Ramalho@luciano

BIREME/OPAS/OMSAcademia Python/Globalcode

Modelo de dados LILACS

Visãoparcial!

Parte de um registro ISIS

Parte de um registro ISIS

Um contexto de usoISIS ainda é largamente utilizado em bibliotecas,museus, arquivos públicos, escritórios de advocacia

BIREME/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 Caribe

BIREME usa ISIS há 25 anos, SOLR/Lucene há 5 anose CouchDB há alguns meses

A missão da nossa equipe

Renovar os métodos, práticas e as ferramentas dedesenvolvimento

Práticas ágeis

Ferramentas e métodos de trabalho Open Source

Primeiro passo: de PHP sem framework para Pythoncom Django

Projeto pilotoOpenTrials

sistema de registro de ensaios clínicos

testes de medicamentos e procedimentos comseres 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 pornã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çãoOpentTrials ficaria muito mais simples usando ummodelos de dados não normalizado

Onde a normalizaçãoatrapalhou

Traduções: para alguns campos, precisamos ter otexto em n línguas

Mas nunca vamos querer acessar estes campos forado contexto do resto do registro principal, eles são defato parte integrante e inseparável dele

Não queremos que eles possam ser atualizadosindendentemente 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 registrosauxliares) 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 qualquerdado de um registro (ou registros auxiliares) foi alterado

Jamais um registro de uma tabela auxiliar pode seratualizado independente do registro principal

Ex: o contato científico que foi registradooriginalmente nunca poderá ser esquecido

A descrição da metodologia de intervenção é comoum 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 aversão anterior

Solução inspirada noCouchDB e no GIT!

Isto é um fóssil!

Lição aprendida

Persistênciapoliglota

Persistência poliglota

Usar um BD relacional para aproveitar o seuconhecimento e ferramental existente

Integrar um BD NoSQL apropriado assim que omodelo relacional deixa de ser parte da solução ecomeç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 comJSON (mais simples que XML)

O esquema é armazenado junto com cada registro

Exemplos modernos e Open Source:

CouchDB e MongoDB

Para o OpenTrials/ReBECA melhor solução é o CouchDB

Mas o MongoDB também seria apropriado, comtodas as chaves de durabilidade ligadas

Motivo fundamental: MVCC (multi-version concurrencycontrol), garante que a aplicação não conseguesobrescrever acidentalmente um registro

Para fazer update, é obrigatório informar o hash daversão anterior, e assim provar que você não estáfazendo uma atualização com dados vencidos sem saber

http://python.globalcode.com.br

Minicurso gratuito em 1 de novembro, 19h00:OO sem Sotaque em Python

top related