10. 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
11. 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
12. 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
28. 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
29.
30. Onde a normalização
atrapalhou
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
31. Onde a normalização
atrapalhou 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!
32. Onde a normalização
atrapalhou 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
33. 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!
36. 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
40. 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
41.
42. 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
43. Minicurso gratuito em 1 de novembro, 19h00:
OO sem Sotaque em Python
http://python.globalcode.com.br