SlideShare uma empresa Scribd logo
1 de 35
Baixar para ler offline
NoSQL na 
          BIREME/OPAS/OMS
                  20 anos de experiência




Luciano Ramalho
BIREME/OPAS/OMS
Invasões bárbaras
• O modelo relacional normalizado (MRN) 
  reinava praticamente incontestável
• Em alguns nichos, usuários de bancos de 
  dados NoSQL resistiam (ex. ISIS, Adabas, 
  Mumps...)
• Grandes usuários de NoSQL saíram do 
  armário (Google, Amazon, Facebook...)
• Vários bancos NoSQL novos sendo  
  lançados
Alguns produtos recentes
• ZODB
• Apache CouchDB
• MongoDB
• Hadoop Hbase
• ThruDB
                   • Google Datastore
• Redis
                   • Amazon SimpleDB
• Hypertable
                   • Apstrata
• Riak
Uma aplicação: LILACS
• LILACS: Literatura Latinoamericana y del 
  Caribe en Ciencias de la Salud
• Catalogação cooperativa de artigos 
  científicos nos países de origem
• Registros fornecidos por mais de 100 
  bibliotecas e centros de informação, de 
  praticamente todos os países da região
• Promove a pesquisa relevante para os 
  nossos problemas de saúde
A metodologia é o elo
Dicionário de Dados da Metodologia Lilacs
Dicionário de Dados da Metodologia Lilacs
O absurdo
[...] seria interessante notar o absurdo do padrão do
MRN [Modelo Relacional Normalizado]: se um livro
tiver 3 autores e 5 assuntos, será necessário representá-
lo no MRN por meio de uma linha na tabela Livros, mais
3 na Nomes-de-autores (que implementaria o atributo
multivalorado correspondente) e mais 5 na de Assuntos,
num total de 9 linhas em três tabelas distintas [...]. Mas
o que se vê e e pega-se na mão no mundo real é um livro
só, e não um picadinho de livro!
SETZER, V. Bancos de dados: aprenda o que são,
melhore seu conhecimento, construa os seus.
1ª ed. São Paulo: Edgard Blücher, 2005.
Registros bibliográficos
• MARC: Machine Readable Cataloging
  – US Library of Congress
• ISO 2709
  – Information and documentation: Format for 
    information exchange
• CDS/ISIS
  – Unesco, BIREME/OPAS/OMS et al.
Modelo de dados apoia
        a metodologia

• Campos repetitivos
• Campos opcionais
• Sub­campos

        Características comuns aos formatos
         Características comuns aos formatos
        de registros MARC, ISO-2709 e ISIS
         de registros MARC, ISO-2709 e ISIS
Exemplo de registro ISIS


10   «Lewis Carroll^y1832-1898^rauthor»
10   «John Tenniel^y1820-1914^rillustrator»
10   «Lewis Carroll^y1914-2010^reditor»
12   «The Annotated Alice^sThe Definitive Edition»
Exemplo de registro ISIS

 Campo repetitivo
10   «Lewis Carroll^y1832-1898^rauthor»
10   «John Tenniel^y1820-1914^rillustrator»
10   «Lewis Carroll^y1914-2010^reditor»
12   «The Annotated Alice^sThe Definitive Edition»
Exemplo de registro ISIS
         Marcador de sub-campo        Sub-campo


10   «Lewis Carroll^y1832-1898^rauthor»
10   «John Tenniel^y1820-1914^rillustrator»
10   «Lewis Carroll^y1914-2010^reditor»
12   «The Annotated Alice^sThe Definitive Edition»
Exemplo de registro ISIS

 Campo repetitivo
10   «Lewis Carroll^y1832-1898^rauthor»
10   «John Tenniel^y1820-1914^rillustrator»
10   «Lewis Carroll^y1914-2010^reditor»
12   «The Annotated Alice^sThe Definitive Edition»

             Marcador de sub-campo     Sub-campo
Algumas lições aprendidas
• Schema first x schema last (Stonebraker)
  – ao longo do tempo, é inevitável que você tenha 
    registros na base em desacordo com as regras 
    de negócios
• Necessário usar um framework que permita 
  definir um modelo de dados com:
  – tipos de campos validados
  – validações envolvendo vários campos ou 
    mesmo a base de dados (ex. unicidade)
  – geração de forms (estimula o (re)uso)
O futuro do ISIS
• Manutenção da implementação legada 
  (CISIS) está cada vez mais complexa
• BIREME busca uma alternativa que 
  suporte bem suas bases de dados 
  (conteúdo), sem necessariamente se 
  prender ao formato binários do ISIS
• Quais são as alternativas?
Comparar BD relacionais é como comparar automóveis
NoSQL é mais difícil comparar
Tags para pesquisar
• NoSQL
• NF²: Non­First Normal Form
• MRNN: modelo relacional não normalizado 
  (V. W. Setzer)
• Schemaless
• Semistructured ou Semi­structured
Referência: Data on the Web
             • Teoria de BD 
               semiestruturados
             • Os autores têm 
               vários papers 
               seminais
Semistructured Database Design
               • Teoria atualizada
               • Discussão sobre 
                 redundância, 
                 anomalias de 
                 atualização etc.
               • Notação gráfica 
                 para definir 
                 esquemas de dados
O modelo de dados 
          semiestruturado
• Em uma palavra: JSON
  – uma aproximação razoável
• Banco de dados = coleção de registros
• Registro = dicionário
  – conjunto de pares chave­valor
• Valor de um campo = simples ou coleção
  – campos repetitivos: valor = lista
  – sub­campos: valor = dicionário
  – tudo junto: listas de dicionários!
Alternativas atuais
• Apache CouchDB
  – API mais difícil para fazer queries (mapreduce)
  – estratégia de persistência mais segura em 
    deployments simples
• MongoDB
  – API mais fácil para queries
  – estratégia de persitência otimizada para 
    update exige deployment mais complexo
• Sugestões?
Projeto ISIS­DM: ISIS Data Model
• API para definição de esquemas de dados 
  através de classes, como em certos ORMs
• API de extração de dados tão ou mais 
  poderosa quanto a ISIS Format. Language
• Back­ends para BDs NF² modernos
  – MongoDB, CouchDB
  – Google Datastore
  – PostgreSQL (hstore, JSON?)
  – O seu BD favorito
Definição de um esquema
Instanciação


>>> book == Book(title='The Annotated Alice^sDefinitive Edition',
 >>> book    Book(title='The Annotated Alice^sDefinitive Edition',
...
 ...             pages=352,
                  pages=352,
...
 ...             creators=['Lewis Carroll^y1832-1898^rAuthor',
                  creators=['Lewis Carroll^y1832-1898^rAuthor',
...
 ...                       'John Tenniel^rIllustrator',
                            'John Tenniel^rIllustrator',
...
 ...                       'Martin Gardner^y1914-2010^rEditor'])
                            'Martin Gardner^y1914-2010^rEditor'])
Acesso a campos e sub­campos

  >>> book.title
   >>> book.title
  u'The Annotated Alice^sDefinitive Edition'
   u'The Annotated Alice^sDefinitive Edition'
  >>> print book.title.s
   >>> print book.title.s
  Definitive Edition
   Definitive Edition
  >>> print book.creators[0].y
   >>> print book.creators[0].y
  1832-1898
   1832-1898
  >>> for creator in book.creators:
   >>> for creator in book.creators:
  ...
   ...    print '%-12s: %s' %% (creator.r, creator[0])
           print '%-12s: %s'     (creator.r, creator[0])
  Author
   Author      :: Lewis Carroll
                   Lewis Carroll
  Illustrator :: John Tenniel
   Illustrator     John Tenniel
  Editor
   Editor      :: Martin Gardner
                   Martin Gardner
Projeto ISIS­DM
• FLOSS: Licença LGPL
• Iniciando agora: participe das decisões 
  cruciais, envolva­se enquanto ainda é fácil
• Excelente oportunidade para ganhar 
  experiência com NoSQL, trabalhando com 
  massas de dados e necessidades reais
• Alto impacto social: a missão é democratizar 
  o acesso à informação em saúde
• Visibilidade internacional
O que
temos:
usuários,
dados,
casos
de uso 
concretos
http://reddes.bvsalud.org
 http://reddes.bvsalud.org
                         luciano.ramalho@bireme.org
                          luciano.ramalho@bireme.org
http://reddes.bvsalud.org
 http://reddes.bvsalud.org
                         luciano.ramalho@bireme.org
                          luciano.ramalho@bireme.org

Mais conteúdo relacionado

Destaque

tmn - Introdução ao JavaScript
tmn - Introdução ao JavaScripttmn - Introdução ao JavaScript
tmn - Introdução ao JavaScriptClaudio Gamboa
 
JavaScript de qualidade: hoje, amanhã e sempre!
JavaScript de qualidade: hoje, amanhã e sempre!JavaScript de qualidade: hoje, amanhã e sempre!
JavaScript de qualidade: hoje, amanhã e sempre!Thiago de Oliveira Pires
 
JavaScript agora é sério (TDC 2011)
JavaScript agora é sério (TDC 2011)JavaScript agora é sério (TDC 2011)
JavaScript agora é sério (TDC 2011)Luciano Ramalho
 
Java script em 2016 - Como sobreviver a essa sopa de letrinhas com vue.js
Java script em 2016 - Como sobreviver a essa sopa de letrinhas com vue.jsJava script em 2016 - Como sobreviver a essa sopa de letrinhas com vue.js
Java script em 2016 - Como sobreviver a essa sopa de letrinhas com vue.jsVinicius Reis
 
Aprender Javascript e jQuery (UFCD
Aprender Javascript e jQuery (UFCDAprender Javascript e jQuery (UFCD
Aprender Javascript e jQuery (UFCDAfonso Gomes
 
Javascript, Done Right
Javascript, Done RightJavascript, Done Right
Javascript, Done RightAndré Luís
 
DOMinando JavaScript
DOMinando JavaScriptDOMinando JavaScript
DOMinando JavaScriptThiago Poiani
 
Minicurso - Desenvolvendo aplicações web com JavaScript e AngularJS - Estácio...
Minicurso - Desenvolvendo aplicações web com JavaScript e AngularJS - Estácio...Minicurso - Desenvolvendo aplicações web com JavaScript e AngularJS - Estácio...
Minicurso - Desenvolvendo aplicações web com JavaScript e AngularJS - Estácio...Rodrigo Branas
 
Introdução a JavaScript
Introdução a JavaScriptIntrodução a JavaScript
Introdução a JavaScriptBruno Catão
 
Minicurso de JavaScript (Portuguese)
Minicurso de JavaScript (Portuguese)Minicurso de JavaScript (Portuguese)
Minicurso de JavaScript (Portuguese)Bruno Grange
 
Desvendando a linguagem JavaScript
Desvendando a linguagem JavaScriptDesvendando a linguagem JavaScript
Desvendando a linguagem JavaScriptRodrigo Branas
 
Javascript levado a serio
Javascript levado a serioJavascript levado a serio
Javascript levado a serioJaydson Gomes
 

Destaque (17)

tmn - Introdução ao JavaScript
tmn - Introdução ao JavaScripttmn - Introdução ao JavaScript
tmn - Introdução ao JavaScript
 
JavaScript de qualidade: hoje, amanhã e sempre!
JavaScript de qualidade: hoje, amanhã e sempre!JavaScript de qualidade: hoje, amanhã e sempre!
JavaScript de qualidade: hoje, amanhã e sempre!
 
JavaScript agora é sério (TDC 2011)
JavaScript agora é sério (TDC 2011)JavaScript agora é sério (TDC 2011)
JavaScript agora é sério (TDC 2011)
 
Java script em 2016 - Como sobreviver a essa sopa de letrinhas com vue.js
Java script em 2016 - Como sobreviver a essa sopa de letrinhas com vue.jsJava script em 2016 - Como sobreviver a essa sopa de letrinhas com vue.js
Java script em 2016 - Como sobreviver a essa sopa de letrinhas com vue.js
 
Java script
Java scriptJava script
Java script
 
It's Javascript Time
It's Javascript TimeIt's Javascript Time
It's Javascript Time
 
Aula javascript
Aula  javascriptAula  javascript
Aula javascript
 
Aprender Javascript e jQuery (UFCD
Aprender Javascript e jQuery (UFCDAprender Javascript e jQuery (UFCD
Aprender Javascript e jQuery (UFCD
 
Javascript, Done Right
Javascript, Done RightJavascript, Done Right
Javascript, Done Right
 
DOMinando JavaScript
DOMinando JavaScriptDOMinando JavaScript
DOMinando JavaScript
 
Minicurso - Desenvolvendo aplicações web com JavaScript e AngularJS - Estácio...
Minicurso - Desenvolvendo aplicações web com JavaScript e AngularJS - Estácio...Minicurso - Desenvolvendo aplicações web com JavaScript e AngularJS - Estácio...
Minicurso - Desenvolvendo aplicações web com JavaScript e AngularJS - Estácio...
 
Introdução a JavaScript
Introdução a JavaScriptIntrodução a JavaScript
Introdução a JavaScript
 
Minicurso de JavaScript (Portuguese)
Minicurso de JavaScript (Portuguese)Minicurso de JavaScript (Portuguese)
Minicurso de JavaScript (Portuguese)
 
Javascript aula 01 - visão geral
Javascript   aula 01 - visão geralJavascript   aula 01 - visão geral
Javascript aula 01 - visão geral
 
Desvendando a linguagem JavaScript
Desvendando a linguagem JavaScriptDesvendando a linguagem JavaScript
Desvendando a linguagem JavaScript
 
JavaScript
JavaScriptJavaScript
JavaScript
 
Javascript levado a serio
Javascript levado a serioJavascript levado a serio
Javascript levado a serio
 

Semelhante a 20 anos de experiência com NoSQL na BIREME/OPAS/OMS

Semelhante a 20 anos de experiência com NoSQL na BIREME/OPAS/OMS (20)

Aula8.pptx
Aula8.pptxAula8.pptx
Aula8.pptx
 
Bancos de dados NoSQL (Not only sql)
Bancos de dados NoSQL (Not only sql)Bancos de dados NoSQL (Not only sql)
Bancos de dados NoSQL (Not only sql)
 
Tema3.pptx
Tema3.pptxTema3.pptx
Tema3.pptx
 
Tema3.pptx
Tema3.pptxTema3.pptx
Tema3.pptx
 
No sql Orientado a documento
No sql Orientado a documentoNo sql Orientado a documento
No sql Orientado a documento
 
NoSQL & SQL
NoSQL & SQLNoSQL & SQL
NoSQL & SQL
 
Bancos de dados nosql (not only sql)
Bancos de dados nosql (not only sql)Bancos de dados nosql (not only sql)
Bancos de dados nosql (not only sql)
 
Introdução ao MongoDB (NoSQL)
Introdução ao MongoDB (NoSQL)Introdução ao MongoDB (NoSQL)
Introdução ao MongoDB (NoSQL)
 
Mongo db
Mongo dbMongo db
Mongo db
 
Bancos de Dados para Bibliotecarios
Bancos de Dados para BibliotecariosBancos de Dados para Bibliotecarios
Bancos de Dados para Bibliotecarios
 
Aula 2 - Introdução a Banco de Dados
Aula 2 - Introdução a Banco de DadosAula 2 - Introdução a Banco de Dados
Aula 2 - Introdução a Banco de Dados
 
Bancos de dados NoSQL
Bancos de dados NoSQLBancos de dados NoSQL
Bancos de dados NoSQL
 
Aula 1
Aula 1Aula 1
Aula 1
 
Bancos de dados no sql – uma nova abordagem
Bancos de dados no sql – uma nova abordagemBancos de dados no sql – uma nova abordagem
Bancos de dados no sql – uma nova abordagem
 
1.Introdução Banco de Dados
1.Introdução Banco de Dados1.Introdução Banco de Dados
1.Introdução Banco de Dados
 
Banco de Dados (pré-apresentação)
Banco de Dados (pré-apresentação)Banco de Dados (pré-apresentação)
Banco de Dados (pré-apresentação)
 
Introdução ao banco de dados
Introdução ao banco de dadosIntrodução ao banco de dados
Introdução ao banco de dados
 
Apresentação
ApresentaçãoApresentação
Apresentação
 
O NoSQL e o Relacional: Uma Análise
O NoSQL e o Relacional: Uma AnáliseO NoSQL e o Relacional: Uma Análise
O NoSQL e o Relacional: Uma Análise
 
Arquitetura de banco de dados
Arquitetura de banco de dadosArquitetura de banco de dados
Arquitetura de banco de dados
 

Mais de Luciano Ramalho

Introdução a linguagem Python
Introdução a linguagem PythonIntrodução a linguagem Python
Introdução a linguagem PythonLuciano Ramalho
 
Iteráveis e geradores (versão RuPy)
Iteráveis e geradores (versão RuPy)Iteráveis e geradores (versão RuPy)
Iteráveis e geradores (versão RuPy)Luciano Ramalho
 
Orientação a objetos em Python (compacto)
Orientação a objetos em Python (compacto)Orientação a objetos em Python (compacto)
Orientação a objetos em Python (compacto)Luciano Ramalho
 
Encapsulamento com descritores
Encapsulamento com descritoresEncapsulamento com descritores
Encapsulamento com descritoresLuciano Ramalho
 
Arduino: hardware hacking & coding dojo
Arduino: hardware hacking & coding dojoArduino: hardware hacking & coding dojo
Arduino: hardware hacking & coding dojoLuciano Ramalho
 
Objetos Pythonicos - compacto
Objetos Pythonicos - compactoObjetos Pythonicos - compacto
Objetos Pythonicos - compactoLuciano Ramalho
 
Iteraveis e geradores em Python
Iteraveis e geradores em PythonIteraveis e geradores em Python
Iteraveis e geradores em PythonLuciano Ramalho
 
Encapsulamento com Descritores em Python
Encapsulamento com Descritores em PythonEncapsulamento com Descritores em Python
Encapsulamento com Descritores em PythonLuciano Ramalho
 
Python: Iteraveis, geradores etc
Python: Iteraveis, geradores etcPython: Iteraveis, geradores etc
Python: Iteraveis, geradores etcLuciano Ramalho
 
Jython no JavaOne Latin America 2011
Jython no JavaOne Latin America 2011Jython no JavaOne Latin America 2011
Jython no JavaOne Latin America 2011Luciano Ramalho
 
Python para quem sabe Python (aula 2)
Python para quem sabe Python (aula 2)Python para quem sabe Python (aula 2)
Python para quem sabe Python (aula 2)Luciano Ramalho
 
OO em Python sem sotaque
OO em Python sem sotaqueOO em Python sem sotaque
OO em Python sem sotaqueLuciano Ramalho
 
Python, a arma secreta do Google
Python, a arma secreta do GooglePython, a arma secreta do Google
Python, a arma secreta do GoogleLuciano Ramalho
 

Mais de Luciano Ramalho (20)

Wiki-wiki S/A
Wiki-wiki S/AWiki-wiki S/A
Wiki-wiki S/A
 
Mongodb: agregação
Mongodb: agregaçãoMongodb: agregação
Mongodb: agregação
 
Introdução a linguagem Python
Introdução a linguagem PythonIntrodução a linguagem Python
Introdução a linguagem Python
 
Iteráveis e geradores (versão RuPy)
Iteráveis e geradores (versão RuPy)Iteráveis e geradores (versão RuPy)
Iteráveis e geradores (versão RuPy)
 
Orientação a objetos em Python (compacto)
Orientação a objetos em Python (compacto)Orientação a objetos em Python (compacto)
Orientação a objetos em Python (compacto)
 
Encapsulamento com descritores
Encapsulamento com descritoresEncapsulamento com descritores
Encapsulamento com descritores
 
Iteraveis e geradores
Iteraveis e geradoresIteraveis e geradores
Iteraveis e geradores
 
Arduino: hardware hacking & coding dojo
Arduino: hardware hacking & coding dojoArduino: hardware hacking & coding dojo
Arduino: hardware hacking & coding dojo
 
Objetos Pythonicos - compacto
Objetos Pythonicos - compactoObjetos Pythonicos - compacto
Objetos Pythonicos - compacto
 
Iteraveis e geradores em Python
Iteraveis e geradores em PythonIteraveis e geradores em Python
Iteraveis e geradores em Python
 
Encapsulamento com Descritores em Python
Encapsulamento com Descritores em PythonEncapsulamento com Descritores em Python
Encapsulamento com Descritores em Python
 
Dojo com Processing
Dojo com ProcessingDojo com Processing
Dojo com Processing
 
Dojo com Arduino
Dojo com ArduinoDojo com Arduino
Dojo com Arduino
 
Python: Iteraveis, geradores etc
Python: Iteraveis, geradores etcPython: Iteraveis, geradores etc
Python: Iteraveis, geradores etc
 
Open Library no Mongodb
Open Library no MongodbOpen Library no Mongodb
Open Library no Mongodb
 
Jython no JavaOne Latin America 2011
Jython no JavaOne Latin America 2011Jython no JavaOne Latin America 2011
Jython no JavaOne Latin America 2011
 
Python para quem sabe Python (aula 2)
Python para quem sabe Python (aula 2)Python para quem sabe Python (aula 2)
Python para quem sabe Python (aula 2)
 
OO em Python sem sotaque
OO em Python sem sotaqueOO em Python sem sotaque
OO em Python sem sotaque
 
Modelos ricos
Modelos ricosModelos ricos
Modelos ricos
 
Python, a arma secreta do Google
Python, a arma secreta do GooglePython, a arma secreta do Google
Python, a arma secreta do Google
 

20 anos de experiência com NoSQL na BIREME/OPAS/OMS

  • 1. NoSQL na  BIREME/OPAS/OMS 20 anos de experiência Luciano Ramalho BIREME/OPAS/OMS
  • 2.
  • 3.
  • 4.
  • 5. Invasões bárbaras • O modelo relacional normalizado (MRN)  reinava praticamente incontestável • Em alguns nichos, usuários de bancos de  dados NoSQL resistiam (ex. ISIS, Adabas,  Mumps...) • Grandes usuários de NoSQL saíram do  armário (Google, Amazon, Facebook...) • Vários bancos NoSQL novos sendo   lançados
  • 6. Alguns produtos recentes • ZODB • Apache CouchDB • MongoDB • Hadoop Hbase • ThruDB • Google Datastore • Redis • Amazon SimpleDB • Hypertable • Apstrata • Riak
  • 7. Uma aplicação: LILACS • LILACS: Literatura Latinoamericana y del  Caribe en Ciencias de la Salud • Catalogação cooperativa de artigos  científicos nos países de origem • Registros fornecidos por mais de 100  bibliotecas e centros de informação, de  praticamente todos os países da região • Promove a pesquisa relevante para os  nossos problemas de saúde
  • 9. Dicionário de Dados da Metodologia Lilacs Dicionário de Dados da Metodologia Lilacs
  • 10. O absurdo [...] seria interessante notar o absurdo do padrão do MRN [Modelo Relacional Normalizado]: se um livro tiver 3 autores e 5 assuntos, será necessário representá- lo no MRN por meio de uma linha na tabela Livros, mais 3 na Nomes-de-autores (que implementaria o atributo multivalorado correspondente) e mais 5 na de Assuntos, num total de 9 linhas em três tabelas distintas [...]. Mas o que se vê e e pega-se na mão no mundo real é um livro só, e não um picadinho de livro! SETZER, V. Bancos de dados: aprenda o que são, melhore seu conhecimento, construa os seus. 1ª ed. São Paulo: Edgard Blücher, 2005.
  • 11. Registros bibliográficos • MARC: Machine Readable Cataloging – US Library of Congress • ISO 2709 – Information and documentation: Format for  information exchange • CDS/ISIS – Unesco, BIREME/OPAS/OMS et al.
  • 12. Modelo de dados apoia a metodologia • Campos repetitivos • Campos opcionais • Sub­campos Características comuns aos formatos Características comuns aos formatos de registros MARC, ISO-2709 e ISIS de registros MARC, ISO-2709 e ISIS
  • 13. Exemplo de registro ISIS 10 «Lewis Carroll^y1832-1898^rauthor» 10 «John Tenniel^y1820-1914^rillustrator» 10 «Lewis Carroll^y1914-2010^reditor» 12 «The Annotated Alice^sThe Definitive Edition»
  • 14. Exemplo de registro ISIS Campo repetitivo 10 «Lewis Carroll^y1832-1898^rauthor» 10 «John Tenniel^y1820-1914^rillustrator» 10 «Lewis Carroll^y1914-2010^reditor» 12 «The Annotated Alice^sThe Definitive Edition»
  • 15. Exemplo de registro ISIS Marcador de sub-campo Sub-campo 10 «Lewis Carroll^y1832-1898^rauthor» 10 «John Tenniel^y1820-1914^rillustrator» 10 «Lewis Carroll^y1914-2010^reditor» 12 «The Annotated Alice^sThe Definitive Edition»
  • 16. Exemplo de registro ISIS Campo repetitivo 10 «Lewis Carroll^y1832-1898^rauthor» 10 «John Tenniel^y1820-1914^rillustrator» 10 «Lewis Carroll^y1914-2010^reditor» 12 «The Annotated Alice^sThe Definitive Edition» Marcador de sub-campo Sub-campo
  • 17. Algumas lições aprendidas • Schema first x schema last (Stonebraker) – ao longo do tempo, é inevitável que você tenha  registros na base em desacordo com as regras  de negócios • Necessário usar um framework que permita  definir um modelo de dados com: – tipos de campos validados – validações envolvendo vários campos ou  mesmo a base de dados (ex. unicidade) – geração de forms (estimula o (re)uso)
  • 18. O futuro do ISIS • Manutenção da implementação legada  (CISIS) está cada vez mais complexa • BIREME busca uma alternativa que  suporte bem suas bases de dados  (conteúdo), sem necessariamente se  prender ao formato binários do ISIS • Quais são as alternativas?
  • 19. Comparar BD relacionais é como comparar automóveis
  • 20. NoSQL é mais difícil comparar
  • 21. Tags para pesquisar • NoSQL • NF²: Non­First Normal Form • MRNN: modelo relacional não normalizado  (V. W. Setzer) • Schemaless • Semistructured ou Semi­structured
  • 22. Referência: Data on the Web • Teoria de BD  semiestruturados • Os autores têm  vários papers  seminais
  • 23. Semistructured Database Design • Teoria atualizada • Discussão sobre  redundância,  anomalias de  atualização etc. • Notação gráfica  para definir  esquemas de dados
  • 24. O modelo de dados  semiestruturado • Em uma palavra: JSON – uma aproximação razoável • Banco de dados = coleção de registros • Registro = dicionário – conjunto de pares chave­valor • Valor de um campo = simples ou coleção – campos repetitivos: valor = lista – sub­campos: valor = dicionário – tudo junto: listas de dicionários!
  • 25. Alternativas atuais • Apache CouchDB – API mais difícil para fazer queries (mapreduce) – estratégia de persistência mais segura em  deployments simples • MongoDB – API mais fácil para queries – estratégia de persitência otimizada para  update exige deployment mais complexo • Sugestões?
  • 26.
  • 27. Projeto ISIS­DM: ISIS Data Model • API para definição de esquemas de dados  através de classes, como em certos ORMs • API de extração de dados tão ou mais  poderosa quanto a ISIS Format. Language • Back­ends para BDs NF² modernos – MongoDB, CouchDB – Google Datastore – PostgreSQL (hstore, JSON?) – O seu BD favorito
  • 29. Instanciação >>> book == Book(title='The Annotated Alice^sDefinitive Edition', >>> book Book(title='The Annotated Alice^sDefinitive Edition', ... ... pages=352, pages=352, ... ... creators=['Lewis Carroll^y1832-1898^rAuthor', creators=['Lewis Carroll^y1832-1898^rAuthor', ... ... 'John Tenniel^rIllustrator', 'John Tenniel^rIllustrator', ... ... 'Martin Gardner^y1914-2010^rEditor']) 'Martin Gardner^y1914-2010^rEditor'])
  • 30. Acesso a campos e sub­campos >>> book.title >>> book.title u'The Annotated Alice^sDefinitive Edition' u'The Annotated Alice^sDefinitive Edition' >>> print book.title.s >>> print book.title.s Definitive Edition Definitive Edition >>> print book.creators[0].y >>> print book.creators[0].y 1832-1898 1832-1898 >>> for creator in book.creators: >>> for creator in book.creators: ... ... print '%-12s: %s' %% (creator.r, creator[0]) print '%-12s: %s' (creator.r, creator[0]) Author Author :: Lewis Carroll Lewis Carroll Illustrator :: John Tenniel Illustrator John Tenniel Editor Editor :: Martin Gardner Martin Gardner
  • 31.
  • 32. Projeto ISIS­DM • FLOSS: Licença LGPL • Iniciando agora: participe das decisões  cruciais, envolva­se enquanto ainda é fácil • Excelente oportunidade para ganhar  experiência com NoSQL, trabalhando com  massas de dados e necessidades reais • Alto impacto social: a missão é democratizar  o acesso à informação em saúde • Visibilidade internacional
  • 34. http://reddes.bvsalud.org http://reddes.bvsalud.org luciano.ramalho@bireme.org luciano.ramalho@bireme.org
  • 35. http://reddes.bvsalud.org http://reddes.bvsalud.org luciano.ramalho@bireme.org luciano.ramalho@bireme.org