100
UNIVERSIDADE FEDERAL DE SANTA MARIA CENTRO DE TECNOLOGIA CURSO DE CIÊNCIA DA COMPUTAÇÃO ANÁLISE DE BANCOS DE DADOS NOSQL E DESENVOLVIMENTO DE UMA APLICAÇÃO TRABALHO DE GRADUAÇÃO Ivan Isaías Friess Santa Maria, RS, Brasil 2013

Revisão Da Literatura

Embed Size (px)

DESCRIPTION

Acessem o site e cliquem

Citation preview

  • UNIVERSIDADE FEDERAL DE SANTA MARIACENTRO DE TECNOLOGIA

    CURSO DE CINCIA DA COMPUTAO

    ANLISE DE BANCOS DE DADOS NOSQL E

    DESENVOLVIMENTO DE UMA APLICAO

    TRABALHO DE GRADUAO

    Ivan Isaas Friess

    Santa Maria, RS, Brasil

    2013

  • ANLISE DE BANCOS DE DADOS NOSQL E

    DESENVOLVIMENTO DE UMA APLICAO

    por

    Ivan Isaas Friess

    Trabalho de Graduao apresentado ao Curso de Cincia da Computao da Universidade Federal de Santa Maria (UFSM, RS), como requisito

    parcial para a obteno do grau deBacharel em Cincia da Computao

    Orientador: Prof Dr Deise de Brum Saccol

    Trabalho de Graduao N 352Santa Maria, RS, Brasil

    2013

  • Universidade Federal de Santa Maria Centro de Tecnologia

    Curso de Cincia da Computao

    A Comisso Examinadora, abaixo assinada, aprova o Trabalho de Graduao

    ANLISE DE BANCOS DE DADOS NOSQL E

    DESENVOLVIMENTO DE UMA APLICAO

    elaborado por Ivan Isaas Friess

    como requisito parcial para obteno do grau de Bacharel em Cincia da Computao

    COMISSO EXAMINADORA:

    Prof Dr Deise de Brum Saccol (Presidente/Orientador)

    Prof Dr Eduardo Kessler Piveta (UFSM)

    Prof Dr Marcia Pasin (UFSM)

    Santa Maria, 20 de fevereiro de 2013.

  • AGRADECIMENTOS

    Gostaria de agradecer, em primeiro lugar, minha famlia pelo incentivo de sempre. Em especial aos meus pais, pelo apoio, fora e dedicao.

    Agradeo professora Deise pela orientao deste trabalho. banca avaliadora, professor Eduardo e professora Marcia, pelas sugestes de melhorias.

    Tambm agradeo ao Centro de Processamento de Dados (CPD) da UFSM pela chance de realizar um estgio e, em especial, ao colegas do setor de Diviso de Redes e Sistemas Bsicos, pelos ensinamentos e o timo ambiente de trabalho.

    No poderia deixar de agradecer Universidad Nacional del Este (UNE) pela oportunidade que me foi dada de realizar um intercmbio, Facultad Politcnica (FPUNE) pela excelente receptividade que tive. todas as pessoas que pude conhecer e conviver durante o perodo de experincia no Paraguai.

    Enfim, agradeo a todas as pessoas que, de alguma forma, contriburam para que este momento tenha chegado.

  • Nossa maior fraqueza est em desistir.O caminho mais certo de vencer tentar mais uma vez.

    THOMAS EDISON

  • RESUMO

    Trabalho de Graduao Curso de Cincia da Computao

    Universidade Federal de Santa Maria

    ANLISE DE BANCOS DE DADOS NOSQL E

    DESENVOLVIMENTO DE UMA APLICAO

    Autor: Ivan Isaas FriessOrientador: Prof Dr Deise de Brum Saccol

    Local e data da defesa: Santa Maria, 20 de fevereiro de 2013.

    Os bancos de dados NoSQL esto tornando-se cada vez mais conhecidos e utilizados nos ltimos anos, em razo da necessidade de armazenamento de grande quantidade de dados com os quais as organizaes tm que trabalhar e tambm do aumento de usurios dos sistemas. Os bancos de dados tradicionalmente utilizados, como os relacionais, apresentam fatores limitantes devido ao fato de no apresentarem muita flexibilidade na estruturao dos dados. Com isto, os Bancos de Dados NoSQL so uma alternativa que objetiva suprir estas e outras deficincias, como as questes de escalabilidade e disponibilidade do sistema.

    No entanto, os Bancos de Dados NoSQL so recentes e ainda pouco conhecidos, o que poder ser um empecilho no momento de escolher um destes para gerenciamento de uma base de dados. Assim, o objetivo deste trabalho realizar uma pesquisa, selecionando alguns bancos de dados NoSQL e compar-los entre si, mostrando as funcionalidades comuns e as particulares. Aps a comparao, escolhido um Banco de Dados NoSQL, de acordo com as caractersticas de funcionamento, para o desenvolvimento de uma aplicao, que utilizar o prprio banco de dados NoSQL para a realizao de consultas e modificaes de sua base de dados, proporcionando assim um melhor entendimento sobre esta tecnologia.

    Palavras-chave: NoSQL, Banco de Dados.

  • ABSTRACT

    Undergraduate Final Work Undergraduate Program in Computer Science

    Federal University of Santa Maria

    NOSQL DATABASES ANALYSIS AND

    DEVELOPMENT OF AN APPLICATION

    Author: Ivan Isaas FriessAdvisor: Prof Dr Deise de Brum Saccol

    NoSQL databases are becoming more popular and more used in recent years, mainly due to the large amount of data that organizations have to deal with and to the increasing number of system users. Databases commonly used have limiting factors such as the lack of flexibility in structuring data. Thus, NoSQL databases are an alternative that aims to overcome deficiencies like scalability and availability.

    However, NoSQL databases are recent and practically unknown; choose one of these management systems can be an obstacle for managing a database. The goal of this work is to perform a search by selecting and comparing some NoSQL databases, pointing out the common and the particular features. After the comparison, one NoSQL database is chosen according to some features, in order to develop an application that uses the NoSQL database to pose queries and updates over the data, allowing a better understanding of this technology.

    Keywords: NoSQL, databases.

  • LISTA DE FIGURAS

    Figura 2.1: Exemplo documento JSON (Wikipedia, 2012) ...................................................18

    Figura 2.2: Arquitetura Redis (Campanelli, 2011). ................................................................20

    Figura 2.3: Modelo de Cluster no Riak (Riak, 2012). ............................................................23

    Figura 2.4: Cluster do Cassandra (Cassandra, 2012) .............................................................26

    Figura 2.5: Modelo de dados do Apache Cassandra ( Cho, 2010) .........................................27

    Figura 2.6: Repositrio do Apache Cassandra ........................................................................28

    Figura 2.7: Chave Publica do repositrio ...............................................................................28

    Figura 2.8: Instalao do Apache Cassandra ..........................................................................28

    Figura 2.9: Arquitetura HBase ................................................................................................31

    Figura 2.10: Arquitetura CouchDB .........................................................................................33

    Figura 2.11: Arquitetura Cluster MongoDB (Orend, 2010). ..................................................36

    Figura 2.12: Modelo de dados no Neo4j (Neo4j, 2012). ........................................................40

    Figura 3.1: Modelo documento dos metadados ......................................................................45

    Figura 3.2: Documento inserido na coleo "files", incluindo metadados ............................45

    Figura 3.3: Modelo documento na coleo "chunks" .............................................................46

    Figura 3.4: Diagrama de caso de uso da aplicao .................................................................46

    Figura 4.1: Diagrama de classes da aplicao ........................................................................50

    Figura 4.2: Cdigo do mtodo conectar...................................................................................51

    Figura 4.3: Trecho do cdigo do mtodo formataConsulta ....................................................51

    Figura 4.4: Cdigo do mtodo consultaBanco .......................................................................52

    Figura 4.5: Cdigo do mtodo excluir.....................................................................................52

    Figura 4.6: Cdigo do mtodo insereDoc ...............................................................................53

    Figura 4.7: Cdigo do mtodo editarMetadados ....................................................................54

    Figura 4.8: Tela principal Usurio Cliente .............................................................................56

    Figura 4.9: Tela de Autenticao como Administrador ..........................................................56

    Figura 4.10: Tela de Visualizao dos Detalhes .....................................................................57

    Figura 4.11: Tela principal do Administrador .........................................................................59

    Figura 4.12: Tela de Insero de Monografias .......................................................................60

    Figura 4.13: Documento gerado na insero da monografia .................................................61

    Figura 4.14: Caixa de texto para consulta avanada ..............................................................62

    Figura 4.15: Tela de Edio de Monografias. .........................................................................65

  • LISTA DE TABELAS

    Tabela 2.1: Tabela comparativa NoSQL Databases.................................................................42

    Tabela 4.1: Carga de inseres na base dados...........................................................................67

  • LISTA DE APNDICES

    APNDICE A Cdigo fonte da aplicao............................................................................74

    A.1 BuscaDocumento.java....................................................................................................74

    A.2 BuscaDocAdm.java........................................................................................................81

    A.3 NovoDocumento.java.....................................................................................................88

    A.4 EditarDocumento.java....................................................................................................94

    A.5 VisualizarDocumento.java.............................................................................................97

    A.6 TableModelDoc.java......................................................................................................99

    A.7 Metadado.java..............................................................................................................100

  • LISTA DE ABREVIATURAS E SIGLAS

    ACID Atomicidade, Consistncia, Isolamento e Durabilidade

    AGPL Affero General Public License

    API Application Programming Interface

    ASF Apache Software Foundation

    BASE Basically Available, Soft state, Eventual consistency

    BSON Binary JSON

    CQL Cypher Query Language

    HDFS Hadoop Distributed Filesystem

    HTTP Hypertext Markup Language

    JDK Java Development Kit

    JSON JavaScript Object Notation

    NOSQL Not Only Structured Query Language

    REST Representational State Transfer

    SGBD Sistema de Gerenciamento de Banco de Dados

    SGBDR Sistema Gerenciador de Banco de Dados Relacional

    SQL Structured Query Language

  • SUMRIO

    1 INTRODUO....................................................................................................................131.1 JUSTIFICATIVA..........................................................................................................141.2 OBJETIVOS..................................................................................................................141.3 METODOLOGIA.........................................................................................................151.4 ORGANIZAO DO TEXTO....................................................................................15

    2 REVISO DE LITERATURA............................................................................................162.1 NOSQL..........................................................................................................................16

    2.1.1 Chave/Valor............................................................................................................172.1.2 Orientado a colunas................................................................................................172.1.3 Orientado a documentos.........................................................................................182.1.4 Baseado em Grafos.................................................................................................19

    2.2 SGBDs NOSQL............................................................................................................192.2.1 Redis.......................................................................................................................192.2.2 Riak.........................................................................................................................232.2.3 Cassandra................................................................................................................252.2.4 HBase......................................................................................................................302.2.5 CouchDB................................................................................................................322.2.6 MongoDB...............................................................................................................352.2.7 Neo4j......................................................................................................................39

    2.3 COMPARATIVO ENTRE OS BANCOS DE DADOS NOSQL................................413 PROPOSTA DO TRABALHO............................................................................................44

    3.1 PROPOSTA DE DESENVOLVIMENTO...................................................................443.2 DIAGRAMA DE CASOS DE USO.............................................................................46

    3.2.1 Especificao do caso de uso Consultar banco de dados.......................................473.2.2 Especificao do caso de uso Visualizar metadados do documento.......................473.2.3 Especificao do caso de uso Inserir documento...................................................483.2.4 Especificao do caso de uso Alterar documento...................................................483.2.5 Especificao do caso de uso Remover documento...............................................48

    4 DESENVOLVIMENTO DA APLICAO.......................................................................494.1 CLASSES IMPLEMENTADAS..................................................................................49

    4.1.1 Classe BuscaDocumento e Classe BuscaDocAdm.................................................514.1.2 Classe NovoDocumento.........................................................................................534.1.3 Classe EditarDocumento........................................................................................544.1.4 Classe VisualizarDetalhes.......................................................................................544.1.5 Classe TableModelDoc e Classe Metadado............................................................54

    4.2 UTILIZAO DA APLICAO...............................................................................554.2.1 Utilizao como Usurio Cliente............................................................................554.2.2 Utilizao como usurio Administrador.................................................................584.2.3 Tratamento de erros................................................................................................66

    4.3 TESTES DE DESEMPENHO......................................................................................674.4 DOWNLOAD DA APLICAO.................................................................................68

    5 CONCLUSES E TRABALHOS FUTUROS..................................................................69REFERNCIAS......................................................................................................................71APNDICES............................................................................................................................74

  • 13

    1 INTRODUO

    Durante um longo perodo o modelo de dados relacional tem sido amplamente

    utilizado pela maioria dos Sistemas de Gerenciamento de Banco de Dados (SGBD). Ainda

    hoje assim. Entretanto, nos ltimos anos vem ocorrendo um crescimento significativo de

    aplicaes, recursos web e tudo que se refere a sistemas computacionais. Essas aplicaes

    geram grande volume de dados e tm o desafio de servir uma grande quantidade de

    usurios, que esperam o perfeito funcionamento dos sistemas. Nesse cenrio, a utilizao do

    modelo relacional no se mostra to eficiente, uma vez que este modelo possui srias

    limitaes quanto escalabilidade horizontal, j que no foi projetado inicialmente para tal.

    Como organizar os dados de um Sistema de Gerenciamento de Banco de Dados Relacional

    (SGBDR) em sistemas distribudos complexo, quase sempre se acaba recorrendo

    escalabilidade vertical para aumento de desempenho, ou seja, faz-se upgrade dos sistemas

    de hardware do servidor. No entanto, a escalabilidade vertical tem limite. Para suprir as

    deficincias encontradas nos SGBDRs e, principalmente, pela necessidade de escalabilidade

    em bancos de dados, sem perda de desempenho, surgem alternativas ao modelo relacional.

    Uma delas, a que ganhou mais destaque, o paradigma NoSQL (Orend, 2010).

    O termo NoSQL foi utilizado pela primeira vez em 1998, por Carlo Strozzi, para

    nomear um SGBD de cdigo aberto desenvolvido por ele e que no oferecia uma interface

    Structured Query Language (SQL), entretanto, ainda era baseado na arquitetura relacional.

    Era um sistema experimental e que no foi muito utilizado. O termo acabou caindo no

    esquecimento at o ano de 2009, quando ressurgiu em um evento promovido por Johan

    Oskarsson e Eric Evans. O evento teve como objetivo discutir o crescente surgimento de

  • 14

    solues open source de armazenamento de dados distribudos no relacionais. A partir de

    ento o termo NoSQL foi redefinido para descrever as solues de armazenamento de dados

    no relacionais, inclusive aquelas j existentes, como o caso do BigTable do Google,

    lanado em 2004, e o Dynamo da Amazon, de 2007, ambas proprietrias. Aps isso, outros

    projetos surgiram, como o Cassandra, o CouchDB, o MongoDB, etc.

    Todas solues apresentam caractersticas em comum e outras particulares. A fim de

    analisar as caractersticas dos bancos de dados NoSQL, ser realizado um estudo em alguns

    bancos existentes e tambm ser desenvolvida uma aplicao para um desses bancos.

    1.1 JUSTIFICATIVA

    Tem-se comentado muito sobre as vantagens de utilizao de banco de dados NoSQL

    como alternativa aos bancos relacionais, principalmente em cenrios onde faz-se necessrio

    o armazenamento de grande volume de dados com alta disponibilidade e grande

    escalabilidade. Muitas empresas (Google, Facebook, Amazon, LinkedIn, Twitter, etc...) tm

    relatado sucesso no uso de banco de dados NoSQL, solucionando assim o problema de

    escalabilidade e desempenho.

    No entanto, preciso entender o contexto e dispor de uma anlise prvia sobre tais

    bancos, de modo a escolher o que oferece as melhores funcionalidades e seja o mais

    apropriado para determinada aplicao.

    Sendo assim, sero selecionados alguns bancos de dados NoSQL, Open Source, para

    a realizao de um estudo e comparao entre eles. A seleo dos bancos privilegia os que

    estejam sendo mais utilizados no mercado, de modo a escolher um deles para o

    desenvolvimento de uma aplicao.

    1.2 OBJETIVOS

    O objetivo do trabalho realizar uma pesquisa selecionando alguns Bancos de Dados

    NoSQL para estudo e comparao, selecionando um dos bancos estudados para o

    desenvolvimento de uma aplicao para manipular dados armazenados neste banco.

  • 15

    1.3 METODOLOGIA

    A metodologia utilizada para atingir o objetivo do trabalho a que segue:

    Pesquisa e seleo de NoSQL Databases;

    Estudo individual de cada banco de dados;

    Comparao dos Bancos de Dados e escolha de um para o desenvolvimento da

    aplicao;

    Definio da aplicao a ser desenvolvida;

    Desenvolvimento da aplicao;

    Testes da aplicao;

    Elaborao da parte escrita.

    1.4 ORGANIZAO DO TEXTO

    O texto encontra-se estruturado da seguinte forma:

    No captulo 2 so abordados os conceitos dos NoSQL Databases, as suas

    caractersticas e subdivises. Alm disso, so apresentados os bancos de dados NoSQL

    estudados neste trabalho e uma anlise comparativa entre eles.

    O captulo 3 apresenta o Banco de Dados escolhido para realizar a implementao de

    uma aplicao, explicando quais motivos levaram escolha deste. Tambm exposta a

    proposta de aplicao desenvolvida, mostrando quais so as funcionalidades contidas na

    ferramenta. Um diagrama de casos de uso usado para auxiliar o entendimento.

    O captulo 4 mostra como foi desenvolvida a aplicao proposta, com uma breve

    explicao sobre a aplicao. Tambm so comentadas quais as tecnologias utilizadas para o

    desenvolvimento e, ainda, so exibidas algumas imagens da ferramenta para auxiliar na

    explicao da utilizao da aplicao.

    O captulo 5 apresenta o encerramento do trabalho, consideraes e sugestes de

    melhorias para trabalhos futuros.

  • 16

    2 REVISO DE LITERATURA

    Este captulo tem por finalidade apresentar os conceitos de algumas tecnologias

    emergentes na Computao, como o caso dos Bancos de Dados NoSQL e o paradigma

    BASE (Basically Available, Soft state, Eventual consistency) e, tambm, apresentar os

    Bancos de Dados NoSQL selecionados para anlise neste trabalho.

    2.1 NOSQL

    Termo que descreve uma nova classe de banco de dados que vm tendo um

    crescimento de uso acentuado nos ltimos anos, principalmente em funo de algumas

    limitaes existentes nos bancos de dados relacionais. Apesar de o termo significar Not Only

    SQL (no apenas SQL), a principal caracterstica desses bancos de no ter comportamento

    relacional. Inclusive, no h nada que impea o uso de linguagem SQL. A implicao do

    termo NoSQL que os objetivos desses bancos de dados, modernos e distribudos, so, na

    maioria das vezes, distintos dos objetivos dos bancos de dados relacionais.

    Os bancos de dados NoSQL geralmente seguem os princpios do paradigma BASE,

    em detrimento das propriedades ACID, priorizando o desempenho e a disponibilidade. Esse

    paradigma fornece aos bancos de dados caractersticas como: a) Basicamente disponvel

    (Basically Available), ou seja, o sistema parece estar funcionando o tempo todo; b) Estado

    leve (Soft State), ou seja, o sistema no precisa ser consistente o tempo todo; c)

    Consistncia eventual (Eventual consistency), ou seja, o sistema torna-se consistente no

    momento devido (Pritchett, 2008).

    Com NoSQL Databases, pode-se gerenciar grande quantidade de dados sem perda

    de desempenho. Isso plausvel porque esses bancos prezam pela inexistncia de transaes

    e clusulas join. Ainda possuem configurao facilitada para escalabilidade horizontal e, na

  • 17

    maioria das vezes, suporte nativo replicao dos dados. A escalabilidade horizontal

    corresponde adio de nodos (mquinas servidoras), enquanto a escalabilidade vertical o

    aumento de desempenho de apenas um servidor central. A escalabilidade vertical pode ter

    um limite de hardware, j na horizontal no h limites de nodos, porm mais complicada

    de ser arquitetada e necessita de facilitadores. No caso, o uso de bancos de dados NoSQL

    um facilitador.

    Outra caracterstica dos NoSQL Databases o armazenamento de dados sem

    estrutura pr-definida, ou seja, no preciso definir no momento de criao do banco os

    tipos de dados que sero armazenados; isso feito dinamicamente, medida que so

    inseridos.

    Os bancos de dados NoSQL so classificados de acordo com a forma de armazenar

    os dados. Existem 4 tipos de categorias: chave/valor, orientado a colunas, orientado a

    documentos e baseados em grafos (Popescu, 2010).

    2.1.1 Chave/Valor

    O armazenamento do tipo chave/valor semelhante ao uso de mapas ou de

    dicionrios, onde os dados so endereados por uma nica chave, permitindo aos clientes

    colocar e solicitar valores por chaves. Esses sistemas podem conter dados estruturados ou

    no estruturados. So teis para operaes simples, que so baseadas somente em atributos

    chave. Por exemplo, sistemas com rpida troca de dados e com frequente escrita. Como a

    maioria dos armazenamentos chave/valor mantm seu conjunto de dados em memria, eles

    so bastante usados para cache de consultas SQL (Leavitt, 2010). Alguns bancos desta

    categoria so: Redis, Riak, Voldemort, MemcacheDB, etc. (FindTheBest, 2012).

    2.1.2 Orientado a colunas

    Um SGBD orientado a colunas armazena seu contedo de forma inversa aos bancos de

    dados orientados a linhas. Este formato de armazenar as informaes torna-se vantajoso para

    Data Warehouses, onde agregaes so processadas sobre uma quantidade de dados de

    caractersticas similares. Nesta categoria esto includos bancos, tais como Cassandra e Hbase

    (FindTheBest, 2012).

  • 18

    2.1.3 Orientado a documentos

    Um banco de dados orientado a documentos armazena, recupera e gerencia dados

    semiestruturados. O elemento dos dados chamado documento. Os documentos so

    endereados no banco de dados via uma chave nica que representa o documento. Uma das

    caractersticas de um banco de dados orientado a documentos que, alm da simples

    chave/valor de pesquisa, possvel recuperar um documento atravs de uma API, ou

    linguagem de consulta disponibilizada pelo banco. Todos os banco de dados correntes

    fornecem suporte a documentos no formato JSON (Leavitt, 2010).

    O JSON um padro aberto de estruturao de dados baseado em texto e legvel por

    humanos, utilizado para a serializao de dados. Foi projetado com o objetivo de ser

    simples, porttil, textual, e um subconjunto do JavaScript e tem se mostrado uma tima

    alternativa ao XML, inclusive sendo nativo de armazenamento em alguns bancos de dados

    (JSON, 2012).

    Um exemplo de documento JSON pode ser visto na Figura 2.1.

    Outro formato de documento utilizado o BSON, semelhante ao JSON, porm com

    armazenado em binrio, consistindo em uma lista de elementos chave/valor, onde a chave

    uma string e o valor pode ser string, inteiro, data, booleano, nulo, objeto BSON ou matriz

    BSON (BSON, 2012).

    Nessa categoria esto includos bancos, tais como: MongoDB, CouchDB,

    Figura 2.1: Exemplo documento JSON (Wikipedia, 2012)

  • 19

    Couchbase, RavenDB, SimpleDB, etc. (FindTheBest, 2012).

    2.1.4 Baseado em Grafos

    O armazenamento baseado em grafos fundamenta-se na teoria dos grafos. Em geral,

    vemos que grafo consiste de ns, propriedades e arestas. Os ns representam as entidades,

    as propriedades representam os atributos e as arestas representam as relaes (Leavitt,

    2010). Como exemplos de bancos de dados desta categoria podemos citar o InfoGrid e

    Neo4j (FindTheBest, 2012).

    2.2 SGBDs NOSQL

    Nesta seo encontra-se o estudo dos Bancos de Dados NoSQL pesquisados para a

    realizao deste trabalho. Os bancos escolhidos para anlise foram aqueles que

    frequentemente so citados como exemplos nas pesquisas anteriores.

    2.2.1 Redis

    O REmote DIctionary Service (Redis) um banco de dados de cdigo aberto do tipo

    chave/valor semi-persistente. Atualmente est na verso 2.6.2. Seu cdigo escrito em

    linguagem C sob a licena BSD e funciona na maioria dos sistemas POSIX, como linux,

    BSD, Mac OS e Solaris.

    O Redis est presente em diversos servios, entre eles o gitHub, o StackOverflow,

    alm de outros. Seu melhor uso em sistemas que exigem rpida troca de dados e muita

    frequncia de escrita, como por exemplo, em aplicaes com dados em tempo real, preo

    das aes, etc. (Seguin, 2012).

    Esse banco de dados referido, inclusive pelo seu autor, como um servidor de

    estrutura de dados, onde suas chaves podem conter strings, hashes, listas, conjuntos e

    conjuntos ordenados.

    Sendo o Redis um banco de dados com armazenamento em memria, o seu ponto

    forte a velocidade de leitura e gravao, podendo chegar a mais de 100.000 operaes por

    segundo (Redmond, 2012).

  • 20

    2.2.1.1 Arquitetura

    O Redis um banco de dados do tipo cliente/servidor. Ele possui um servidor que

    recebe conexes, por padro na porta 6379, e um cliente que se envia comandos atravs de

    um protocolo de comunicao. A Figura 2.2 mostra o diagrama da arquitetura.

    O Redis possui um servidor executando um servio, o redis-server, que conversa

    com os clientes atravs de um protocolo redis. Esse protocolo deve criar uma conexo TCP

    possibilitando que os clientes enviem comandos ao servidor.

    O cliente oficial do redis o redis-cli, desenvolvido em C e executado por linha de

    comando, mas tm sido desenvolvidos outros projetos em diferentes linguagens como C++,

    Haskell, Java, Objective-C, Perl, PHP, Ruby, Python, etc. No site oficial do Redis h uma

    relao dos projetos de clientes (Redis, 2010).

    Os clientes possuem uma srie de grupos de comandos que podem ser executados.

    Esses comandos so enviados ao servidor, que recebe, processa e envia ao cliente uma

    Figura 2.2: Arquitetura Redis (Campanelli, 2011).

  • 21

    resposta. Assim como outros bancos NoSQL, o Redis completamente comprometido com

    velocidade, faz pouco uso de recursos, de segurana e opes de configuraes triviais para

    ganhos de escalabilidade.

    Nota-se tambm que possvel implementar uma arquitetura master/slave no Redis

    Server para ganho de desempenho, sendo possvel replicao dos dados, armazenados em

    memria RAM, para outros servidores, caso faz-se necessrio. Vale ressaltar que o

    importante a quantidade de memria RAM disponvel para o banco de dados, pois todos

    os dados so armazenados em memria, inclusive em uma replicao de servidores

    (Redmond, 2012).

    Outra tcnica que pode ser utilizada a persistncia dos dados da memria do

    servidor master em disco de um servidor slave, evitando uma latncia maior no

    processamento do servidor principal.

    2.2.1.2 Armazenamento

    No que diz respeito ao armazenamento, pode-se dizer que o Redis semipersistente,

    isso porque os dados so obrigatoriamente mantidos na memria RAM. Isso um fator

    limitante para a quantidade de dados armazenados (Ippolito, 2009). Entretanto, tambm

    possvel persistir os dados em disco. Esse procedimento torna-se importante para uma

    possvel recuperao, medida que Redis no oferece tolerncia a falhas e os dados

    mantidos em memria sero perdidos em caso de falha no servidor (Strauch, 2011).

    O Redis um banco de dados do tipo chave/valor, sendo possvel trabalhar com

    strings, colees de listas, de conjuntos, conjuntos ordenados e hashes. No entanto, tudo

    representado e armazenado na memria como string (Tiwari, 2011). De maneira atmica,

    pode-se fazer operao de unio, interseco e diferenas entre conjuntos, alm de trabalhar

    com listas, adicionando e removendo elementos de forma organizada.

    Para o armazenamento em disco, h duas formas de persistir os dados. Uma delas ,

    de tempos em tempos, gravar uma cpia do contedo da memria RAM em disco. Esse

    armazenamento conhecido como persistncia RDB. A outra a persistncia AOF (Append

    Only File), onde cada comando enviado ao servidor anexado em um arquivo de log

    (Redis, 2012).

    Na persistncia RDB so criados snapshots do conjunto de dados que esto na

    memria, que sero guardados em disco em um arquivo. Esse procedimento pode ser

  • 22

    realizado periodicamente caso um nmero mnimo de alteraes tenham sido realizadas.

    Como alternativa, pode ser chamado manualmente atravs dos comandos SAVE ou

    BGSAVE do Redis. J na persistncia AOF todos os comandos recebidos pelo servidor so

    guardados em arquivo de log. Este arquivo pode ser usado para recuperao em caso de

    falha, reconstruindo o conjunto de dados original (Redmond, 2012).

    Como foi comentado anteriormente, possvel utilizar vrios servidores para

    armazenamento dos dados em memria. Tambm possvel utilizar servidores slaves para

    efetuar persistncia dos dados, evitando a perda de desempenho com I/O no servidor

    principal.

    2.2.1.3 Download e instalao

    A seguir ser descrito como efetuar o download do banco de dados Redis e o

    procedimento para sua execuo. A instalao ser efetuada no sistema operacional linux,

    utilizando a distribuio Ubuntu 10.04.

    Em um terminal, digite os seguintes comandos:

    $ wget http://redis.googlecode.com/files/redis-2.4.6.tar.gz

    $ tar xzf redis-2.4.6.tar.gz

    $ cd redis-2.4.6

    $ make

    Para iniciar o servidor:

    $ src/redis-server

    O cliente oficial pode ser inicializado da seguinte forma:

    $ src/redis-cli

    O Redis possui muitos comandos que podem ser executados, para criar listas,

    colees, conjuntos. A seguir podemos test-lo com o cliente:

    redis> set nome Joo

    OK

    redis> get nome

    "Joo"

  • 23

    2.2.2 Riak

    Riak um banco de dados do tipo chave/valor, distribudo e escalvel. Ele foi

    desenvolvido pela empresa Basho Technlogies, encontra-se atualmente na verso 1.2.0. Ele

    escrito na linguagem Erlang e est sob a licena Apache 2.0. Ele possui pacote para

    instalao nos sistemas operacionais Linux, Mac OS e Solaris. (Riak, 2012)

    2.2.2.1 Arquitetura

    um banco de dados totalmente distribudo. Ele pode ser acessado atravs do

    protocolo HTTP/REST ou de uma interface Erlang nativa. No caso de uma aplicao

    desenvolvida em Erlang, o acesso com a interface nativa pode ser simplificado, nos outros

    casos convm utilizar a API HTTP/REST, j que a maioria das linguagens tem embutidas

    primitivas para requisitar recursos sobre HTTP. H tambm uma srie de bibliotecas para

    clientes em vrias linguagens de programao, como Java, Python e Ruby. Todos os clientes

    oferecem suporte para os mtodos habituais de HTTP: PUT, GET, POST e DELETE.

    O conceito de cluster o ponto central no banco de dados Riak, sendo que no existe

    o conceito de n master, ou seja, todos os ns so iguais, o que d uma maior resistncia a

    falhas, desde que exista a replicao dos dados. Cada cluster um espao inteiro de 160 bits

    Figura 2.3: Modelo de Cluster no Riak (Riak, 2012).

  • 24

    de hashes binrios de pares bucket/chave, divididos em parties iguais. Os servidores

    fsicos, referidos no cluster como ns, executam certo nmero de ns virtuais, os chamados

    vnodes. Cada vnode requisita uma partio deste anel e responsvel por armazenar

    uma poro separada do espao das chaves. O nmero de vnodes por n calculado por

    numero de parties/nmero de ns.

    Na Figura 2.3 pode-se ter uma noo de como o cluster, supondo um anel com 32

    parties em 4 ns fsicos, cada n fsico ser responsvel por 8 vnodes.

    Os ns podem ser adicionados ou removidos do cluster de forma dinmica, sem

    reiniciar o servio, e o Riak se encarregar da distribuio dos dados. A replicao faz parte

    nativamente do Riak (Riak, 2012).

    2.2.2.2 Armazenamento

    Quanto ao armazenamento, Riak composto por trs conceitos: buckets, chaves e

    valores. Buckets so semelhantes colees, ou a tabelas, e agrupam objetos relacionados

    ou semelhantes. Os buckets possuem algumas propriedades que definem como os objetos

    so armazenados nele, como, por exemplo, a varivel n_val que define quantas vezes um

    objeto ser replicado no cluster, sendo til para o caso de falha em um n.

    Buckets e chaves so as nicas maneiras de organizar os dados no Riak. Os dados

    so armazenados e referenciados pelo par bucket/chave. Cada chave est ligada a um nico

    valor que pode ser de qualquer tipo, desde texto plano, arquivos binrios, html ou at

    mesmo documentos no estilo JSON, inclusive, sendo referenciado por alguns como uma

    espcie de armazenamento do tipo orientado a documentos (Riak, 2012).

    2.2.2.3 Download e instalao

    Possui pacotes para instalao em sistema linux, Mac OS e Solaris. Para instalar o

    Riak, basta acessar o site http://basho.com/resources/downloads/ e efetuar o download do

    pacote especfico. No caso, a instalao foi realizada no Ubuntu 10.04.

    Depois de efetuado o download, basta indicar o comando de instalao:

    $ dpkg -i riak_1.2.0-1_i386.deb

  • 25

    Aps isso pode-se inserir algum elemento de teste, onde a insero efetuada

    baseada no modelo: http://SERVER:PORT/riak/BUCKET/KEY

    $ curl -v -X PUT http://localhost:8098/riak/favs/db \

    -H "Content-Type: text/html" \

    -d "My new favorite DB is RIAK"

    Assim, foi armazenado no bucket favs, com chave db e o valor, que no caso foi

    o contedo de um documento html.

    Na sequncia vamos incluir um documento estilo JSON com o seguinte contedo:

    {"nickname" : "The Wonder Dog", "breed" : "German Shepherd"}

    $ curl -v -X PUT http://localhost:8098/riak/animals/ace \

    -H "Content-Type: application/json" \

    -d '{"nickname" : "The Wonder Dog", "breed" : "German Shepherd"}'

    No site do Riak http://docs.basho.com/riak/latest/ possvel encontrar alguma

    documentao sobre a utilizao do Riak.

    2.2.3 Cassandra

    Cassandra um banco de dados de armazenamento de dados distribudo, orientado a

    colunas. Escrito em Java, foi desenvolvido inicialmente pelo Facebook e, atualmente, est

    na verso 1.1.5. mantido por desenvolvedores da Apache e colaboradores. Est sob a

    licena Apache 2.0.

    2.2.3.1 Arquitetura

    O Banco de Dados Cassandra foi projetado para ser distribudo ao longo de vrias

    mquinas que operam em conjunto, como uma nica instncia ao usurio final. De maneira

    simplificada, pode-se dizer que Cassandra composto por um cluster, ns, keyspaces e

    famlia de colunas.

  • 26

    A estrutura mais externa o cluster, tambm chamado de anel, como pode ser visto

    na Figura 2.4, isso porque Cassandra atribui dados aos ns do cluster organizando-os em

    forma de anel. Um cluster um continer para keyspaces.

    Os dados so distribudos de forma transparente, qualquer n aceita qualquer

    solicitao (leitura, gravao ou excluso) e encaminha ao n correto, sendo que no existe

    distino, todos os ns so logicamente iguais. possvel ter um cluster com muitos ns,

    que capaz de lidar com uma quantidade enorme de dados, na casa dos petabytes, por

    exemplo.

    2.2.3.2 Armazenamento

    O Keyspace o recipiente para os dados do aplicativo, semelhante a um banco de

    dados no modelo relacional. Da mesma forma que um banco de dados um continer para

    tabelas, um keyspace um continer para uma lista de uma ou mais famlias de colunas.

    Figura 2.4: Cluster do Cassandra (Cassandra, 2012)

  • 27

    Keyspace possui nome e conjunto de atributos que definem o seu comportamento.

    possvel configurar alguns atributos bsicos como, por exemplo, o Replication Factor que

    define o nmero de ns que agiro como cpias de cada registro inserido. importante

    ressaltar que a cada quanto maior este nmero, menor o desempenho. Outra observao faz-

    se quanto ao nmero de keyspaces por aplicao, nada impede que sejam criadas mltiplas

    keyspaces, entretanto, recomenda-se o uso de apenas uma por aplicao (HEWITT, 2010).

    Se o keyspace um continer para famlia de colunas, uma famlia de coluna

    continer para uma coleo ordenada de linhas, cada uma das quais uma coleo ordenada

    de colunas.

    Apache Cassandra considerado livre de esquema, ou seja, as colunas no

    necessariamente precisam conter os mesmos campos, sendo possvel adicionar livremente

    qualquer coluna, de acordo com a necessidade, para qualquer famlia de coluna.

    Na Figura 2.5 podem ser visualizados todos os objetos mencionados acima. H um

    keyspace, duas famlias de colunas contendo linhas que no seguem um esquema fixo.

    Os dados so escritos em estruturas de memria (memtables) e, em seguida, escritas

    em disco, uma vez que a estrutura de memria estiver cheia. Memtable possui tamanho

    padro de 128MB. H algumas questes a ressaltar, todos os dados de uma linha devem

    Figura 2.5: Modelo de dados do Apache Cassandra (Cho, 2010)

  • 28

    caber em uma nica mquina do cluster, para que esse seja replicado. O tamanho mximo

    de uma coluna no pode ultrapassar 2GB e o podem existir no mximo 2 bilhes de colunas

    por linha.

    Como mencionado anteriormente, Apache Cassandra um tima servidor para

    grandes quantidades de dados, com fcil processo de gravao.

    2.2.3.3 Download e instalao

    Antes de instalar o Cassandra, preciso verificar a existncia do Java instalado na

    mquina servidora.

    Para a instalao, recomenda-se adicionar o endereo dos repositrios ao arquivo de

    configurao do Ubuntu /etc/apt/sources.list, como mostra a Figura 2.6.

    Aps isso, pode-se fazer o download da chave pblica do repositrio, seguindo o

    exemplo da Figura 2.7:

    Na Figura 2.8, podem ser vistos os comandos para a instalao do Cassandra no

    Ubuntu 10.04:

    O Cassandra possui um cliente padro para console, que pode ser iniciado pelo

    terminal atravs do comando:

    $ cassandra-cli -host localhost -port 9160

    Para testar, pode-se faz-lo informando alguns comandos bsicos de insero, busca,

    etc. Para isto, cria-se um novo keyspace chamado teste, por exemplo:

    Figura 2.6: Repositrio do Apache Cassandra

    Figura 2.8: Instalao do Apache Cassandra

    Figura 2.7: Chave Pblica do repositrio

  • 29

    $ create keyspace teste;

    A seguir, criar uma nova famlia de colunas, com o nome User:

    $ create column family Usuario with comparator = UTF8Type;

    AND column_metadata = [

    { column_name: primeiro, validation_class: UTF8Type},

    { column_name: ultimo, validation_class: UTF8Type},

    { column_name: idade, validation_class: UTF8Type, index_type: KEYS}

    ];

    Neste exemplo, as colunas so estticas, porque foram definidas anteriormente. Para

    adicionar um elemento, pode-se fazer da seguinte forma:

    $ set Usuario['jsilva']['primeiro'] = 'Joao';

    $ set Usuario['jsilva']['ultimo'] = 'Silva';

    $ set Usuario['jsilva']['idade'] = '56';

    A seguir um exemplo de como criar uma famlia de colunas dinmicas:

    $ create column family Usuario

    WITH comparator = TimeUUIDType

    AND key_validation_class=UTF8Type

    AND default_validation_class = UTF8Type;

    Para consultar algum registro, retornando, por exemplo, o registro anteriormente

    inserido, pode-se realizar da seguinte forma:

    $ get Usuario where idade = '56';

    Existe tambm uma ferramenta grfica para administrar os clusters no Apache

    Cassandra, semelhante ao phpMyAdmin, o Cassandra Cluster Admin. Com ele possvel

    criar, editar, excluir keyspaces, famlias de colunas, exibir, procurar dados e inserir linhas.

    Entretanto, a ferramenta no foi testada.

    Alm do cliente padro, existem clientes para Java, PHP, C++, Perl, entre outros. H

    tambm suporte linguagem de consulta CQL, semelhante SQL, tendo drivers

    disponveis para Java e Python.

  • 30

    2.2.4 HBase

    Hbase um banco de dados orientado a colunas, altamente escalvel e distribudo,

    que suporta armazenamento de dados estruturados para grandes tabelas. Foi desenvolvido, e

    mantido pela Apache Software Foundation (ASF). escrito na linguagem Java, sob a

    licena Apache 2.0. Est atualmente na verso 0.94. Sua utilizao recomendvel quando

    necessrio acesso de leitura/escrita em tempo real e aleatrio para grandes dados (HBase,

    2012).

    2.2.4.1 Arquitetura

    O Hbase um subprojeto do Apache Hadoop, que desenvolve softwares open source

    para computao distribuda e escalvel. De outro subprojeto do Apache Hadoop vm o

    HDFS, sistema de arquivos que oferece acesso com alta taxa de transferncia para os dados

    da aplicao. O Hbase pode ser executado tanto em sistemas de arquivos comuns, como no

    sistema de arquivos HDFS, que tambm desenvolvido pela Apache e oferece acesso com

    alta taxa de transferncia para os dados da aplicao. Entretanto, com o HDFS possvel ter

    uma gama maior de recursos para o Hbase, isto porque so sistemas desenvolvidos em

    paralelo e pela mesma empresa.

    Existem 3 modos de executar o servidor Hbase:

    - Stand-alone, onde uma mquina trabalha sozinha;

    - Pseudodistributed, onde um n fingindo ser um cluster;

    - Fully distributed o modo onde h vrios ns trabalhando em conjunto.

    Na Figura 2.9 possvel visualizar a arquitetura do HBase.

  • 31

    Para executar a forma totalmente distribuda preciso ter um cluster ZooKeeper

    rodando. ZooKeeper um servio de Coordenao para aplicaes distribudas. Ainda

    necessrio ter um servidor master e vrios servidores regionais como mostrado na Figura

    2.X

    2.2.4.2 Armazenamento

    O HBase suporta dados no estruturados e parcialmente estruturados. Para fazer isso,

    os dados so organizados em famlias de colunas. endereado um registro individual,

    chamado de clula no Hbase, com uma combinao de row, column e timestamp. No

    necessrio definir a tabela com antecedncia, pode-se simplesmente nomear uma famlia de

    colunas e ento permitir que a clula se qualifique para ser determinada em tempo de

    execuo. Isso permite que voc seja bastante flexvel e suporta uma abordagem gil de

    desenvolvimento.

    Figura 2.9: Arquitetura HBase.

  • 32

    2.2.4.3 Download e instalao

    O Hbase est disponvel oficialmente para Linux e o download pode ser realizado no

    endereo http://www.apache.org/dyn/closer.cgi/hbase/. Entretanto, no foi obtido sucesso na

    instalao do software no Ubuntu 10.04, mesmo que tenha suporte para este sistema

    operacional. Eram exigidas muitas configuraes adicionais, importaes de bibliotecas e

    instalao do Java. Mesmo realizando o procedimento indicado na documentao, no se

    obteve xito.

    2.2.5 CouchDB

    Apache CouchDB um banco de dados escalvel, tolerante a falhas e orientado a

    documentos de esquema livre. Foi desenvolvido por Damien Kat, ex-desenvolvedor da

    IBM, em 2005. Posteriormente, em 2008, foi repassado Apache, que deu continuidade ao

    projeto. escrito na linguagem Erlang e est sob a licena Apache 2.0. Est na verso 1.2 e

    possui pacote de instalao para Linux, Mac Os e, recentemente, tambm para Windows

    (CouchDB, 2012).

    2.2.5.1 Arquitetura

    O CouchDB utiliza uma API HTTP/REST para a manipulao dos dados, portanto a

    comunicao entre entre cliente e servidor pode ser realizada em qualquer aplicao que

    possa comunicar-se por HTTP. As operaes bsicas de um banco de dados so mapeadas

    para as operaes do protocolo HTTP, como GET, PUT, POST, DELETE, para ler,

    armazenar, substituir e remover objetos armazenados.

    Alm da API REST/HTTP que prov acesso a qualquer aplicao com suporte ao

    protocolo HTTP, o CouchDB oferece um servidor web, chamado Futon, que pode ser

    acessado pelo browser atravs do endereo http://localhost:5984/_utils/, onde possvel

    gerenciar os bancos e documentos individualmente.

    Na Figura 2.X tem-se um modelo de arquitetura do CouchDB, indicando que a

    requisio que feita atravs do cliente HTTP, chegando ao mdulo do CouchDB que trata

    das requisies. Tem-se tambm os processos que esto rodando no servidor e so

  • 33

    responsveis pelas tarefas de replicao, visualizao e armazenamento dos dados.

    A arquitetura do CouchDB consiste em um servidor de banco de dados master que

    possui um ou mais bancos de dados criados. Os bancos so compostos por objetos, que so

    documentos do tipo JSON, de esquema livre, ou seja, em uma mesma base de dados os

    documento no precisam ter os mesmos campos. Entretanto, recomenda-se armazenar

    documentos semelhantes em um mesmo banco de dados.

    CouchDB suporta mltiplas rplicas do banco de dados rodando em diferentes

    servidores e fornece um mecanismo para sincronizao destes dados. H um processo,

    replicador, executando que possibilita informar a origem e o destino do servidor, realizada

    uma verificao pela data e caso houve mudanas, a cpia sobrescrito no servidor slave.

    As replicaes so realizadas de forma assncrona, de forma que no compromete a

    velocidade de escrita e leitura (ANDERSON, 2010).

    2.2.5.2 Armazenamento

    Os documentos so a unidade primria de dados no CouchDB e so constitudos de

    campos de pares chave ou nome e valor. Os nomes das chaves devem ser nicos dentro de

    um documento e o valor atribudo pode ser uma string, nmero, booleano, data, listas,

    entretanto, no podem existir documentos aninhados. Existem dois campos fixos em

    qualquer documento, que servem para identificao nica, um ID do documento e um

    nmero de reviso, onde o ID nico para qualquer novo documento e o campo revisor

    Figura 2.10: Arquitetura CouchDB.

  • 34

    serve para identificar as vrias modificaes realizadas em um documento (Strauch, 2011).

    Um ponto importante sobre o armazenamento que a edio de um documento na

    verdade a criao uma nova verso do documento, com o mesmo identificador ID , com as

    alteraes efetuadas e um novo nmero de reviso. Isto pode ser til muitas vezes, como

    para recuperao de dados em caso de falha, mas tambm desperdiado muito espao em

    disco com arquivos antigos e at certo ponto inteis. As modificaes s podem ser

    realizadas na ltima verso do documento. Tambm, no possvel excluir uma verso,

    somente o documento por completo.

    Para atualizaes de documentos utilizado o modelo lockless, onde o documento

    carregado na aplicao cliente onde se realiza a edio, e guarda-se no banco de dados

    novamente. Caso outro cliente editou o mesmo documento, ser recebido uma mensagem de

    conflito de edio ao tentar salvar. Para resolver este problema, a verso mais recente do

    documento poder ser aberta, isso acontece porque no oferecido mecanismo de bloqueio

    na escrita. As atualizaes de documentos (insero, edio ou remoo) so atmicas, ou

    seja, so totalmente salvos ou nada salvo, no existem salvamentos parciais.

    Os documentos so armazenados utilizando um mecanismo de indexao sobre

    estruturas de rvores B, que so excelentes estruturas para manter os dados classificados e

    propiciam rapidez nas buscas, inseres e excluses de documentos (ANDERSON, 2010).

    2.2.5.3 Download e instalao

    possvel fazer o download atravs do site oficial http://couchdb.apache.org/. H

    pacotes disponveis para Linux, e Mac OS e, desde 2010, tambm para Windows. No

    Ubuntu 10.04, j est includo na central de softwares, ento pode ser instalado pelo

    comando aptitude install couchdb.

    Como o CouchDB tem uma API REST, a conexo entre cliente e servidor pode ser

    realizada entre qualquer aplicao que possua suporte ao protocolo HTTP. Nos exemplos,

    ser utilizado a ferramenta cURL.

    Criando um novo banco de dados Usuario:

    $ curl -X PUT http://127.0.0.1:5984/usuario

    Inserindo um documento banco de dados:

    $ curl -X PUT http://127.0.0.1:5984/usuario/6e1295ed6c29495e54cc05947f18c8af

    \ -d '{Nome: Joao da Silva, Idade: 56}'

  • 35

    2.2.6 MongoDB

    O MongoDB um banco de dados orientado a documentos, livre de esquema, escrito

    em C++, sob a licena AGPL verso 3.0. Foi desenvolvido em um projeto open source,

    impulsionado principalmente pela empresa 10gen, que tambm oferece servios

    profissionais em torno MongoDB. Atualmente, continua sendo mantido pela mesma

    empresa, est na verso 2.2.2 e em constante desenvolvimento. O seu nome, Mongo, deriva

    do adjetivo humongous, monstruoso em portugus (MongoDB, 2012).

    De acordo com seus desenvolvedores, o objetivo principal do MongoDB preencher

    a lacuna entre os bancos de dados de armazenamento chave/valor, rpidos e altamente

    escalveis, e os tradicionais sistemas de gerenciamento de banco de dados relacionais, que

    possuem grande quantidade de recursos. Assim, MongoDB foi projetado para otimizao

    de desempenho, facilidade de escalabilidade horizontal, alta disponibilidade e capacidade

    de consultas avanadas (Strauch, 2011).

    2.2.6.1 Arquitetura

    O aplicativo MongoDB composto por dois tipos de servios, o processo servidor

    mongod que o ncleo do banco de dados e o servio mongos para autosharding. Sharding

    a diviso dos dados em vrios ns, sendo utilizado quando faz-se necessrio

    balanceamento de carga . O processo servidor pode rodar tanto em arquiteturas 32 como 64-

    bit, no entanto, recomendado o uso de 64-bit, uma vez que o tamanho mximo de um

    banco de dados limitado 2GB no modo 32-bit. Alm dos servios do aplicativo servidor,

    h tambm servio cliente mongo, que um cliente shell padro do MongoDB utilizado

    para conectar-se ao servidor atravs da porta 27017. Entretanto, h uma grande variedade de

    drivers oficiais disponveis, como C, C++, Haskell, Java, PHP, entre outros, todos eles

    esto sob a licena Apache. Tambm possvel conectar atravs da interface HTTP/REST

    na porta 28017, permitindo a manipulao de entradas via HTTP.

    O servidor MongoDB pode hospedar mais de um banco de dados, independentes

    entre si, armazenados separadamente. Um banco de dados contm um uma ou mais colees

    constitudas por documentos BSON (Binary JSON), que so estruturados como documentos

  • 36

    JSON, com esquema dinmico, fazendo com que a integrao de dados em certos tipos de

    aplicaes sejam mais fceis e rpidos (MongoDB, 2012).

    As consultas so expressas em sintaxe como JSON e so enviadas ao servidor como

    objetos BSON pelo driver do banco de dados. O modelo permite consultas a todos os

    documentos dentro de uma coleo, incluindo objetos e matrizes incorporadas. MongoDB

    no possui transaes, tampouco joins, ficando a cargo do desenvolvedor implement-las,

    se necessrio, em uma aplicao. possvel inclusive relacionar documentos de colees

    distintas.

    Quanto aos recursos disponveis, vale ressaltar o suporte automtico para a

    realizao de Sharding. O sistema de banco de dados pode ser distribudo atravs de um

    cluster de mquinas. O cluster consiste em trs componentes, ns Shard, servidores de

    configurao e servios de roteamento chamados mongos. Na Figura 2.9, mostrada a seguir,

    possvel visualizar o cluster.

    Os ns Shard so responsveis por armazenar os dados atuais, podendo inclusive ser

    replicados para redundncia em caso de falha. Os servidores de configurao so usados

    para armazenar os metadados e rotear informao do cluster de MongoDB. Os Mongos so

    Figura 2.11: Arquitetura Cluster MongoDB (Orend, 2010).

  • 37

    responsveis por rotear os processos, otimizando o desempenho das tarefas requisitadas

    pelos clientes (Orend, 2010).

    Outro recurso importante o GridFS, que serve para armazenar e recuperar arquivos

    que excedam o limite de 16M dos documentos BSON. Os arquivos so divididos em partes

    e armazenados em uma coleo, em outra coleo so armazenados os metadados do

    arquivo. til para armazenar arquivos grandes, como udio e vdeo (MongoDB, 2012).

    2.2.6.2 Armazenamento

    Quanto ao armazenamento, de forma simplificada pode-se dizer que o servidor

    MongoDB contm um ou mais bancos de dados, independentes, armazenados

    separadamente. Cada banco de dados composto por uma ou mais colees constitudas de

    documentos estruturados BSON, estes, so armazenados como BSON objetos, que so

    binrios codificados como objetos JSON. BSON suporta estrutura de objetos aninhados

    com objetos e matrizes embutidos, assim como JSON. Cabe ressaltar que o tamanho

    mximo de cada documento 16MB (Strauch, 2011).

    Como j mencionado, os documentos no MongoDB so organizados em colees.

    Cada coleo pode conter qualquer tipo de documento, entretanto aconselha-se utilizar uma

    coleo para cada tipo de documento. Cada documento tem um campo de ID, que usado

    como uma chave primria ObjectID. Estes ndices so armazenados em estruturas como

    rvore B. Para permitir consultas rpidas, o desenvolvedor pode criar um ndice para cada

    campo de consulta possvel um documento. MongoDB tambm suporta indexao sobre os

    objetos embutidos e matrizes.

    MongoDB usa arquivos de memria mapeada, que mapeia diretamente um arquivo

    armazenado em disco para um array de bytes em memria virtual, no memria fsica

    RAM, onde a lgica de acesso aos dados implementado usando aritmtica de ponteiro. O

    uso de arquivos mapeados em memria eficiente para melhorar o desempenho (Orend,

    2010).

    2.2.6.3 Download e instalao

    Esto disponveis distribuies binrias para Windows, Mac OS X, Linux e Solaris.

  • 38

    Todo o processo de instalao e execuo descrito aqui foi realizado no Sistema

    Operacional Linux, distro Ubuntu 10.04. Para outros sistemas operacionais, basta acessar o

    site http://www.mongodb.org/downloads e efetuar o download para a distribuio

    especfica.

    Para a instalao do MongoDB deve-se adicionar o endereo deb

    http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen ao arquivo de

    configurao onde esto listados os repositrios utilizados no Ubuntu, este arquivo

    usualmente encontrado no diretrio /etc/apt/sources.list. Em um terminal digite o

    comando aptitude install mongodb-10gen, isto instalar os pacotes necessrios ao

    funcionamento do banco de dados.

    No arquivo /etc/mongo.conf escontra-se as configuraes do servidor, que podem

    ser alteradas de acordo com a necessidade, como porta, local de armazenamento dos dados,

    etc. Por padro, os arquivos de dados so armazenados no diretrio /var/lib/mongodb e o

    log em "/var/log/mongodb.

    Para iniciar o servidor basta chamar o processo mongod atravs do terminal:

    $ service mongodb start

    O servio cliente pode ser inicializado atravs do comando:

    $ mongo

    Por padro, o shell do Mongo se conecta ao banco de dados test, utiliizando a

    interface localhost como padro. Para conectar-se a diferentes bancos, servidor, etc.

    necessrio especificar explicitamente. Com o cliente j conectado ao banco, pode-se

    efetuar alguns testes, como insero, remoo, busca, etc.

    Primeiramente vamos alterar para outro banco de dados, para isto use o comando:

    > use testeDB;

    Com isto passaremos a trabalhar com o banco de dados testeDB que, caso ainda

    no exista, ser criado no momento de insero do primeiro documento. Outro detalhe que

    no necessrio que a coleo exista no momento em que vamos inserir o documento, pois

    ser criada quando da insero do primeiro documento. Agora podemos inserir um

    documento para teste, o faremos no banco que testeDB que estamos trabalhando e na

    coleo, ainda inexistente, testeColecao. Para isto, executamos o comando:

    > db.testeColecao.save({nome: "Joao da Silva", idade: "56"});

    As consultas no MongoDB so baseadas em documentos, ento podemos listas todos

    os documentos na coleo testeColecao com o seguinte comando:

    > db.testeColecao.find( );

  • 39

    Para listar somente os documentos que contenham a chave idade, com valor 56

    procedemos da seguinte maneira:

    > db.testeColecao.find( {idade: 56});

    O MongoDB possui ainda uma srie de operadores para consultas avanadas como

    por exemplo (o significado entre parnteses): $lt (menor que), $lte (menor ou igual que) $gt

    (maior que), $gte (maior ou igual que), $ne (diferente de), entre outros. Na documentao

    oficial possvel consult-los.

    2.2.7 Neo4j

    Neo4j um banco de dados de cdigo aberto, orientado a grafos. Foi desenvolvido

    pela empresa Neo Technology, em 2007. escrito na linguagem Java e possui dois tipos de

    licenas, uma de cdigo aberto, GPLv3 e outra, com os mdulos adicionais, comercial sob a

    licena AGPLv3.

    descrito por seus desenvolvedores como um banco de dados integrado, baseado em

    disco, com mecanismo de persistncia em Java totalmente transacional que armazena dados

    estruturados em grafos. Apresenta transaes ACID, alta disponibilidade (Neo4j, 2012).

    2.2.7.1 Arquitetura e armazenamento

    O Neo4j faz valer a conceito de orientao a grafos, permitindo que os dados sejam

    persistidos, percorridos e visualizados da mesma maneira que os grafos.

    Ao contrrio dos outros bancos de dados NoSQL, o Neo4j mantm algumas

    caractersticas que se tornaram comuns em bancos de dados relacionais, como controle de

    transaes e a propriedade ACID.

    As unidades fundamentais que formam um grafo so os ns e relacionamentos. No

    Neo4j, tanto ns como relacionamentos podem conter propriedades. As Relaes entre ns

    so uma parte chave do banco de dados baseado em grafo, eles permitem encontrar dados

    relacionados.

    Assim como os ns, relacionamentos tambm podem ter propriedades e um

    relacionamento que conecta dois ns, garante que o n inicial e final so vlidos.

    interessante ressaltar que no Neo4j, os relacionamentos so sem esquema definido, ou seja,

  • 40

    podem ser de qualquer tipo.

    As propriedades dos ns e relacionamentos so pares chave/valor, onde a chave

    uma string e os valores podem ser tipos primitivos como string, int, booleano, ou matriz de

    um tipo primitivo. O caminho um ou mais ns de de ligao com os relacionamentos

    (Redmond, 2012).

    O banco de dados Neo4j recomendvel para situaes em que seriam necessrias

    muitas operaes, como pesquisas extremamente complexas nos bancos de dados

    relacionais. Neo4j baseia-se na teoria dos grafos.

    Quanto a disponibilidade, Neo4j foi projetado para ser facilmente replicado entre

    servidor master e slave com uma simples mudana de configurao do servio

    EmbeddedGraphDatabase para o modo de alta disponibilidade

    HighlyAvailableGraphDatabase. Ao executar neste modo, h sempre um nico master e

    zero ou mais slaves. No entanto, o servio de alta disponibilidade s est presente na edio

    comercial.

    O Neo4j possui uma linguagem prpria para consulta, a CQL, que permite uma

    expressiva e eficiente consulta a armazenamento em grafo. A linguagem baseada em pattern

    matching e tem sintaxe semelhante ao SQL (Neo4j, 2012).

    Na Figura 2.10 tem-se um exemplo de um modelo de banco de dados orientado a

    grafo.

    No exemplo da Figura 2.10, existem vrios ns (nmeros 1, 2, 3, 7 e 13) e

    relacionamentos dirigidos declarando que uma pessoa conhece a outra, se esse

    Figura 2.12: Modelo de dados no Neo4j (Neo4j, 2012).

  • 41

    conhecimento pblico ou secreto e o tempo em que se conhecem. Os ns possuem como

    propriedade um nome, as relaes tm propriedade que descrevem o tempo que as pessoas

    se conhecem e dirigido declarando que uma pessoa sabe da outra e se o conhecimento

    publico ou no.

    2.2.7.2 Download e instalao

    Neo4j pode ser baixado diretamente do site oficial http://www.neo4j.org/install . H

    verses para Linux, Mac e Windows.

    Depois de baixar, basta extrair e executar. necessrio ter o java instalado.

    root@note-ivan# tar -xzvf neo4j.tar.gz

    root@note-ivan# cd neo4j

    root@note-ivan:/neo4j# ./bin/neo4j start

    Apesar do Neo4j requerer java para ser executado, o acesso pode ser feito de

    qualquer aplicao que permita a comunicao HTTP, isso porque vem com uma interface

    REST. O acesso pode ser feito pelo navegador atravs do endereo

    http://localhost:7474/webadmin . A partir da interface grfica pode ser realizado todo

    gerenciamento do banco de dados, como incluso e remoo de ns e relacionamentos.

    2.3 COMPARATIVO ENTRE OS BANCOS DE DADOS NOSQL

    Aps o estudo dos bancos de dados NoSQL, apresentado nesta seo uma tabela

    comparativa sobre alguns itens. A comparao leva em considerao para quais sistemas

    operacionais tm-se pacotes de instalao disponveis, o tipo de licena, o design da

    arquitetura, o modelo de dados utilizado, como os dados so armazenados, como possvel

    escalar ou replicar e como pode ser executado. Na Tabela 2.1 pode-se visualizar o quadro

    comparativo entre os bancos de dados NoSQL.

  • 42

    Ano Desenvol-vedor

    Sistema Opera-cional

    Licena Arquitetura Modelo de dados

    Armazena-mento

    Execuo

    Redis

    2009 Salvatore Sanfilippo

    Linux, Mac OS e Solaris

    BSD No distribuida. um servidor de estrutura de dados. Dados podem ser replicados em master / slave

    Chave / valor

    Em memria RAM. Snapshots em disco para durabilidade

    Gerenciamento atravs de programas clientes em C, C++, Java, entre outros.

    Riak

    2010 Basho Tecnologies

    Linux, Mac OS e Solaris

    Apache 2.0

    Distribuda. Ns fsicos compostos de ns virtuais, os vnodes. Dados distribuidos automaticamente no cluster. Fcil adio de mquinas

    Chave / valor

    Em disco. Buckets com pares chave / valor.

    API HTTP / REST. Cliente Erlang nativo ou clientes em diversas linguagens de programao, como java, php e C.

    Cassandra

    2008 Desenvol-vido pelo Facebook.Mantido por ASF

    Linux, Windows

    Apache 2.0

    Arquitetura distribuida. Possvel adicionar ns ao cluster. Replicao de dados entre os ns.

    Orientado a colunas

    Configurvel armazenamento em disco ou memria

    Apache Thrift para acesso em muitas linguagens.

    HBase

    2009 ASF Linux Apache 2.0

    Roda sobre o HDFS. Suporta tanto arquitetura totalmente distribuda, como independente

    Orientado a colunas

    Configurvel armazenamento em disco ou memria

    CouchDB

    2005 Damien Katz (ex IBM). Mantido por ASF

    Linux, Mac OS e Windows

    Apache 2.0

    Arquitetura distribuda com replicao bidirecional (sincronizao) dos dados.

    Orientado a documen-tos

    Documentos JSON em disco, rvores B para indexar. Mantm verses.

    Oferece API REST/HTTP.Tambm um gerenciador web chamado Futon

    MongoDB

    2007 10gen Windows, Mac OS X, Linux e Solaris

    AGPL Cliente / servidor. Servio mongos define para qual servidor enviar requisio. Dados distribudos automaticamente entre os ns.

    Orientado a documen-tos

    Coleo de documentos armazenados no disco, organizados em forma rvore B

    Drivers oficiais disponveis para C, C++, Haskell, Java, JavaScript, Perl, PHP, entre outros

    Neo4j

    2007 Neo Technology

    Linux, Mac e Windows

    GPLv, AGPL e comercial

    Replicao dos dados master / slave

    Orientado a grafos

    API REST e gerenciamento web

    Tabela 2.1: Tabela comparativa NoSQL Databases.

  • 43

    Pelos estudos realizados e pela Tabela 2.1 de comparao, possvel identificar que

    a maioria dos bancos de dados NoSQL testados so suportados pelos principais sistemas

    operacionais. A maioria deles tambm possui uma arquitetura distribuda, ou seja, esto

    presentes em vrios ns no mesmo servidor, ou em servidores distintos.

    Em relao ao armazenamento, alguns so simples pares de chave/valor, enquanto

    outros possuem uma estrutura mais complexa, como o caso do Neo4j. medida que as

    estruturas tornam-se mais complexas pode-se acabar tendo perda de desempenho na escrita

    dos dados.

    Quanto ao gerenciamento, alguns possuem gerenciamento web nativo, enquanto a

    maioria pode ser acessada por clientes padres no shell ou atravs de bibliotecas para as

    diversas linguagens de programao.

    No captulo seguinte, ser descrito a escolha de um dos bancos de dados estudados,

    os motivos que levaram a esta escolha e a proposta de desenvolvimento de uma aplicao,

    que outro objetivo deste trabalho.

  • 44

    3 PROPOSTA DO TRABALHO

    Neste captulo apresentada a proposta para o desenvolvimento de uma aplicao

    que utilizar um dos Bancos de Dados NoSQL estudados. A aplicao serve para consultar,

    inserir, alterar e remover objetos da base de dados, demonstrando o funcionamento em um

    sistema real.

    3.1 PROPOSTA DE DESENVOLVIMENTO

    A aplicao desenvolvida tem com objetivo o acesso a um banco de dados NoSQL,

    efetuando consultas, inseres, edies e remoes de registros da base de dados.

    Para o desenvolvimento da aplicao foi escolhido o Banco de Dados MongoDB. A

    escolha deu-se pelo fato do MongoDB ser um banco de dados relativamente fcil de ser

    instalado e de simples entendimento, ideal para quando se est iniciando em projetos com

    Banco de Dados NoSQL. Inclusive pode ser recomendado para quem est fazendo uma

    transio de bancos de dados relacionais para NoSQL.

    Outros pontos levados em considerao que o banco de dados escolhido deveria ser

    gratuito, preferencialmente sob uma licena open source, estar disponvel para Sistema

    Operacional Linux e possuir pacotes para os outros sistemas operacionais seria um

    diferencial. Alm disso, MongoDB trabalha com documento BSON, que so documentos

    como JSON, porm guardados em forma binria. Estes documentos so um formato leve e

    rpido de intercmbio de dados, sendo inclusive tratados como sucessor do XML. E, por

    fim, a documentao existente no site oficial tambm bastante completa, o que excelente

  • 45

    para comear o estudo de uma nova tecnologia e, h alguns livros sobre o assunto.

    A aplicao foi desenvolvida na linguagem de programao Java, com interface

    grfica. Para o desenvolvimento do cdigo e a interface grfica foi utilizado o software

    NetBeans IDE 7.1 e a interface grfica utiliza a ferramenta Swing. Alm disso, utilizado o

    driver para Java para comunicao entre cliente e servidor. Tanto o driver como a

    documentao encontram-se disponveis no site oficial do MongoDB. O driver est sob a

    licena Apache.

    A aplicao consiste em um Repositrio de Monografias, onde um usurio poder

    acessar, visualizar as informaes e efetuar o download do arquivo com a monografia. As

    inseres, edies e remoes estaro a cargo de um administrador.

    Cada monografia conter os metadados ilustrados na Figura 3.1:

    Estes metadados so includos como um novo documento referente ao valor da chave

    metadata do documento padro criado pelo MongoDB para suportar arquivos anexos. Isto

    pode ser visualizado na Figura 3.2.

    Este documento da Figura 3.2 inserido na coleo files. O MongoDB quebra o

    Figura 3.1: Modelo documento dos metadados

    Figura 3.2: Documento inserido na coleo "files"

  • 46

    arquivo anexo em vrias partes e cada uma delas inserida como um documento na coleo

    chunks, como pode ser visto na Figura 3.3.

    importante ressaltar que este procedimento de quebra, ou sharding, realizado

    automaticamente pelo MongoDB. Ao administrador cabe somente a edio dos metadados

    da Figura 3.1.

    3.2 DIAGRAMA DE CASOS DE USO

    Nesta seo apresentado o diagrama de caso de uso do aplicativo a ser

    desenvolvido. A Figura 3.4 mostra o diagrama.

    A aplicao dividida em duas partes, possui a parte que acessada por qualquer

    usurio cliente e a parte que somente o administrador tem acesso, mediante autenticao no

    Figura 3.3: Modelo documento na coleo "chunks".

    Figura 3.4: Diagrama de caso de uso da aplicao.

  • 47

    banco de dados.

    Nas subsees a seguir so especificados os casos de uso referidos no diagrama da

    Figura 3.4. Para efetuar as as tarefas como Usurio basta ter acesso sem autenticao, para

    acesso como Administrador preciso autenticar-se na base de dados. Portanto, o servidor do

    banco de dados deve ter sido inicializado com opo de autenticao. Alm disso, um

    usurio com permisso de escrita tambm deve ter sido criado anteriormente. Esses detalhes

    no fazem parte da implementao, portanto no sero detalhados.

    3.2.1 Especificao do caso de uso Consultar banco de dados

    Na tela inicial, apresentado ao usurio a opo consultar o banco de dados, isto ,

    buscar registros (documentos) que foram adicionados anteriormente. H uma caixa de texto

    para o usurio digitar uma palavra-chave para busca e uma caixa de seleo informando as

    opes disponveis para a busca. possvel buscar pelo campo Autor, Orientador ou Ttulo.

    Ao clicar no boto de buscar gerada uma lista, disposta em uma tabela, dos registros

    encontrados. Na tabela consta apenas alguns metadados do documento (Ttulo, Autor,

    Orientador e Ano). Neste momento, tem-se a diferenciao entre Usurio Cliente e

    Administrador. Caso esteja conectado como Usurio Cliente, estaro disponveis as opes

    para visualizao completa das informaes dos metadados, atravs do boto Detalhar, e

    tambm a opo para descarregar o arquivo em PDF da monografia referida. Caso esteja

    autenticado como Administrador, estaro disponveis as opes de visualizar os metadados,

    pelo boto Detalhar, editar metadados, atravs do boto Editar, e excluir o documento,

    atravs do boto Excluir. Ainda na tela de Administrador, este poder realizar uma consulta

    avanada atravs de um cone que dar acesso a uma caixa de texto onde dever ser escrita

    a consulta baseada em documento.

    3.2.2 Especificao do caso de uso Visualizar metadados do documento

    Fazendo uma busca com algum critrio de pesquisa, gera-se uma lista com os

    documentos encontrados. Esta consulta pode ser realizada tanto a partir da tela de Usurio

    cliente quanto da tela de Administrador. A partir deste momento, tanto Usurio Cliente

    como Administrador, podem selecionar um elemento da lista e clicar no boto Detalhar.

  • 48

    Isso faz com que uma nova janela seja aberta, fornecendo as informaes de todos os

    metadados do documento, incluindo Ttulo, Autor, Orientador, Tipo, Ano, Semestre e

    Resumo.

    3.2.3 Especificao do caso de uso Inserir documento

    Aps autenticado como Administrador, a tela mostra uma nova opo, que a

    insero de um novo documento. Isto est disponvel atravs de um cone com a legenda

    Inserir Monografia. Aps clicar no cone Inserir Monografia uma nova janela aberta

    solicitando que os metadados da monografia sejam informados (Ttulo, Autor, Orientador,

    Tipo, Ano, Semestre, Resumo) e, tambm, a opo para selecionar o arquivo PDF da

    monografia. Para no ocorrer a insero de arquivos PDF iguais, realizada uma

    verificao do valor hash gerado a partir do arquivo PDF. Efetua-se a busca para averiguar

    se este arquivo j est na base de dados.

    Caso a incluso ocorra com xito, a janela fechada e uma mensagem de sucesso

    mostrada ao Administrador. Entretanto, ocorrendo um erro durante o procedimento de

    insero, este informado ao usurio para que examine as causas.

    3.2.4 Especificao do caso de uso Alterar documento

    Autenticado como Administrador, na tela de consulta, aps a seleo de elemento da

    lista, clica-se no boto de Editar, uma nova janela ser aberta, onde ser possvel alterar

    os metadados do documento.

    Em cenrio normal, os dados so enviados para a o banco e atualizados, entretanto,

    caso ocorra um erro durante o processo ser exibida uma mensagem ao usurio.

    3.2.5 Especificao do caso de uso Remover documento

    possvel remover registros a partir da tela de Administrador. Aps efetuar uma

    consulta, possvel selecionar um item listado e proceder a remoo atravs do boto

    Excluir. Havendo sucesso na remoo, mostrada uma mensagem de operao realizada

    com sucesso. Caso ocorra algum erro na remoo, exibida uma mensagem de alerta.

  • 49

    4 DESENVOLVIMENTO DA APLICAO

    Neste captulo discutida a implementao da ferramenta de gerenciamento do

    repositrio de monografias. Aps isso, ser feito uma anlise do software desenvolvido.

    A aplicao foi desenvolvida em Linguagem Java, utilizando o ambiente de

    desenvolvimento integrado Netbeans 7.1, com interface grfica utilizando as ferramentas do

    Swing. Tambm foi utilizado o driver Java para conexo entre cliente e servidor mongo da

    base de dados.

    A aplicao foi desenvolvida focando somente na parte do Cliente, entretanto, alguns

    pr-requisitos so necessrios do lado do servidor de Banco de Dados. Entre estes, podemos

    destacar a inicializao do servidor com o parmetro para possibilitar autenticao e a

    criao de um usurio e senha, com permisso de escrita no Banco de Dados onde sero

    armazenadas as monografias. Estas particularidades no sero detalhadas porque no fazem

    parte do escopo da aplicao.

    O diagrama de classes apresentado na Figura 4.1 mostra a organizao da aplicao.

    Os atributos foram suprimidos para simplificar o diagrama.

    4.1 CLASSES IMPLEMENTADAS

    Nesta seo apresentado o diagrama de classes da aplicao desenvolvida.

  • 50

    Figura 4.1: Diagrama de classes da aplicao.

  • 51

    Nas subsees a seguir so apresentadas as classes do diagrama de classes e suas

    principais funcionalidades.

    4.1.1 Classe BuscaDocumento e Classe BuscaDocAdm

    Estas classes implementam as interfaces da tela de Usurio Cliente e da tela principal

    do Administrador, respectivamente. Foram colocadas nesta mesma subseo porque so

    classes semelhantes e utilizam os mesmos mtodos de consulta ao MongoDB.

    O primeiro mtodo a ser chamado na aplicao o de conexo com o banco de

    dados, que pode ser visualizado na Figura 4.2. Atravs deste mtodo criada uma conexo

    com o banco que sem mantm ativa durante o perodo de atividade no banco.

    As consultas simples realizadas no painel de busca em qualquer uma das duas

    interfaces passam por um mtodo para a formatao da consulta, isso porque a query a ser

    passada ao banco deve ter a sintaxe de documentos BSON. Na Figura 4.3 temos o cdigo

    do mtodo responsvel pela correta formatao da consulta a ser enviada ao banco.

    Figura 4.3: Trecho do cdigo do mtodo formataConsulta.

    Figura 4.2: Cdigo do mtodo conectar.

  • 52

    O mtodo formataConsulta recebe uma chave (Autor, Orientador ou Titulo) e um

    valor como parmetros e o retorno do tipo BasicDBObject, que a instncia no driver

    Java para a criao de um documento com sintaxe BSON. O retorno ento passado como

    parmetro ao mtodo consultaBanco, como pode ser visualizado na Figura 4.4.

    O mtodo consultaBanco recebe uma query baseada em documento para consulta

    no MongoDB. A consulta realizada e se houver retorno, estes so inseridos na tabela de

    resultado da consulta, vistos nas interfaces de cada classe de busca.

    Ao utilizar a opo de consulta avanada disponvel na tela de interface de

    Administrador, a query passada diretamente como parmetro ao mtodo consultaBanco,

    porque a sintaxe j est formato de documentos BSON.

    Na interface da tela de Usurio, esto disponveis botes para pesquisar ou visualizar

    detalhes dos metadados das monografias e, tambm, o boto para descarregar a monografia.

    J na interface da tela principal de Administrador esto disponveis botes para editar

    metadados, inserir e excluir monografia e para realizar consultas avanadas.

    O mtodo para excluir monografias est implementado na classe BuscaDocAdm.

    Figura 4.4: Cdigo do mtodo consultaBanco.

    Figura 4.5: Cdigo do mtodo excluir.

  • 53

    A Figura 4.5 mostra o cdigo do mtodo para excluso. O mtodo simples, ele

    recebe o identificador de uma monografia selecionada e executa o mtodo remove que

    est disponvel na API do MongoDB.

    4.1.2 Classe NovoDocumento

    Esta classe implementa a interface da tela de insero de monografias e os mtodos

    utilizados para tal. As monografias a serem inseridas so obtidas atravs da captura dos

    metadados digitados na tela e da seleo do arquivo PDF de uma fonte local (disco rgido).

    Na Figura 4.6 tm-se o cdigo do mtodo responsvel pela insero da monografia.

    Os pares chave/valor so capturados a partir da interface e formatados para um documento

    de metadados. O arquivo PDF selecionado e o MongoDB, atravs do mtodo createFile,

    gera um documento especfico com alguns campos padres, como o visto na Figura 3.2.

    O documento com os metadados capturados anteriormente definido como valor da

    chave metadata, s ento a monografia em si guardada no Banco de dados atravs do

    mtodo save.

    Figura 4.6: Cdigo do mtodo insereDoc.

  • 54

    4.1.3 Classe EditarDocumento

    A classe EditarDocumento implementa a interface da tela de alterao dos

    metadados das monografias e o mtodo responsvel por isso.

    Para editar os metadados de uma monografia armazenada no MongoDB utilizado o

    mtodo editarMetadados, que tm um trecho do seu cdigo demostrado na Figura 4.7.

    O mtodo recebe a identificao do documento a ser editado e um novo documento

    de metadados atualizado, que ser substitudo no valor da chave metadata. No driver

    Java, h o mtodo findOne, que retorna o documento correspondente ao valor passado como

    parmetro. Aps definir os novos metadados, guardado novamente na base de dados.

    4.1.4 Classe VisualizarDetalhes

    A classe VisualizarDetalhes implementa a interface da tela para visualizar os

    metadados completos de uma monografia.

    Nesta classe no foram criados mtodos especficos, apenas foram gerados os

    mtodos padres (get e set) para setar os valores dos campos na inicializao dos

    componentes.

    4.1.5 Classe TableModelDoc e Classe Metadado

    As classes TableModelDoc e Metadado implementam, respectivamente, a

    interface da tabela de Resultado de Busca nas telas de Usurio Cliente e Administrador, e o

    tipo de dado que a compe. Ainda na classe TableModelDoc so implementados os

    mtodos para manipulao dos elementos na tabela, como incluir, excluir e selecionar. Estes

    Figura 4.7: Cdigo do mtodo editarMetadados.

  • 55

    mtodos no executam nenhuma ao no MongoDB, somente na tabela. Por exemplo,

    quando procedemos uma consulta na base de dados, o mtodo incluir chamado para que

    cada resultado seja includo na tabela e mostrado para o usurio.

    4.2 UTILIZAO DA APLICAO

    A aplicao desenvolvida atende a dois tipos de usurios, o Usurio Cliente e o

    Usurio Administrador, permitindo ao usurio cliente buscar, visualizar metadados e

    descarregar a monografia, e ao Administrador consultar, visualizar os metadados, editar os

    metadados, remover e inserir monografias no Banco de Dados MongoDB.

    Para seguir uma ordem de execuo normal do aplicativo, primeiramente, ser

    mostrada a utilizao da aplicao para Usurio Cliente, que a primeira tela a ser

    visualizada na aplicao. Posteriormente, ser mostrado o uso a partir da tela principal de

    Administrador.

    4.2.1 Utilizao como Usurio Cliente

    A primeira tela a ser exibida quando a aplicao executada est exposta na Figura

    4.8. Na figura, para melhor explicao, foram dispostos nmeros de 1 a 8 para enumerar as

    aes disponveis para o usurio. Estes nmeros no se encontram na aplicao, somente na

    imagem.

    Detalhando as aes, na sequncia, o nmero 1 (cone Administrador), indica a

    ao do usurio para autenticar-se como Administrador e ter acesso s opes avanadas.

    Aps clicar no cone Administrador, solicitado nome de usurio e senha, anteriormente

    criados, como pode ser visualizado na Figura 4.9.

  • 56

    Figura 4.8: Tela principal Usurio Cliente.

    Figura 4.9: Tela de Autenticao como Administrador.

  • 57

    Seguindo com as aes do usurio da Figura 4.8, o nmero 2 indica a ao para o

    usurio sair do sistema. J o nmero 3 mostra o campo onde digitado o valor a ser

    buscado e, no nmero 4 informado onde deseja buscar, se em Autor, Orientador ou

    Ttulo. No exemplo da Figura 4.8 foi informado o valor maria a ser buscado na chave

    Orientador. Aps informar os dados de busca, a consulta realizada clicando-se no boto

    Pesquisar, referenciado pelo nmero 5; isto faz com que uma tabela com os registros

    encontrados seja gerada abaixo do rtulo Resultado da busca. Lembrando que, para obter

    sucesso na busca, necessrio que monografias tenham sido inseridas anteriormente. Na

    prxima subseo mostrado como inserir monografias. Caso o usurio queira buscar outro

    valor, basta repetir o procedimento a partir do nmero 3, sendo tambm possvel limpar a

    tela de busca clicando no boto Limpar, visto ao lado do nmero 6.

    As ltimas aes disponveis na tela de busca do usurio, so os botes Detalhar,

    referenciado pelo nmero 7, e Descarregar, visto no nmero 8. Para executar ambas

    aes, antes preciso selecionar um item na ta