Porque bibliotecários usam bancos de dados esquisitos

Preview:

DESCRIPTION

O modelo de dados semiestruturado em bases bibliográficas: do CDS/ISIS ao Apache CouchDB

Citation preview

11

O Modelo de Dados O Modelo de Dados Semiestruturado emSemiestruturado emBases Bibliográficas:Bases Bibliográficas:

do CDS/ISIS ao do CDS/ISIS ao Apache CouchDBApache CouchDB

Luciano G. S. Ramalho

Monografia de GraduaçãoBacharelado em Biblioteconomia

Orientador: Prof. Dr. Marcos MucheroniUSP – ECA – CBDNovembro de 2010

22

Por que os bibliotecários Por que os bibliotecários usam bancos de dados usam bancos de dados 

diferentes de todo mundo...diferentes de todo mundo...

33

Por que os bibliotecários Por que os bibliotecários usam bancos de dados usam bancos de dados 

diferentes de todo mundo...diferentes de todo mundo...e por que eles estão certose por que eles estão certos

44

Agradecimentos:

Colegas da BIREME/OPAS/OMS

Marcos Mucheroni

Imre Simon

Maria Lucia e Jairo

membros da banca

e colegas presentes

Para Marta,

por tudo.

55

IntroduçãoIntrodução

Revisão da LiteraturaRevisão da Literatura

MetodologiaMetodologia

ResultadosResultados

ConclusãoConclusão

66

Cenário atual e motivaçãoCenário atual e motivação

• Muitas bibliotecas no Brasil utilizam sistemas baseados na família ISIS

• A família ISIS não segue o Modelo Relacional Normalizado (MRN)

77

88

99

Exemplo de uso: ISIS na Exemplo de uso: ISIS na catalogação cooperativacatalogação cooperativa

• LILACS: Literatura Latinoamericana y del Caribe en Ciencias de la Salud

• Catalogação cooperativa de artigos científicos nos países de origem

1010

Contexto tecnológicoContexto tecnológico

• Hegemonia do modelo relacional normalizado (MRN)

• Bancos de dados não relacionais em alguns nichos (ISIS, Adabas, Mumps...)

• Grandes sites revelam seus segredos (Google, Amazon, Facebook...)

• Movimento NoSQL = Not only SQL

1111

Alguns produtos NoSQL recentesAlguns produtos NoSQL recentes

• Apache Cassandra• Apache CouchDB• MongoDB• Hadoop Hbase• Hypertable• Redis• Riak• ThruDB

• Google Datastore• Amazon SimpleDB• Apstrata

Todos lançadosapós o ano 2000

1212

1313

Descrição do problemaDescrição do problemade pesquisade pesquisa

A família de sistemas ISIS mostrou­se muito bem adaptada à operação de bases bibliográficas nos últimos 25 anos, mas com o passar tempo vieram dificuldades para evoluir suas implementações. 

Com o surgimento de novos sistemas com modelosde dados mais flexíveis, será que existe hoje um caminho para a migração de bases ISIS que evite uma reestruturação dos dados com impacto sobre as próprias metodologias de catalogação?

1414

IntroduçãoIntrodução

Revisão da LiteraturaRevisão da Literatura

MetodologiaMetodologia

ResultadosResultados

ConclusãoConclusão

1515

Resumo da terminologia adotadaResumo da terminologia adotada

1616

Modelo Relacional NormalizadoModelo Relacional Normalizado

editoras

autoresautoreslivroslivros

bd_opac

livros

objetobanco de

dados

relação

tupla

atributo

banco dedados

tabela

registro

campo

1717

• Pela definição de E. F. Codd, os domínios dos atributos devem ser atômicos– Ou seja: valores simples e indivisíveis do ponto 

de vista do sistema de banco de dados

• 1ª Forma Normal (1FN ou 1NF, em inglês)– C. J. Date debate a definição clássica de 1FN

C. J. Date×

Codd, Elmasri, Setzer, Silberschatz...

C. J. Date×

Codd, Elmasri, Setzer, Silberschatz...

Modelo Relacional NormalizadoModelo Relacional Normalizado

1818

O problema do MRNO problema do MRN

[...] seria interessante notar o absurdo do padrão do MRN [Modelo Relacional Normalizado]: se um livro tiver 3 autores e 5 assuntos [...].

SETZER, V. Bancos de dados: aprendao que são, melhore seu conhecimento, construa os seus. 1ª ed. São Paulo: Edgard Blücher, 2005, p. 135.

1919

O problema do MRNO problema do MRN

[...] será necessário representá-lo [em] uma linha na tabela Livros, mais 3 na Nomes-de-autores [...] e mais 5 na de Assuntos, num total de 9 linhas em três tabelas distintas [...]

SETZER, V. Bancos de dados: aprendao que são, melhore seu conhecimento, construa os seus. 1ª ed. São Paulo: Edgard Blücher, 2005, p. 135.

LivrosAssuntos

Nomes de Autores

2020

O problema do MRNO problema do MRN

[...] Mas o que se vê e pega-se na mão no mundo real é um livro só, e não um picadinho de livro!

SETZER, V. Bancos de dados: aprendao que são, melhore seu conhecimento, construa os seus. 1ª ed. São Paulo: Edgard Blücher, 2005, p. 135.

2121

O problema do MRNO problema do MRN[…] Veremos que no MRNN [Modelo Relacional Não-Normalizado] isso pode ser representado em uma só linha, que é o que se esperaria de um modelo de dados decente [...]

SETZER, V. Bancos de dados: aprendao que são, melhore seu conhecimento, construa os seus. 1ª ed. São Paulo: Edgard Blücher, 2005, p. 135.

Livros

=

2222

Consequências da 1FNConsequências da 1FN

• No MRN, para representar subcampos ou campos repetitivos é necessário criar registros em tabelas adicionais

• A explosão de um registro bibliográfico em vários registros espalhados por tabelas complica o fluxo de trabalho distribuído de uma rede de catalogação cooperativa como a LILACS

2323

Modelo SemiestruturadoModelo Semiestruturado“The semi­structured data model is designed as an evolution of the relational data model that allows the representation of data with a flexible structure. Some items may have missing attributes, some may have two or more ocurrences of the same attribute…” 

SUCIU, Dan. Semi­Structured Data Model. In: LIU, L. Encyclopedia of Database Systems

2424

Modelo SemiestruturadoModelo Semiestruturado

• Formalizado por grupos de pesquisa a partir de 1995– UPenn Database Research Group – Projeto Lore, Stanford University 

• Motivação: facilitar o intercâmbio de dados• Modelo proposto é mais simples que o 

modelo de dados do XML

2525

O livro vermelhoO livro vermelho

• Hellerstein & Stonebraker

• Coletânea de artigos• Livro­texto na UC 

Berkeley• Visão histórica e 

crítica de modelos de dados

2626

Referência: Data on the WebReferência: Data on the Web

• Abiteboul, Buneman& Suciu

• Teoria de BD semiestruturados

• Os autores têm vários papers seminais

2727

Semistructured Database DesignSemistructured Database Design

• Teoria atualizada (2004)

• Discussão sobre redundância, anomalias de atualização etc.

• Notação gráfica para definir esquemas de dados

2828

Família ISISFamília ISIS

Egbert de SmetIII Congresso Internacional de Usuários de CDS/ISIS, Rio de Janeiro, set. de 2008

Egbert de SmetIII Congresso Internacional de Usuários de CDS/ISIS, Rio de Janeiro, set. de 2008

2929

Documentação sobre ISISDocumentação sobre ISIS

• Utilitários CISIS– Manuais produzidos pela BIREME/OPAS/OMS

• ISIS­NBP– Wiki e repositório de código público– Desenvolvimentos recentes:

• Conversor de ISIS para JSON• ISIS­DM: API para definição de esquemas de dados• Schematize: definição automática de esquemas de 

dados por inferência a partir de amostras

3030

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 ISISExemplo de registro ISIS

3131

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»

Campo repetitivo

Exemplo de registro ISISExemplo de registro ISIS

3232

Exemplo de registro ISISExemplo 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»

Marcador de sub-campo Sub-campo

3333

Exemplo de registro ISISExemplo 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»

Campo repetitivo

Marcador de sub-campo Sub-campo

3434

Metodologia LILACSMetodologia LILACS

• Metodologia LILACS: Manualde Descrição Bibliográfica, 7ª ed. 

• Diccionario de datos del modelo LILACS Versión 1.6a

3535

A metodologia é o eloA metodologia é o elo

Dicionário de Dados da Metodologia LilacsDicionário de Dados da Metodologia Lilacs

3636

SGBDs não­relacionaisSGBDs não­relacionais

• Grande diversidade de arquiteturas para finalidades muito diferentes

• Key­value stores são um tipo comum– BerkeleyDB, Redis, Amazon Dynamo

• Document databases implementam nativamente o modelo semiestruturado com índices secundários– CouchDB, MongoDB, Google Datastore

3737

XML e JSONXML e JSON<?xml version="1.0" encoding="UTF­8" ?><alunos>    Relação dos alunos matriculados:    <aluno matricula=”123456”>        <nome>Fulano de Tal</nome>    <aluno>    <aluno matricula=”123457”>        <nome>Sicrano de Tal</nome>    <aluno></alunos>

<?xml version="1.0" encoding="UTF­8" ?><alunos>    Relação dos alunos matriculados:    <aluno matricula=”123456”>        <nome>Fulano de Tal</nome>    <aluno>    <aluno matricula=”123457”>        <nome>Sicrano de Tal</nome>    <aluno></alunos> {"alunos" : [ 

    {"matricula" : "123456",      "nome” : "Fulano de Tal"},    {"matricula" : "123457",      "nome” : "Sicrano de Tal"}]}

{"alunos" : [     {"matricula" : "123456",      "nome” : "Fulano de Tal"},    {"matricula" : "123457",      "nome” : "Sicrano de Tal"}]}

3838

IntroduçãoIntrodução

Revisão da LiteraturaRevisão da Literatura

MetodologiaMetodologia

ResultadosResultados

ConclusãoConclusão

3939

Seleção do sistema Seleção do sistema de banco de dadosde banco de dados

• para bases de atualização distribuída, o CouchDB oferece replicação e instalação mais simples

• para bases publicadas de forma centralizada e com alto tráfego, MongoDB oferece maior desempenho

• para LILACS, optamos por CouchDB

4040

Formatos ISIS­JSONFormatos ISIS­JSON

JSON:JavaScript Object Notation (RFC 4627)

JSON:JavaScript Object Notation (RFC 4627)

ISIS-JSON:esquemasgenéricos parabases ISIS

ISIS-JSON:esquemasgenéricos parabases ISIS

4141

ISIS em JSONISIS em JSON

4242

ISIS em JSONISIS em JSON

4343

ISIS em JSONISIS em JSON

4444

ISIS­JSON: tiposISIS­JSON: tipos

4545

Obtenção de LILACS100KObtenção de LILACS100K

• Amostra: os 100.000 registros mais recentes de LILACS em 17/out/2010

4646

Obtenção de LILACS100KObtenção de LILACS100K

4747

Obtenção de LILACS100KObtenção de LILACS100K

4848

Ferramenta de conversãoFerramenta de conversãode registros ISIS para JSONde registros ISIS para JSON

• isis2json.py• leitura: 

– arquivos ISO­2709 ou binários ISIS (.mst/.xrf)

• escrita:– arquivos JSON genéricos ou adaptados para 

CouchDB ou MongoDB– registros ISIS­JSON tipo 1 ou tipo 4

4949

luciano@meng$ ./isis2json.py ­husage: isis2json.py [­h] [­o OUTPUT.json] [­c] [­m] [­f] [­q QTY] [­s SKIP]                    [­i TAG_NUMBER] [­u] [­t PREFIX] [­n]                    INPUT.(mst|iso)

Convert an ISIS .mst or .iso file to a JSON array

positional arguments:  INPUT.(mst|iso)       .mst or .iso file to read

optional arguments:  ­h, ­­help            show this help message and exit  ­o OUTPUT.json, ­­out OUTPUT.json                        the file where the JSON output should be written                        (default: write to stdout)  ­c, ­­couch           output array within a "docs" item in a JSON document                        for bulk insert to CouchDB via POST to db/_bulk_docs  ­m, ­­mongo           output individual records as separate JSON                        dictionaries, one per line for bulk insert to MongoDB                        via mongoimport utility  ­f, ­­subfields       explode each field into a JSON dictionary, with "_" as                        default key, and subfield markers as additional keys  ­q QTY, ­­qty QTY     maximum quantity of records to read (default=ALL)  ­s SKIP, ­­skip SKIP  records to skip from start of .mst (default=0)  ­i TAG_NUMBER, ­­id TAG_NUMBER                        generate an "_id" from the given unique TAG field                        number for each record  ­u, ­­uuid            generate an "_id" with a random UUID for each record  ­t PREFIX, ­­tagprefix PREFIX                        concatenate prefix to numeric field tags (ex. 99                        becomes "v99"  ­n, ­­mfn             generate an "_id" from the MFN of each record                        (available only for .mst input)

luciano@meng$ ./isis2json.py ­husage: isis2json.py [­h] [­o OUTPUT.json] [­c] [­m] [­f] [­q QTY] [­s SKIP]                    [­i TAG_NUMBER] [­u] [­t PREFIX] [­n]                    INPUT.(mst|iso)

Convert an ISIS .mst or .iso file to a JSON array

positional arguments:  INPUT.(mst|iso)       .mst or .iso file to read

optional arguments:  ­h, ­­help            show this help message and exit  ­o OUTPUT.json, ­­out OUTPUT.json                        the file where the JSON output should be written                        (default: write to stdout)  ­c, ­­couch           output array within a "docs" item in a JSON document                        for bulk insert to CouchDB via POST to db/_bulk_docs  ­m, ­­mongo           output individual records as separate JSON                        dictionaries, one per line for bulk insert to MongoDB                        via mongoimport utility  ­f, ­­subfields       explode each field into a JSON dictionary, with "_" as                        default key, and subfield markers as additional keys  ­q QTY, ­­qty QTY     maximum quantity of records to read (default=ALL)  ­s SKIP, ­­skip SKIP  records to skip from start of .mst (default=0)  ­i TAG_NUMBER, ­­id TAG_NUMBER                        generate an "_id" from the given unique TAG field                        number for each record  ­u, ­­uuid            generate an "_id" with a random UUID for each record  ­t PREFIX, ­­tagprefix PREFIX                        concatenate prefix to numeric field tags (ex. 99                        becomes "v99"  ­n, ­­mfn             generate an "_id" from the MFN of each record                        (available only for .mst input)

isis

2jso

n.p y

5050

Carga para o CouchDBCarga para o CouchDB

• lilimp– registros ISIS­JSON tipo 1– subcampos concatenados

• lilacs– registros ISIS­JSON tipo 4– subcampos expandidos em dicionários

5151

LILACS100K no CouchDBLILACS100K no CouchDB

5252

lilimp: subcampos concatenadoslilimp: subcampos concatenados

5353

lilacs: subcampos expandidoslilacs: subcampos expandidos

5454

Teste: tipos de registro LILACSTeste: tipos de registro LILACS

5555

Teste: tipos de registro LILACSTeste: tipos de registro LILACS

5656

Teste: subcampos repetidosTeste: subcampos repetidos

5757

IntroduçãoIntrodução

Revisão da LiteraturaRevisão da Literatura

MetodologiaMetodologia

ResultadosResultados

ConclusãoConclusão

5858

ResultadosResultados

• Levantamento de uma base teórica para estudar o modelo de dados ISIS

• Identificação de SGBDs compatíveis com o modelo de dados ISIS

• Catalogação das variantes de ISIS­JSON• Ferramentas de conversão e análise

• Identificação de inconsistências na base LILACS

5959

De CDS/ISIS para CouchDBDe CDS/ISIS para CouchDB

6060

De CDS/ISIS para CouchDBDe CDS/ISIS para CouchDB

6161

De CDS/ISIS para CouchDBDe CDS/ISIS para CouchDB

6262

IntroduçãoIntrodução

Revisão da LiteraturaRevisão da Literatura

MetodologiaMetodologia

ResultadosResultados

ConclusãoConclusão

6363

ConclusãoConclusão

• Modelo de dados semiestruturado é a teoria que pode apoiar a análise de bases ISIS e planejar sua evolução

• É simples migrar dados de bases ISIS para um SGBD orientado a documentos

• O CouchDB pode aumentar o alcance e a utilidade dos dados, pela facilidade de criar WebServices (AJAX = HTTP + JSON)

6464

Limitações da pesquisaLimitações da pesquisa

• Tamanho da massa de dados– LILACS100K x 18 milhões em MEDLINE

• Foco em um único SGBD (CouchDB)– repetir com MongoDB e outros

• Bibliografia com ênfase em livros e manuais técnicos– aprofundar estudo em artigos científicos

6565

Indicações para continuarIndicações para continuar

• Notação (API) para especificação de esquemas de dados com validação de acordo com metodologias de catalogação

6666

Indicações para continuarIndicações para continuar

• Notação (API) para especificação de esquemas de dados com validação de acordo com metodologias de catalogação

6767

Indicações para continuar (2)Indicações para continuar (2)

• Atualização automática de registros desnormalizados

6868

Indicações para continuar (2)Indicações para continuar (2)

• Atualização automática de registros desnormalizados

6969

Indicações para continuar (2)Indicações para continuar (2)

• Atualização automática de registros desnormalizados

7070

Indicações para continuar (2)Indicações para continuar (2)

• Atualização automática de registros desnormalizados

• Aplicação da teoria a umproblema prático encontradoem sistemas da BIREME e no Google App Engine

Dados duplicados são ruins somente na medida em que o esforço para mantê-los consistentes é oneroso. MONASH, C. A. http://bit.ly/fHp2p4

Dados duplicados são ruins somente na medida em que o esforço para mantê-los consistentes é oneroso. MONASH, C. A. http://bit.ly/fHp2p4

7171

O Modelo de Dados O Modelo de Dados Semiestruturado emSemiestruturado emBases Bibliográficas:Bases Bibliográficas:

do CDS/ISIS ao do CDS/ISIS ao Apache CouchDBApache CouchDB

Luciano G. S. Ramalho

Monografia de GraduaçãoBacharelado em Biblioteconomia

Orientador: Prof. Dr. Marcos MucheroniUSP – ECA – CBDNovembro de 2010

7272

ExtraExtra

7373

Projeto ISIS­DM: ISIS Data ModelProjeto 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– CouchDB, MongoDB– Google Datastore– PostgreSQL (hstore, JSON?)

http://reddes.bvsalud.org/projects/isisnbp/wiki/ISIS-DM

7474

Definição de um esquemaDefinição de um esquema

7575

InstanciaçãoInstanciação

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

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

7676

Acesso a campos e sub­camposAcesso a campos e sub­campos

>>> book.titleu'The Annotated Alice^sDefinitive Edition'>>> print book.title.sDefinitive Edition>>> print book.creators[0].y1832-1898>>> for creator in book.creators:... print '%-12s: %s' % (creator.r, creator[0])Author : Lewis CarrollIllustrator : John TennielEditor : Martin Gardner

>>> book.titleu'The Annotated Alice^sDefinitive Edition'>>> print book.title.sDefinitive Edition>>> print book.creators[0].y1832-1898>>> for creator in book.creators:... print '%-12s: %s' % (creator.r, creator[0])Author : Lewis CarrollIllustrator : John TennielEditor : Martin Gardner

7777

Derivação do esquema a partir Derivação do esquema a partir de uma massa de dadosde uma massa de dados

• schematize.py lê uma base em formato ISIS­JSON e produz o código­fonte de uma subclasse de isisdm.CheckedModel

• Baseado em regras, é influenciado por erros na massa de dados

• Esquema gerado é ponto de partida para um ajuste de acordo com a metodologia

7878

Exemplo: base CDS (WinISIS)Exemplo: base CDS (WinISIS)

7979

Extra 2Extra 2

8080

• Roy Tennant– California Digital 

Library

– Senior Program Officer, Research division, OCLC

• Roy Tennant– California Digital 

Library

– Senior Program Officer, Research division, OCLC

http://www.libraryjournal.com/article/CA250046.html

8181

Porque o MARC deve morrerPorque o MARC deve morrer• Modelo de dados, sintaxe e metodologia de 

descrição (AACR2) entrelaçados• Concebido para capturar e gerar cartões de 

catálogo bibliográficos impressos• Estrutura rígida e plana

– como representar o sumário?

• Isolamento tecnológico– para continuar servindo e inovando,

   precisamos acompanhar o estado da arte