105
CENTRO ESTADUAL DE EDUCAÇÃO TECNOLÓGICA PAULA SOUZA FACULDADE DE TECNOLOGIA DE LINS PROF. ANTONIO SEABRA CURSO SUPERIOR DE TECNOLOGIA EM BANCO DE DADOS DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS ETSCHEID UM ESTUDO SOBRE A PERSISTÊNCIA POLIGLOTA E SUA APLICAÇÃO EM UMA PLATAFORMA WEB LINS/SP 1º SEMESTRE/2014

DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS …fateclins.edu.br/v4.0/trabalhoGraduacao/mXNIfr3... · DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS ETSCHEID UM ESTUDO SOBRE A PERSISTÊNCIA

  • Upload
    others

  • View
    11

  • Download
    0

Embed Size (px)

Citation preview

Page 1: DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS …fateclins.edu.br/v4.0/trabalhoGraduacao/mXNIfr3... · DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS ETSCHEID UM ESTUDO SOBRE A PERSISTÊNCIA

CENTRO ESTADUAL DE EDUCAÇÃO TECNOLÓGICA PAULA SOUZA

FACULDADE DE TECNOLOGIA DE LINS PROF. ANTONIO SEABRA CURSO SUPERIOR DE TECNOLOGIA EM BANCO DE DADOS

DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS ETSCHEID

UM ESTUDO SOBRE A PERSISTÊNCIA POLIGLOTA E SUA APLI CAÇÃO EM UMA PLATAFORMA WEB

LINS/SP

1º SEMESTRE/2014

Page 2: DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS …fateclins.edu.br/v4.0/trabalhoGraduacao/mXNIfr3... · DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS ETSCHEID UM ESTUDO SOBRE A PERSISTÊNCIA

CENTRO ESTADUAL DE EDUCAÇÃO TECNOLÓGICA PAULA SOUZA

FACULDADE DE TECNOLOGIA DE LINS PROF. ANTONIO SEABRA CURSO SUPERIOR DE TECNOLOGIA EM BANCO DE DADOS

DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS ETSCHEID

UM ESTUDO SOBRE A PERSISTÊNCIA POLIGLOTA E SUA APLI CAÇÃO EM UMA PLATAFORMA WEB

Trabalho de Conclusão de Curso apresentado à Faculdade de Tecnologia de Lins para obtenção do Título de Tecnólogo em Banco de Dados. Orientador: Prof. Me. Anderson Pazin

LINS/SP

1º SEMESTRE/2014

Page 3: DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS …fateclins.edu.br/v4.0/trabalhoGraduacao/mXNIfr3... · DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS ETSCHEID UM ESTUDO SOBRE A PERSISTÊNCIA

(folha de aprovação)

Page 4: DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS …fateclins.edu.br/v4.0/trabalhoGraduacao/mXNIfr3... · DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS ETSCHEID UM ESTUDO SOBRE A PERSISTÊNCIA

Dedicamos este trabalho às nossas famílias, bases das nossas existências, que nos incentivaram e acreditaram na nossa capacidade.

Deise Aparecida Pizo da Silva

Dominik Matthias Etscheid

Page 5: DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS …fateclins.edu.br/v4.0/trabalhoGraduacao/mXNIfr3... · DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS ETSCHEID UM ESTUDO SOBRE A PERSISTÊNCIA

AGRADECIMENTOS

Ao final de mais uma etapa de nossas vidas e início de grandes

oportunidades, agradecemos a Deus, nosso criador, que nos capacitou e que nos

fortaleceu nos momentos mais difíceis.

Agradecemos à Faculdade de Tecnologia de Lins Prof. Antônio Seabra pela

oportunidade e a todos os funcionários e companheiros de classe.

Também agradecemos a todos os professores que nos passaram com tanta

dedicação os seus nobres conhecimentos, e pelos ensinamentos que levaremos por

toda vida.

Em especial agradecemos ao nosso orientador Prof. Me. Anderson Pazin, que

pacientemente abnegou de seu tempo para nos orientar e acompanhar em todas as

fases deste trabalho.

Deise Aparecida Pizo da Silva

Dominik Matthias Etscheid

Page 6: DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS …fateclins.edu.br/v4.0/trabalhoGraduacao/mXNIfr3... · DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS ETSCHEID UM ESTUDO SOBRE A PERSISTÊNCIA

“O que fazemos para nós, morre conosco. O que

fazemos pelos outros e pelo mundo, continua e é

imortal.”

Albert Bigelow Paine

Page 7: DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS …fateclins.edu.br/v4.0/trabalhoGraduacao/mXNIfr3... · DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS ETSCHEID UM ESTUDO SOBRE A PERSISTÊNCIA

RESUMO

Devido à elevada quantidade de dados existentes nas transações on-line, principalmente em sites de relacionamentos sociais, de buscas e de vendas pela internet, observou-se a necessidade do emprego de sistemas de banco de dados com alta performance, capazes de fornecer respostas rápidas nas buscas e consultas. Após a realização de diversas pesquisas bibliográficas para identificar os tipos de tecnologias que podem ser usadas na otimização dos sistemas de vendas on-line, concluiu-se que os banco de dados NoSQL, que são bancos não relacionais, possibilitam respostas muito mais rápidas que os bancos de dados relacionais. Isso ocorre devido às consultas realizadas de maneira simples e operações com processamento rápido. Nos bancos de dados relacionais, utiliza-se o conceito de Atomicidade, Consistência, Isolamento e Durabilidade (ACID), que garante uma consistência de alto nível ao dados armazenados; já na maioria dos não relacionais, o conceito principal é a Consistência Eventual. Um protótipo de site de comércio eletrônico para venda de comida para entrega em domicílio foi desenvolvido para o estudo da utilização de bancos de dados relacionais e não relacionais juntos no mesmo sistema. Para armazenar dados dos restaurantes, dos produtos, dos usuários e os CEPs, foi utilizado um banco de dados relacional, o MySQL, indicado por suas características ACID; para pesquisas, utilizou-se um banco não relacional do tipo chave/valor, chamado Redis. A aplicação de bancos de dados relacionais e não relacionais juntos no mesmo sistema é denominado de persistência poliglota, esta prática pode trazer resultados bastante satisfatórios, uma vez que tira proveito das vantagens dos diferentes tipos de bancos. Palavras-chave: Banco de dados. Persistência poliglota. Redis. NoSQL.

Page 8: DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS …fateclins.edu.br/v4.0/trabalhoGraduacao/mXNIfr3... · DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS ETSCHEID UM ESTUDO SOBRE A PERSISTÊNCIA

ABSTRACT

Due to the high amount of data used in online transactions, especially on social networking, search and e-commerce sites, there is a need to employ high-performance database systems that are able to provide fast responses on incoming requests. After execution of various literature researches to identify some kinds of technologies that can be used for optimizing online sales systems, it was concluded that NoSQL databases, which are non-relational databases, allow much faster responses than relational databases. This occurs because of the simple way how the requests are performed and beacause of the existence of fast processing operations. In relational databases, is used the concept of Atomicity, Consistency, Isolation and Durability (ACID), which ensures a high level of consistency to the stored data; in most of the non-relational databases, the main concept is the Eventual Consistency. An e-commerce site for the sale of delivered food was developed to study the use of relational and non-relational databases together on the same system. To store data of restaurants, products, users, and zip codes the relational database MySQL with ACID characteristics was used; for responding requests, was used a non-relational database of the type key/value, called Redis. The usage of relational and non-relational databases together in the same system is called polyglot persistence; this practice can bring satisfactory results, as it takes advantage of the benefits of different types of stores. Keywords: Database. Polyglot persistence. Redis. NoSQL.

Page 9: DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS …fateclins.edu.br/v4.0/trabalhoGraduacao/mXNIfr3... · DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS ETSCHEID UM ESTUDO SOBRE A PERSISTÊNCIA

LISTA DE ILUSTRAÇÕES

Figura 1.1 - Crescimento em milhões dos e-consumidores no Brasil por ano........... 19

Figura 1.2 - Quantidade de transações por renda familiar ........................................ 20

Figura 1.3 - Quantidade de transações por faixa etária ............................................ 20

Figura 1.4 - Quantidade de transações por escolaridade .......................................... 21

Figura 1.5 - Página inicial do portal Restaurante Web .............................................. 25

Figura 1.6 - Página inicial do portal iFood ................................................................. 26

Figura 1.7 - Página inicial do portal Entrega Delivery ................................................ 27

Figura 1.8 - Página inicial do portal Janamesa.......................................................... 27

Figura 1.9 - Página inicial do portal Comernaweb ..................................................... 28

Figura 1.10 - Página inicial do portal Peixeurbano .................................................... 28

Figura 1.11 - Página inicial do portal Diskcook.......................................................... 29

Figura 2.1 - Arquitetura JSF baseada no modelo MVC ............................................. 31

Figura 2.2 - Ciclo de vida do JavaServer Faces ........................................................ 33

Figura 2.3 - Diagrama de estado de uma transação ................................................. 37

Figura 2.4 - Escolha das propriedades do Teorema CAP ......................................... 38

Figura 2.5 - Agregado no UI é conjunto de várias tuplas de várias tabelas .............. 42

Figura 2.6 - Bancos de dados relacionais x não relacionais ..................................... 44

Figura 2.7 - Par chave/valor ou chave/documento .................................................... 46

Figura 2.8 - Modelo de dados de uma família de colunas ......................................... 49

Figura 2.9 - Exemplo de duas linhas de uma família de colunas .............................. 49

Figura 2.10 - Modelo de uma super coluna ............................................................... 50

Figura 2.11 - Entidades com relacionamentos com propriedades ............................. 51

Figura 2.12 - Estrutura de dados tipo string .............................................................. 53

Figura 2.13 - Estrutura de dados tipo hash ............................................................... 53

Figura 2.14 - Estrutura de dados tipo list ................................................................... 54

Figura 2.15 - Estrutura de dados tipo set .................................................................. 55

Figura 2.16 - Estrutura de dados tipo sorted set ....................................................... 55

Figura 2.17 - Uso de um BD relacional para todos os requisitos de armazenagem .. 56

Figura 2.18 - Exemplo de implementação de persistência poliglota .......................... 57

Figura 3.1 - Modelo de ciclo de vida em cascata ...................................................... 59

Page 10: DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS …fateclins.edu.br/v4.0/trabalhoGraduacao/mXNIfr3... · DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS ETSCHEID UM ESTUDO SOBRE A PERSISTÊNCIA

Figura 3.2 - Modelo de ciclo de vida incremental e iterativo ...................................... 60

Figura 3.3 - Diagrama de Caso de Uso ..................................................................... 64

Figura 3.4 - Diagrama de Classe ............................................................................... 65

Figura 3.5 - Diagrama de Atividade Pesquisar Restaurante ..................................... 66

Figura 3.6 - Diagrama de Sequência Pesquisar Restaurante ................................... 67

Figura 3.7 - MVC Pesquisar Restaurante .................................................................. 67

Figura 3.8 - Diagrama de Atividade Fazer Login ....................................................... 68

Figura 3.9 - Diagrama de Sequência Fazer Login ..................................................... 69

Figura 3.10 - Diagrama MVC Fazer Login ................................................................. 69

Figura 3.11 - Padrão de sincronização MySQL/Redis ............................................... 72

Figura 4.1 - Arquivo context.xml ................................................................................ 75

Figura 4.2 - Arquivo persistence.xml ......................................................................... 75

Figura 4.3 - Classe entidade Produto ........................................................................ 76

Figura 4.4 - Classe EntityManagerUtil ....................................................................... 77

Figura 4.5 - Classe EntityManagerFilter .................................................................... 78

Figura 4.6 - Implementação OpenTransactionInPhaseListener ................................ 79

Figura 4.7 - Trecho do arquivo faces-config.xml ....................................................... 79

Figura 4.8 - Arquitetura em camadas ........................................................................ 80

Figura 4.9 - Template padrão do site ........................................................................ 80

Figura 4.10 - Código-fonte do template padrão ......................................................... 81

Figura 4.11 - Página Cadastro de Restaurante ......................................................... 82

Figura 4.12 - Página Alterar Dados do Restaurante .................................................. 83

Figura 4.13 - Código applicationContext.xml ............................................................. 83

Figura 4.14 - Código applicationContext-security.xml ............................................... 84

Figura 4.15 - Página de Login ................................................................................... 85

Figura 4.16 - Página Manter Cardápio ...................................................................... 85

Figura 4.17 - Página Pesquisar Restaurante ............................................................ 86

Figura 4.18 - Página dos restaurantes encontrados .................................................. 86

Figura 4.19 - Página do cardápio do restaurante ...................................................... 87

Figura 4.20 - Estruturas set e chave/valor ................................................................. 88

Figura 4.21 - Estrutura hash ...................................................................................... 89

Figura 4.22 - Implementação entidade auxiliar CrudEvent ........................................ 90

Figura 4.23 - Método save() utilizado para persistir o evento CRUD ........................ 91

Figura 4.24 - Trecho da implementação da classe RestauranteRN .......................... 92

Page 11: DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS …fateclins.edu.br/v4.0/trabalhoGraduacao/mXNIfr3... · DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS ETSCHEID UM ESTUDO SOBRE A PERSISTÊNCIA

Figura 4.25 - Implementação do método de sincronização MySQL/Redis ................ 93

Figura 4.26 - Implementação do método que processa um evento CRUD ............... 94

Figura 4.27 - Memória RAM ocupada pelo Redis ...................................................... 95

Figura 4.28 - Comparativo de tempo de resposta MySQL x Redis ........................... 96

Page 12: DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS …fateclins.edu.br/v4.0/trabalhoGraduacao/mXNIfr3... · DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS ETSCHEID UM ESTUDO SOBRE A PERSISTÊNCIA

LISTA DE QUADROS

Quadro 1.1 - Produtos mais vendidos no varejo on-line do Brasil em 2011 .............. 19

Quadro 1.2 - Classificação dos canais de distribuição de food service ..................... 23

Page 13: DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS …fateclins.edu.br/v4.0/trabalhoGraduacao/mXNIfr3... · DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS ETSCHEID UM ESTUDO SOBRE A PERSISTÊNCIA

LISTA DE ABREVIATURAS E SIGLAS

ABIA – Associação Brasileira das Indústrias de Alimentos

ABRASEL – Associação Brasileira de Bares e Restaurantes

ACID – Atomicidade, Consistência, Isolamento, e Durabilidade

ACM – Association for Computing Machinery

API – Application Programming Interface

BASE – Basically Available Soft Eventually Consistent

BD – Banco de Dados

BSON – Binary JSON

CAP – Consistency, Availability and Partition tolerancy

CEP – Código de Endereçamento Postal

CRUD – Create, Read, Update and Delete

DAO – Data Access Object

FURPS – Functionality, Usability, Reliability, Performance e Supportability

HTML – Hypertext Markup Language

IBGE – Instituto Brasileiro de Geografia e Estatísticas

IDE – Integrated Development Environment

JAR – Java Archive

JAVA EE – Java Enterprise Edition

JDBC – Java DataBase Connectivity

JNDI – Java Naming and Directory Interface

JPA – Java Persistence API

JPQL – Java Persistence Query Language

JSF – JavaServer Faces

JSON – JavaScript Object Notation

LAN – Local Area Network

MB – Megabyte

MVC – Model View Controller

OEMV – OpenEntityManagerInView

ORM – Object-Relational Mapping

OTAPL – OpenTransactionInApplicationPhaseListener

Page 14: DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS …fateclins.edu.br/v4.0/trabalhoGraduacao/mXNIfr3... · DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS ETSCHEID UM ESTUDO SOBRE A PERSISTÊNCIA

PDF – Portable Document Format

POF – Pesquisas de Orçamento Familiar

PPR – Partial Page Rendering

RAM – Random Access Memory

SEBRAE – Serviço Brasileiro de Apoio às Micro e Pequenas Empresas

SINDRIO – Sindicato de Hotéis, Bares e Restaurantes do Rio de Janeiro

SMS – Short Message Service

SOR – System Of Record

SQL – Structured Query Language

UI – User Interface

WYSIWYG – What you see is what you get

XML – eXtensible Markup Language

Page 15: DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS …fateclins.edu.br/v4.0/trabalhoGraduacao/mXNIfr3... · DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS ETSCHEID UM ESTUDO SOBRE A PERSISTÊNCIA

SUMÁRIO

INTRODUÇÃO ..................................................................................... 17

1 ANÁLISE DE MERCADO .................................................................. 19

1.1 PERFIL DOS CONSUMIDORES DO COMÉRCIO ELETRÔNICO ..................... 19

1.2 USO DE DISPOSITIVOS MÓVEIS ..................................................................... 21

1.3 VENDA ON-LINE DE PRODUTOS ALIMENTÍCIOS ........................................... 22

1.4 PERFIL DOS BARES E RESTAURANTES DO BRASIL..................................... 22

1.5 PORTAL DE VENDAS PARA ESTABELECIMENTOS COMERCIAIS ................ 24

1.6 ANÁLISE DOS PORTAIS PRESTADORES DE SERVIÇOS .............................. 25

2 TECNOLOGIAS ................................................................................. 30

2.1 JAVASERVER FACES ........................................................................................ 30

2.2 PRIMEFACES ..................................................................................................... 33

2.3 SPRING FRAMEWORK E SPRING SECURITY ................................................. 34

2.4 JAVA PERSISTENCE API (JPA) ........................................................................ 34

2.5 BANCOS DE DADOS.......................................................................................... 35

2.5.1 Processos de transações ACID ........................................................................ 35

2.5.2 O Teorema CAP ............................................................................................... 37

2.5.3 Basically Available Soft Eventually Consistent (BASE) .................................... 39

2.5.4 Agregados ........................................................................................................ 40

2.5.5 Tipos de Bancos de Dados .............................................................................. 41

2.5.6 Bancos de Dados Relacionais .......................................................................... 41

2.5.7 NoSQL .............................................................................................................. 43

2.5.7.1 Key/Value stores ........................................................................................... 45

2.5.7.2 Document stores ........................................................................................... 47

2.5.7.3 Column family stores ..................................................................................... 48

2.5.7.4 Graph database ............................................................................................. 50

2.5.8 Redis ................................................................................................................ 52

2.5.8.1 String ............................................................................................................. 52

2.5.8.2 Hash .............................................................................................................. 53

2.5.8.3 List ................................................................................................................. 54

2.5.8.4 Set ................................................................................................................. 54

Page 16: DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS …fateclins.edu.br/v4.0/trabalhoGraduacao/mXNIfr3... · DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS ETSCHEID UM ESTUDO SOBRE A PERSISTÊNCIA

2.5.8.5 Sorted Set ..................................................................................................... 55

2.5.9 Persistência Poliglota ....................................................................................... 56

3 REQUISITOS DO SISTEMA ............................................................. 58

3.1 LEVANTAMENTO DE REQUISITOS .................................................................. 60

3.1.1 Requisitos funcionais........................................................................................ 61

3.1.2 Requisitos não funcionais ................................................................................. 62

3.1.3 As restrições ..................................................................................................... 63

3.2 ANÁLISE DE REQUISITOS FUNCIONAIS ......................................................... 63

3.2.1 Caso de uso: Pesquisar Restaurante ............................................................... 66

3.2.2 Caso de uso: Fazer Login ................................................................................ 68

3.2.3 Caso de uso: Manter Usuário Restaurante ...................................................... 70

3.2.4 Caso de uso: Manter Cardápio ......................................................................... 70

3.3 ANÁLISE DE REQUISITOS NÃO FUNCIONAIS ................................................ 70

3.3.1 Usabilidade ....................................................................................................... 70

3.3.2 Performance ..................................................................................................... 71

3.3.3 Confiabilidade ................................................................................................... 71

3.3.4 Suportabilidade ................................................................................................ 73

4 IMPLEMENTAÇÃO DO SISTEMA ..................................................... 74

4.1 PREPARAÇÃO DO AMBIENTE DE DESENVOLVIMENTO ............................... 74

4.2 CONFIGURAÇÃO JPA E IMPLEMENTAÇÃO DAS CLASSES ENTIDADES ..... 74

4.3 PADRÕES DE CONTROLE DE TRANSAÇÃO ................................................... 76

4.4 ACESSO AOS DADOS ....................................................................................... 79

4.5 LEIAUTE DAS PÁGINAS DO SITE ..................................................................... 80

4.6 IMPLEMENTAÇÃO DOS CASOS DE USO ........................................................ 81

4.6.1 Implementação do caso de uso Manter Usuário Restaurante .......................... 82

4.6.2 Implementação do caso de uso Fazer Login .................................................... 83

4.6.3 Implementação do caso de uso Manter Cardápio ............................................ 85

4.6.4 Implementação do caso de uso Pesquisar Restaurante .................................. 86

4.7 IMPLEMENTAÇÃO DA PERSISTÊNCIA POLIGLOTA ....................................... 87

4.7.1 Modelagem de dados para o banco de dados Redis ....................................... 88

4.7.2 Realização do padrão de sincronização entre MySQL e Redis ........................ 90

4.7.3 Teste de viabilidade da persistência poliglota .................................................. 94

CONCLUSÃO ....................................................................................... 97

Page 17: DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS …fateclins.edu.br/v4.0/trabalhoGraduacao/mXNIfr3... · DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS ETSCHEID UM ESTUDO SOBRE A PERSISTÊNCIA

REFERÊNCIAS BIBLIOGRÁFICAS ..................................................... 99

APÊNDICE A – Comandos Básicos do Redis .................................... 103

Page 18: DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS …fateclins.edu.br/v4.0/trabalhoGraduacao/mXNIfr3... · DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS ETSCHEID UM ESTUDO SOBRE A PERSISTÊNCIA

17

INTRODUÇÃO

A internet está cada vez mais presente nas atividades cotidianas das pessoas

nos últimos anos. As pessoas fazem uso da web com objetivos diversos, entre os

quais: profissionais, educativos, comunicação e entretenimento e compras on-line.

Os sites de buscas e os inúmeros anúncios digitais confirmam que a tendência atual

do mercado é o comércio eletrônico. Segundo notícias publicadas pelo Serviço

Brasileiro de Apoio às Micro e Pequenas Empresas do Estado de São Paulo

(SEBRAESP), em 2011, cerca de 76 milhões de brasileiros de alguma forma

estiveram conectados à internet, e mais de 31 milhões de pessoas compraram em

lojas virtuais (SEBRAESP, 2013). No primeiro semestre de 2012, o Brasil faturou R$

10,2 bilhões nas vendas on-line, isto significou um acréscimo de 21% em relação ao

mesmo período do ano anterior (E-COMMERCEBRASIL, 2013). Isto comprova que

as empresas estão investindo cada vez mais nessa modalidade de comércio. Alguns

fatores contribuíram para o crescimento do e-commerce no Brasil, como: maior

segurança e confiança no momento da compra, reformas governamentais de

incentivo ao comércio virtual e o aumento do uso de pagamentos eletrônicos.

(SEBRAE, 2011)

Pesquisas feitas pela E-COMMERCESCHOOL (2011) relatam a existência de

23 mil lojas virtuais no Brasil. Atraídas pela facilidade de obtê-las, as pessoas

montam suas lojas, entretanto, apenas 30% estão ativas, justificado pela falta de

conhecimento e planejamento. Também há empreendedores que não investem no

comércio eletrônico por possuírem algumas dificuldades para implantarem a venda

virtual. Pode-se afirmar isso através da notícia publicada em BRASIL (2013).

Mas a oportunidade do empreendedorismo online é tão atrativa quanto complexa e exige empreendedores bem preparados e dispostos a assumir riscos. Para quem quer montar uma loja virtual, por exemplo, é preciso ter um site funcional, encontrável em mecanismos de busca, com meios de pagamento confiáveis e logística de entrega eficiente. O empreendedor também deve saber usar ferramentas de marketing digital para divulgar seus produtos a ações estratégicas nas redes sociais. (BRASIL, 2013)

Para os consumidores, poder escolher com privacidade produtos e serviços,

pagá-los e recebê-los no conforto, comodidade e segurança de sua casa, sem

enfrentar filas, sem gastar com locomoção, comparar preços, são algumas das

Page 19: DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS …fateclins.edu.br/v4.0/trabalhoGraduacao/mXNIfr3... · DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS ETSCHEID UM ESTUDO SOBRE A PERSISTÊNCIA

18

vantagens de se fazer compras on-line, basta possuir um dispositivo com conexão à

internet.

Um sistema de plataforma web, direcionado aos estabelecimentos do ramo

alimentício, em que as empresas interessadas cadastram seus produtos e os

consumidores acessam este site para fazer suas compras com serviço de delivery é

uma excelente opção para as empresas, pois não precisam possuir sites próprios

nem investir em desenvolvimento de software.

Um estudo sobre tecnologias e técnicas que possibilitem desenvolver um

sistema eficiente e que ofereça respostas rápidas nas buscas de estabelecimentos e

de produtos desejados foi realizado. Descobriu-se que utilizar um banco de dados

relacional, para armazenar os dados, juntamente com um banco de dados não

relacional, para acelerar as consultas, seria uma solução interessante para obter-se

o resultado esperado.

O uso de mais de um tipo de banco de dados juntos em uma mesma

aplicação é chamado de persistência poliglota, para aplicação deste estudo, foi

desenvolvido um protótipo de plataforma web.

As pesquisas realizadas sobre sites que prestam serviços similares ao portal

a ser desenvolvido estão descritas no primeiro capítulo, no qual constam as

informações de dados levantados na análise de mercado. Compreende alguns

pontos fortes e fracos observados e quais recursos estão sendo utilizados. Neste

capítulo encontram-se ainda as características das empresas, possíveis contratantes

desses serviços, e o perfil dos prováveis consumidores das mesmas.

O segundo capítulo descreve detalhadamente as tecnologias empregadas e

como as mesmas são aplicadas no desenvolvimento do sistema em questão.

A análise de requisitos está descrita no terceiro capítulo, baseada na análise

de negócios, detalhando o funcionamento e o modelo de negócio. Essa análise está

representada pelos Casos de Uso, Diagrama de Sequência, Diagrama de Atividade

e Model View Controller (MVC).

O quarto capítulo contém detalhes de como foram implementadas as

funcionalidades necessárias para o estudo do uso de persistência poliglota, alguns

trechos dos códigos utilizados no desenvolvimento do protótipo e comentários,

seguido das considerações finais e proposta para trabalhos futuros.

Page 20: DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS …fateclins.edu.br/v4.0/trabalhoGraduacao/mXNIfr3... · DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS ETSCHEID UM ESTUDO SOBRE A PERSISTÊNCIA

19

1 ANÁLISE DE MERCADO

O comércio eletrônico cresceu cerca de 30% ao ano na última década,

conforme estudo realizado pela E-bit, com apoio da Câmara Brasileira de Comércio

Eletrônico, que atribui a essa evolução o aumento do número de e-consumidores e a

maior confiança do meio internet. (BRASIL, 2012)

Os empreendedores digitais devem estar atentos às tendências como

mobilidade, nichos de consumo, redes sociais e perfil dos e-consumidores.

Dados levantados pela E-bit indicam que os eletrodomésticos lideraram as

vendas on-line no Brasil em 2011, mas vários outros produtos são comercializados

no mercado virtual brasileiro, conforme demonstrado no Quadro 1.1. (E-

COMMERCEORG, 2012)

Quadro 1.1 - Produtos mais vendidos no varejo on-line do Brasil em 2011 Produtos mais vendidos %

Eletrodomésticos 15 Informática 12 Eletrônicos 8 Saúde e Beleza 7 Moda e Acessórios 7 Fonte: E-Commerceorg, 2012

1.1 PERFIL DOS CONSUMIDORES DO COMÉRCIO ELETRÔNICO

Pesquisas realizadas pela E-bit apresentaram informações sobre o perfil dos

consumidores que compram on-line no Brasil.

Figura 1.1 - Crescimento em milhões dos e-consumidores no Brasil por ano Fonte: E-Commerceorg, 2012 (adaptada pelos autores)

Page 21: DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS …fateclins.edu.br/v4.0/trabalhoGraduacao/mXNIfr3... · DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS ETSCHEID UM ESTUDO SOBRE A PERSISTÊNCIA

20

A Figura 1.1 representa o crescimento em milhões dos e-consumidores por

ano, com um comparativo do ano de 2001 até 2012.

Sessenta por cento dos e-consumidores brasileiros possuem uma renda

mensal entre 1000 e 5000 reais, conforme representado graficamente na Figura 1.2.

Na classificação dada pelo Instituto Brasileiro de Geografia e Estatística

(IBGE) esta faixa salarial corresponde às classes sociais C, D e E.

Figura 1.2 - Quantidade de transações por renda familiar Fonte: E-Commerceorg, 2012 (adaptada pelos autores)

Figura 1.3 - Quantidade de transações por faixa etária Fonte: E-Commerceorg, 2012 (adaptada pelos autores)

Page 22: DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS …fateclins.edu.br/v4.0/trabalhoGraduacao/mXNIfr3... · DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS ETSCHEID UM ESTUDO SOBRE A PERSISTÊNCIA

21

Quanto à faixa etária dos consumidores on-line, a maior percentagem deles,

representando 70%, está entre 25 e 49 anos, conforme demonstrado na Figura 1.3.

Os consumidores que mais compram pela internet possuem curso superior

completo e os que menos compram possuem apenas o ensino fundamental, isso

está representado na Figura 1.4. (E-COMMERCEORG)

Figura 1.4 - Quantidade de transações por escolaridade Fonte: E-Commerceorg, 2012 (adaptada pelos autores)

1.2 USO DE DISPOSITIVOS MÓVEIS

No primeiro semestre de 2012, o Brasil faturou R$ 10,2 bilhões no mercado

on-line, de acordo com dados levantados pelo SEBRAE e publicados pelo E-

COMMERCEBRASIL (2013). As vendas realizadas apenas por meio de dispositivos

móveis movimentaram aproximadamente R$ 132 milhões, segundo a Câmara

Brasileira de Comércio Eletrônico, este segmento está em alta no Brasil, com

estimativa de movimentar cerca de dois bilhões de reais em 2013.

(EBRICKSDIGITAL, 2012)

A empresa M.Sense, especialista em estudos sobre o mercado digital,

realizou uma série de pesquisas no Brasil sobre o mercado mobile. Foram

entrevistadas 1796 pessoas de cinco regiões do país no período de maio e junho de

2012, 45% dos entrevistados possuem smartphones e 16% possuem tablets, a

Page 23: DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS …fateclins.edu.br/v4.0/trabalhoGraduacao/mXNIfr3... · DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS ETSCHEID UM ESTUDO SOBRE A PERSISTÊNCIA

22

maioria mora na região sudeste do Brasil e possui entre 30 e 39 anos. A pesquisa

aponta que um em cada três usuários de smartphones ou tablets já realizou

compras usando seus dispositivos móveis. (EBRICKSDIGITAL, 2012)

1.3 VENDA ON-LINE DE PRODUTOS ALIMENTÍCIOS

De acordo com dados publicados em abril de 2013 pela Associação Brasileira

de Bares e Restaurantes (ABRASEL), o mercado de alimentação fora de casa

faturou aproximadamente 230 bilhões de reais em 2012, tendo uma taxa de

crescimento de 13% em relação a 2011. As vendas realizadas pelos serviços de

delivery estão inclusas nesta estatística, sendo responsável por 8 bilhões de reais.

(ABRASEL, 2013)

Os serviços pela web e aplicativos móveis complementam o serviço

tradicional das chamadas telefônicas para realização de pedidos de comida pronta.

Os serviços on-line já são utilizados por dois milhões de consumidores no Brasil,

representando 2% do faturamento deste mercado no país. (ABRASEL, 2013)

Apesar de não estar na lista dos produtos mais vendidos pela internet, o

serviço de entrega de comida está cada vez mais presente no comércio virtual. A

revista on-line Hotelnews publicou uma matéria em 2011 explicando a preferência do

consumidor em pedir comida pela internet e não por telefone. As principais

justificativas dessa escolha são as várias tentativas de discagem a um número

bastante ocupado ou a possibilidade de o atendente não compreender corretamente

a solicitação do consumidor e enviar o pedido errado. Uma vez que, optando pelo o

uso da internet, é possível consultar sem pressa os restaurantes, preços, cardápios

e formas de pagamento, montar o prato e ainda acompanhar o andamento do

pedido. (HOTELNEWS, 2011)

1.4 PERFIL DOS BARES E RESTAURANTES DO BRASIL

A empresa ECD Consultoria Especializada em food service define o termo

food service como a venda de alimentos e bebidas para consumo imediato,

preparados por restaurantes, padarias, lanchonetes e outros, e consumido no

próprio estabelecimento ou em outros locais. Esse mercado envolve toda cadeia de

produção, distribuição de alimentos, insumos, equipamentos e serviços que atendam

Page 24: DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS …fateclins.edu.br/v4.0/trabalhoGraduacao/mXNIfr3... · DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS ETSCHEID UM ESTUDO SOBRE A PERSISTÊNCIA

23

os fornecedores de alimentos e bebidas prontos para o consumo.

(ECDFOODSERVICE, 2010)

A Associação Brasileira das Indústrias de Alimentos (ABIA) afirma que em

2010, havia no total mais de 1,4 milhões de estabelecimentos de food service ativos

em todo território nacional, sendo que, a maioria, é de microempresas ou empresas

de pequeno porte. São definidos vários subcanais de distribuição de refeições

preparadas (ABIA, 2010). No Quadro 1.2 está representada a classificação dos

canais de distribuição mais importantes.

Quadro 1.2 - Classificação dos canais de distribuição de food service

Canal de distribuição Definição Tipo de estabelecim entos

Comercial

O objetivo principal é a geração de lucro com a venda de refeições. É o

núcleo do negócio.

Restaurantes, churrascarias, pizzarias, lanchonetes,

padarias, bares, entre outros

Comercial – serviço

A alimentação é um serviço e não a atividade principal do

negócio, mas com objetivo de lucro.

Hotéis, motéis, escolas, hospitais, catering (aéreo,

terrestre e marítimo)

Comercial – alternativo

Venda de refeições prontas para o consumo imediato ou posterior. Fonte alternativa

de lucro.

Lojas de conveniência, rotisserias e lanchonetes dentro de supermercados

Social A alimentação é um serviço. O objetivo não é o lucro.

Exército, merenda escolar, presídios,restaurantes

populares Fonte: ECDFoodservice, 2010 (adaptado pelos autores)

Os resultados das Pesquisas de Orçamento Familiar (POF), realizadas pelo

IBGE, revelam que houve um aumento de 7% no consumo de refeições fora do lar

pelas famílias brasileiras entre 2002/2003 e 2008/2009. Em 2002/2003, das

despesas totais com alimentos, foram gastos 24,1% com food service (IBGE, 2004);

já em 2008/2009, esse gasto representou 31,1% (IBGE, 2010). Isso indica uma

mudança no padrão de consumo alimentar dos brasileiros.

Dados fornecidos pela ECD demonstram o aumento do número das

transações de food service por dia e o aumento do valor per capita dessas

transações no período de 2004 até 2010. Enquanto o número de transações diárias

neste período aumentou de 56,4 milhões para 61,7 milhões, ou seja, houve um

aumento de 9,3%, o valor per capita no mesmo período aumentou de R$ 4,00 para

R$ 8,28, significando um acréscimo de 107%. Na análise desses valores deve ser

Page 25: DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS …fateclins.edu.br/v4.0/trabalhoGraduacao/mXNIfr3... · DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS ETSCHEID UM ESTUDO SOBRE A PERSISTÊNCIA

24

considerado que no período junho/2004 até junho/2010 houve uma inflação

acumulada de 38,71% (Índice IGP-10). (ECDFOODSERVICE, 2010)

1.5 PORTAL DE VENDAS PARA ESTABELECIMENTOS COMERCIA IS

Além dos restaurantes que disponibilizam cardápios em seus próprios sites

para pedidos on-line, existem estabelecimentos que optam por outros meios, como

os portais que reúnem diversos bares e restaurantes com variados tipos de comida.

Análises feitas nesses portais demonstram como eles funcionam. O consumidor

pode cadastrar-se gratuitamente preenchendo um formulário on-line com seus

dados pessoais, para concluir o cadastro, ele precisa normalmente aceitar o termo

de uso do site. Ao informar a sua localização é possível escolher os

estabelecimentos filiados que realizam a entrega no seu endereço. Em poucos

passos, o consumidor escolhe seu prato, realiza seu pedido, podendo optar por

pagar no momento do pedido ou na entrega, e ainda pode acompanhar o

andamento de sua solicitação. Também há a possibilidade de fazer agendamento

para entrega futura. Após utilizar os serviços, o consumidor pode avaliar o

estabelecimento para servir de referência para outros consumidores. Vários desses

sites oferecem ainda a opção de aplicativos para dispositivos móveis.

O estabelecimento, para filiar-se ao portal, faz um cadastro e fecha um

contrato com a empresa prestadora dos serviços. Geralmente a empresa não cobra

mensalidade nem taxa de adesão, apenas um percentual sobre cada venda

realizada pelo site, a maioria, na faixa de 10% sobre o valor do pedido. O cardápio é

enviado pelo restaurante e postado no site, assim como suas condições de entrega,

taxas, horários de funcionamento e outras regras de negócio pertinentes.

A cada pedido feito, o estabelecimento recebe uma notificação, que pode ser

enviada pelo site por meio de aviso na tela do computador, sinal sonoro,

equipamentos específicos desenvolvidos para esta finalidade ou outro dispositivo de

comunicação. O recebimento do pedido é confirmado pelo estabelecimento em

tempo real.

A revista on-line Hotelnews (2011) publicou uma entrevista feita com o

presidente do Sindicato de Hotéis, Bares e Restaurantes do Rio de Janeiro

(SINDRIO), Pedro Lamare, que cita algumas vantagens desse tipo de serviço para o

empreendedor:

Page 26: DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS …fateclins.edu.br/v4.0/trabalhoGraduacao/mXNIfr3... · DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS ETSCHEID UM ESTUDO SOBRE A PERSISTÊNCIA

25

Um dos principais veículos on-line do setor aponta que o número de sites de restaurantes no Rio de Janeiro cresceu 35% desde o início do ano. A maior parte utiliza os serviços de páginas terceirizadas para o serviço de delivery, o que reduz gastos com a implantação do sistema e fica mais cômodo para o cliente, que ganha várias opções em um só lugar. No caso das reservas, elas costumam ser feitas pelo site do próprio estabelecimento. [...] É importante o estabelecimento saber se posicionar nas redes sociais. (HOTELNEWS, 2011)

1.6 ANÁLISE DOS PORTAIS PRESTADORES DE SERVIÇOS

Os sites de maior relevância que prestam os serviços de vendas delivery para

os estabelecimentos foram analisados e foram detectadas algumas diferenças entre

eles: design, mecanismos de busca, navegabilidade, tecnologias variadas para

notificações ao estabelecimento e outras funcionalidades. As peculiaridades da área

restrita ao estabelecimento no site não puderam ser comparadas por serem de

acesso privado.

A maioria dos sites pesquisados está no mercado a menos de quatro anos,

eles possuem estabelecimentos cadastrados em poucas cidades localizadas

aleatoriamente no território nacional.

A seguir estão algumas imagens de portais analisados e as descrições de

suas características.

A página inicial do site Restaurante Web está representada na Figura 1.5.

Figura 1.5 - Página inicial do portal Restaurante Web Fonte: Restauranteweb, 2013

Page 27: DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS …fateclins.edu.br/v4.0/trabalhoGraduacao/mXNIfr3... · DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS ETSCHEID UM ESTUDO SOBRE A PERSISTÊNCIA

26

O Restaurante Web possui cerca de 20 mil estabelecimentos cadastrados em

aproximadamente 25 estados brasileiros. É um dos pioneiros desse tipo de serviço

no Brasil. Está presente em várias redes sociais. Apesar do tempo de mercado e

expansiva abrangência, o Restaurante Web apresenta dois pontos fracos: não

possui aplicativos para dispositivos móveis e a busca é realizada por meio da

informação do Código de Endereçamento Postal (CEP) ou endereço, sem a

possibilidade de descobrir o CEP e não possui cadastro de todos os endereços. Em

contrapartida, o site fornece o endereço de cada estabelecimento e sua localização

utilizando o mapa do Google.

O portal iFood está no ar desde 2011, possui aproximadamente 1000

estabelecimentos cadastrados e atende várias cidades do estado de São Paulo e

alguns outros estados do Brasil. Possui aplicativos para dispositivos móveis iOS e

Android, recebe aproximadamente 50 mil pedidos por mês, sendo 20% através

destes aplicativos. Está presente nas redes sociais e permite ao consumidor utilizar

o cadastro do Facebook para logar-se. Na Figura 1.6 está a página inicial do iFood.

Figura 1.6 - Página inicial do portal iFood Fonte: Ifood, 2013

No Entregadelivery a busca pelo CEP é direcionada ao site da Empresa

Brasileira de Correios e Telégrafos, apesar disso favorecer uma busca confiável,

pode provocar a desistência do consumidor a continuar seu pedido. Um ponto

negativo desse site é que ele não disponibiliza o uso de aplicativos para dispositivos

Page 28: DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS …fateclins.edu.br/v4.0/trabalhoGraduacao/mXNIfr3... · DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS ETSCHEID UM ESTUDO SOBRE A PERSISTÊNCIA

27

móveis. O Entregadelivey tem sua página inicial representada na Figura 1.7.

Figura 1.7 - Página inicial do portal Entrega Delivery Fonte: Entregadelivery, 2013

O site Jánamesa possui apenas 22 estabelecimentos e todos da cidade de

São Paulo em seu cadastro, portanto sua busca restringe ao consumidor em

procurar seu CEP apenas da cidade. Tem como diferencial o atendimento on-line

para contato em tempo real com o consumidor que queira dirimir suas dúvidas ou

solicitar informações. O portal também não possui aplicativos para dispositivos

móveis, mas permite o uso do cadastro do Facebook para o consumidor logar-se.

A imagem do Janamesa pode ser vista na Figura 1.8.

Figura 1.8 - Página inicial do portal Janamesa Fonte: Janamesa, 2013

Page 29: DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS …fateclins.edu.br/v4.0/trabalhoGraduacao/mXNIfr3... · DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS ETSCHEID UM ESTUDO SOBRE A PERSISTÊNCIA

28

O Comernaweb possui aplicativos para dispositivos móveis e uma

comunidade on-line para troca de informações sobre os estabelecimentos. Seu

diferencial é a opção para o consumidor poder fazer reserva nos estabelecimentos

cadastrados.

Na Figura 1.9 está a imagem do portal Comernaweb na sua página inicial.

Figura 1.9 - Página inicial do portal Comernaweb Fonte: Comernaweb, 2013

Figura 1.10 - Página inicial do portal Peixeurbano Fonte: Peixeurbano, 2013

Page 30: DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS …fateclins.edu.br/v4.0/trabalhoGraduacao/mXNIfr3... · DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS ETSCHEID UM ESTUDO SOBRE A PERSISTÊNCIA

29

No mercado desde 2010, o Peixeurbano tem em seus cadastros mais de 500

estabelecimentos localizados principalmente nas capitais São Paulo e Rio de

Janeiro. Ele possui atendimento on-line e aplicativos para iPhone, Android e

Blackberry e também conta com opção de reserva on-line. Mas o delivery do

Peixeurbano é apenas uma área desse site, ele não é exclusivo para este tipo de

serviço. A Figura 1.10 representa o portal Peixeurbano.

No ar desde 1997, o Diskcook não realiza apenas os pedidos, como também

faz o serviço de entregas e cobra a taxa de entrega diretamente dos consumidores.

Ele possui estabelecimentos localizados nas capitais São Paulo, Rio de Janeiro e

Curitiba.

A página inicial do Diskcook está demonstrada na Figura 1.11.

Figura 1.11 - Página inicial do portal Diskcook Fonte: Diskcook, 2013

No capítulo seguinte estão descritas as principais tecnologias utilizadas no

desenvolvimento do site.

Page 31: DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS …fateclins.edu.br/v4.0/trabalhoGraduacao/mXNIfr3... · DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS ETSCHEID UM ESTUDO SOBRE A PERSISTÊNCIA

30

2 TECNOLOGIAS

Algumas das tecnologias analisadas para o desenvolvimento do portal de

busca de restaurantes para entrega de comida estão abordadas neste capítulo. A

aplicação web é composta por linguagens de programação, que são usadas para

implementar a lógica do projeto; web frameworks, para facilitar a construção da

interface do usuário (User Interface - UI); bancos de dados, que armazenam todas

as informaçãos; e outras interfaces de programação de aplicativos (Application

Programming Interface - API).

Inicialmente estão relatados os frameworks e as bibliotecas para aplicações

web utilizados no desenvolvimento do portal.

2.1 JAVASERVER FACES

JavaServer Faces (JSF) 2.0 é um framework que incorpora as características

de uma tecnologia MVC para aplicações web e de um modelo de interfaces gráficas

baseada em eventos. Por seguir o padrão MVC, ele separa a visualização, o

controle e o modelo, que são as regras de negócio. No JSF, o modelo representa os

objetos do negócio e executa uma lógica de negócio ao receber os dados que vêm

da visão, esta, por sua vez, é composta pela hierarquia dos componentes UI

(Component Tree) e o controle é composto por FacesServlet, por arquivos de

configurações, e por um conjunto de manipuladores de ações e observadores de

eventos. O FacesServlet é um servlet que recebe as requisições da web e remete

uma resposta ao modelo. Os arquivos associam e mapeiam as ações e definem as

regras de navegação e os manipuladores de eventos recebem os dados da visão e

acessam o modelo e devolvem o resultado ao FacesServlet. (PITANGA, 2013)

O JSF tem duas funções principais: a primeira é gerar uma UI, normalmente

uma resposta de um documento Hypertext Markup Language (HTML), encaminhado

para um navegador e visualizado como uma página web. Essa UI é representada no

servidor por meio de uma árvore de componentes. Há um mapeamento um para um

entre os elementos da árvore e os elementos da UI. Essa separação entre a árvore

de componentes e o UI permite a JSF trabalhar com diferentes tipos de linguagens

de marcação ou ambientes alternativos de navegadores como, por exemplo, desktop

Page 32: DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS …fateclins.edu.br/v4.0/trabalhoGraduacao/mXNIfr3... · DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS ETSCHEID UM ESTUDO SOBRE A PERSISTÊNCIA

31

ou smartphones. A segunda função do JSF é responder aos eventos disparados

pelo usuário na página chamando os listeners no servidor, seguido pela geração de

outro UI ou uma atualização da UI já mostrada na tela. O JSF faz parte da

plataforma padrão do Java Enterprise Edition (Java EE), isso significa que o JSF faz

parte de todo servidor de aplicações Java EE, como por exemplo, Oracle’s Web

Logic, GlassFish Open Source Edition, ou JBoss AS. Mas ainda pode ser usado

como biblioteca em servlet containers como Tomcat e Jetty. (JAVASERVERFACES,

2013)

A arquitetura JSF no modelo MVC está demonstrada na Figura 2.1.

Figura 2.1 - Arquitetura JSF baseada no modelo MVC Fonte: Pitanga, 2013 (adaptada pelos autores)

Usar JSF como framework para desenvolver aplicações web é a certeza de

se trabalhar com os melhores elementos descobertos durante anos de experiência

no desenvolvimento web, unidos em uma única API padrão, fácil de entender,

estável e flexível. Foram implementados os melhores padrões de desenvolvimento

baseados em experiências com outros frameworks já existentes e que possuem a

mesma finalidade. (BURNS; SCHALK, 2010)

Algumas vantagens em utilizar o JSF são: facilidade na construção de uma UI

usando um conjunto de componentes reutilizáveis, simplicidade na migração de

dados da aplicação para a UI e provenientes da mesma, auxílio no gerenciamento

Page 33: DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS …fateclins.edu.br/v4.0/trabalhoGraduacao/mXNIfr3... · DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS ETSCHEID UM ESTUDO SOBRE A PERSISTÊNCIA

32

do estado da UI nas solicitações do servidor, oferta de um modelo simples de

conexão entre os eventos gerados pelo cliente e o código da aplicação do servidor e

personalização dos componentes da UI, para que sejam facilmente construídos e

reutilizados. (NETBEANS, 2013)

Segundo Gonçalves (2008), o FacesServlet faz a rota do tráfego das

requisições e administra o clico de vida do JSF, este ciclo é composto por seis fases,

cada uma tem uma importância no processo. Pode acontecer de uma requisição

passar por todas as fases, porém, pode acontecer também de não passar por

nenhuma delas, dependendo do tipo de pedido de erros em que ocorram as

validações, conversões e do tipo de resposta. As referidas fases, desde o momento

em que a requisição chega ao servidor até a renderização da página, seguem a

seguinte ordem:

• Primeira fase: restaurar a apresentação – fase de início do

processamento da requisição do ciclo de vida a partir da construção da

árvore de componentes do JSF.

• Segunda fase: aplicar os valores de requisição – é a fase em que todos

os novos valores inseridos são extraídos e armazenados por seus

apropriados componentes. Se o valor dos componentes não for uma

string é feita a conversão, se a mesma falhar, ocorrem diversas situações

de erros.

• Terceira fase: processar validações – após o valor de cada componente

ser atualizado; nesta fase, os componentes, se necessário, são validados.

O componente que precisa ser validado deve fornecer implementação da

lógica de validação.

• Quarta fase: atualizar valores do modelo – os dados do modelo do

aplicativo são atualizados após terem sido validados na fase anterior,

exceto nos casos em que a lógica de negócios determine a validação em

outra fase.

• Quinta fase: invocar a aplicação – a implementação JSF manipula

quaisquer eventos do aplicativo, como ir para outra página através de um

link. Esses eventos retornam geralmente uma string que está associada à

navegação e que se encarrega de chamar a página determinada.

• Sexta fase: renderizar a resposta – esta é a fase final em que a página é

Page 34: DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS …fateclins.edu.br/v4.0/trabalhoGraduacao/mXNIfr3... · DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS ETSCHEID UM ESTUDO SOBRE A PERSISTÊNCIA

33

renderizada, ou seja, montada e devolvida ao servidor para ser exibida.

Na Figura 2.2 está representado o ciclo de vida do JavaServer Faces.

Figura 2.2 - Ciclo de vida do JavaServer Faces Fonte: Devmedia, 2013

2.2 PRIMEFACES

O PrimeFaces é uma biblioteca de componentes JSF em um único arquivo

Java (Java Archive – JAR) e possui menos de 2 Megabytes (MB). Esta biblioteca foi

desenvolvida para facilitar o trabalho com JSF e para aumentar sua flexibilidade e

suas funcionalidades, possibilitando maior produtividade no desenvolvimento. Para

usar os componentes PrimeFaces nas páginas de um projeto JSF é necessário

apenas adicionar esse arquivo no classpath e importar o namespace da biblioteca,

sem a necessidade de fazer configurações e sem dependência externa. O

PrimeFaces é baseado nas APIs padrões do JSF 2.0 e os scripts do PrimeFaces

executados pelo cliente são baseados na biblioteca jQuery. (ÇALIŞKAN;

VARAKSIN, 2013)

A biblioteca PrimeFaces possui mais que 100 componentes

(PRIMEFACES.ORG, 2013). Cada um possui um objetivo diferente, mas é possível

realizar um projeto bem elaborado com a integração de vários desses componentes.

(LUCKOW; MELO, 2010)

Page 35: DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS …fateclins.edu.br/v4.0/trabalhoGraduacao/mXNIfr3... · DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS ETSCHEID UM ESTUDO SOBRE A PERSISTÊNCIA

34

2.3 SPRING FRAMEWORK E SPRING SECURITY

O Spring é um framework de código aberto do Java para o desenvolvimento

com Java Enterprise Edition (Java EE). O objetivo do Spring é reduzir a

complexidade do desenvolvimento, principalmente em aplicações web.

Este framework teve grande aceitação por ser adaptável às bibliotecas

padrões existentes. Sua característica principal é instanciar classes injetando

dependências. (GONÇALVES, 2008).

O Spring possui vários módulos, entre eles está o Spring Security, que é um

framework de segurança, usado para garantir a autenticação e a autorização dos

usuários, ou seja, é uma ferramenta de segurança e controle. (LUCKOW; MELO,

2010)

Segundo Scarioni (2013) o Spring Security fornece várias vantagens:

• Dá suporte para muitos modelos de autenticação;

• Fornece serviços de segurança para diferentes camadas;

• É um módulo de código aberto, assim como o Spring framework.

2.4 JAVA PERSISTENCE API (JPA)

As ferramentas de mapeamento objeto-relacional, em inglês, Object-

Relational Mapping (ORM) foram criadas para facilitar a comunicação entre as

aplicações Java e os bancos de dados que seguem o modelo entidade

relacionamento. Estas ferramentas automatizam a transição de dados entre as

aplicações e os diferentes bancos de dados. O uso das ferramentas ORM dispensa

a escrita de consultas em SQL, a própria ferramenta gera as consultas de acordo

com a sintaxe da SQL correspondente ao banco que está sendo utilizado.

Os pontos básicos de uma solução ORM são:

• Uma API para realização das operações CRUD em objetos de classes

persistentes;

• Uma linguagem ou API para especificar consultas que se referem às

classes ou às propriedades das classes;

• Facilidade de especificar o metadado de mapeamento;

• Uma técnica para que a implementação ORM interaja com objetos

Page 36: DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS …fateclins.edu.br/v4.0/trabalhoGraduacao/mXNIfr3... · DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS ETSCHEID UM ESTUDO SOBRE A PERSISTÊNCIA

35

transacionais para fazer verificações. (LUCKOW; MELO, 2010)

Segundo Gonçalves (2007) o JPA é uma especificação, que não depende de

um container para funcionar e foi criada para padronizar as ferramentas ORM para

aplicações Java facilitando o desenvolvimento.

O JPA especifica um conjunto de classes e métodos que as ferramentas de

ORM devem implementar. As implementações mais conhecidades do JPA são:

Hibernate, EclipseLink, OpenJPA e Batoo. O JPA criou uma linguagem de consulta

chamada Java Persistence Query Language (JPQL) para realizar as consultas no

banco; a vantagem é que a mesma consulta pode ser feita em todos os bancos de

dados. (OLIVEIRA, 2012)

2.5 BANCOS DE DADOS

Um banco de dados (BD) pode ser definido como uma coleção de dados

relacionados. Dados são fatos que possuem um significado subentendido e que

podem ser gravados, como nomes, números de documentos, valores. Um conjunto

desses dados formam as informações, portanto, um banco de dados. Entretanto,

esta definição é muito ampla, o termo banco de dados é geralmente utilizado de

maneira mais específica, pois possui implicitamente as seguintes propriedades:

representa aspectos do mundo real, é uma coleção lógica de dados que possuem

um sentido próprio e é projetado e preenchido com dados para atender uma

necessidade específica. O tamanho e a complexidade do banco de dados pode ser

variável, desde que ele atenda as necessidades dos interessados em seu conteúdo.

(ELMASRI; NAVATHE, 2005)

Bancos de dados relacionais e não relacionais tratam assuntos como

transações e integridade de dados de formas diferentes. Para melhor compreensão

dessas diferenças e o que elas significam para a aplicação é recomendável que se

compreenda os conceitos a seguir sobre as propriedades dos bancos de dados.

(TIWARI, 2011)

2.5.1 Processos de transações ACID

O processamento de transação é uma unidade de execução do programa que

acessa e atualiza os dados, normalmente escrita em uma linguagem de

Page 37: DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS …fateclins.edu.br/v4.0/trabalhoGraduacao/mXNIfr3... · DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS ETSCHEID UM ESTUDO SOBRE A PERSISTÊNCIA

36

manipulação de dados. O programador define, de forma apropriada, diversas

transações, para que o banco de dados garanta sua integridade. Essas transações

possuem um conjunto de propriedades: Atomicidade, Consistência, Isolamento e

Durabilidade (ACID). Em seguida estão alguns detalhes sobre cada propriedade

ACID (SILBERSCHATZ; KORTH; SUDARSHAN, 2006):

• Atomicidade – todas as ações das transações são refletidas

corretamente no banco de dados ou nenhuma delas. O banco acompanha

os dados, se ocorrerem falhas, as informações não são atualizadas e os

dados voltam ao estado anterior.

• Consistência – para preservar a consistência do banco, a execução de

uma transação é feita do início ao fim sem a interferência de outras

transações, o banco de dados é levado de um estado de consistência

para outro.

• Isolamento – embora aceite a execução de transações simultâneas,

garante que para cada par de transações pareça que uma apenas iniciou

quando a outra terminou ou vice versa, fazendo com que uma transação

não saiba o que acontece com as outras, mesmo sendo executada

simultaneamente, isso, para evitar que as transações possam intercalar,

provocando resultados indesejáveis. Essa propriedade é garantida por um

componente do banco de dados, chamado Componente de Controle de

Concorrência.

• Durabilidade – após uma transação ser completada com sucesso, há

uma persistência das mudanças feitas por ela no banco, ainda que

ocorram falhas no sistema.

Ainda de acordo com Silberschatz, Korth, Sudarshan (2006), quando não

encontram falhas, as transações são completadas com sucesso, quando isso ocorre,

a transação é considerada confirmada (commited). Após a transação ser

confirmada, não se pode desfazer seus efeitos no banco, a não ser que se faça uma

transação de compensação, mas isso é responsabilidade do usuário. Uma transação

precisa estar em um dos seguintes estados:

• Ativa: é o estado inicial, enquanto estiver executando, a transação

permanece neste estado;

• Parcialmente confirmada: após a instrução final ser executada;

Page 38: DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS …fateclins.edu.br/v4.0/trabalhoGraduacao/mXNIfr3... · DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS ETSCHEID UM ESTUDO SOBRE A PERSISTÊNCIA

37

• Falha: depois de verificado que a instrução normal não pode mais

prosseguir;

• Abortada: depois que a transação foi revertida, o banco retoma seu

estado anterior de antes do início da transação;

• Confirmada: depois de terminada com sucesso.

Na Figura 2.3 está representada uma transação passando por todos os seus

estados, ela é considerada terminada quando abortada ou confirmada.

Figura 2.3 - Diagrama de estado de uma transação Fonte: Silberschatz; Korth; Sudarshan, 2006, p.412 (adaptada pelos autores)

2.5.2 O Teorema CAP

O teorema de Consistência, Alta disponibilidade e Partição tolerável (CAP),

em inglês CAP Theorem (Consistency, Availability and Partition tolerancy) de acordo

com Tiwari (2011) são os três pilares do teorema de Brewer, no qual é

fundamentada a recente geração de ideias sobre integração de transações em

grandes sistemas distribuídos escaláveis. De acordo com esse teorema é impossível

que sejam aplicadas as três propriedades ao mesmo tempo, uma sempre será

sacrificada a favor das outras duas. A seguir estão cada uma das propriedades do

teorema de CAP e seus significados segundo Tiwari (2011):

• Consistência – esse termo não é muito bem definido, mas no contexto

para o CAP refere-se à atomicidade e isolamento. Quando se trata de

apenas um servidor a consistência dos dados pode ser atingida pela

Page 39: DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS …fateclins.edu.br/v4.0/trabalhoGraduacao/mXNIfr3... · DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS ETSCHEID UM ESTUDO SOBRE A PERSISTÊNCIA

38

semântica ACID, mas fica bem mais complexo quando se trata de

sistemas distribuídos.

• Alta disponibilidade – significa que o sistema está disponível para servir

no momento em que for necessário, se o sistema estiver ocupado, pouco

comunicativo ou indiferente quando acessado ele é considerado

indisponível.

• Partição tolerável – os modelos de processamentos paralelos e de

escalas são métodos comprovados e estão sendo utilizados para fornecer

desempenho superior em supercomputadores. A partição tolerável mede

a capacidade de o sistema continuar em serviço caso alguns dos nós do

cluster fique indisponível.

Tiwari (2011) afirma ainda que, uma vez que não é possível beneficiar-se das

três propriedades juntas, as mesmas podem ser escolhidas de acordo com o

objetivo que se pretenda atingir, da seguinte forma:

• Primeira opção – A alta disponibilidade é comprometida, a consistência e

a partição tolerável têm a preferência (C/P);

• Segunda opção – O sistema terá pouca ou nenhuma partição tolerável, a

preferência é pela consistência e alta disponibilidade (C/A);

• Terceira opção – A consistência é comprometida, mas os sistemas estão

sempre disponíveis e podem trabalhar quando há partição, ou seja, as

partes são divididas (D/P).

Na Figura 2.4 está o exemplo de como ocorrem as opções de escolhas dos

quesitos do Teorema CAP, tomando como exemplos alguns diferentes tipos de BDs.

Figura 2.4 - Escolha das propriedades do Teorema CAP Fonte: Sousa, 2010

Page 40: DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS …fateclins.edu.br/v4.0/trabalhoGraduacao/mXNIfr3... · DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS ETSCHEID UM ESTUDO SOBRE A PERSISTÊNCIA

39

Os bancos de dados relacionais, nas transações tradicionais, optam sempre

pela primeira opção em circunstâncias de escalonamento horizontal, caso em que a

alta disponibilidade é afetada por vários fatores, como: atraso na rede, gargalos na

comunicação, esgotamento de recursos, entre outros. (TIWARI, 2011)

2.5.3 Basically Available Soft Eventually Consistent (BASE)

Tiwari (2011) afirma que Eric Brewer e outros criaram o termo Basically

Available Soft Eventually Consistent (BASE) para denominar o caso de consistência

eventual no banco de dados. Este termo surgiu para combater o ACID, entretanto,

BASE e ACID não são opostos, porém, retratam diferentes pontos de vista de

consistência.

O ACID foi explicado anteriormente, tornando assim mais simples o

entendimento de como funciona a consistência eventual (BASE) e as diferenças

entre os dois conceitos.

Conforme Tiwari (2011) há situações em que é possível comprometer a

consistência forte, no caso, por exemplo, da disponibilidade não poder ser

comprometida e o sistema ser tão distribuído que a partição tolerável seja

necessária. A inconsistência de dados provavelmente não é uma escolha para um

sistema sério, entretanto, a consistência eventual pode ser uma opção aceitável,

pois ela significa que mais cedo ou mais tarde a consistência vai acontecer. A

consistência eventual acontece quando uma atualização é feita e após isso todos os

nós do cluster aparecem no mesmo estado, eventualmente. Essa eventualidade

acontece dentro de certos limites, logo, o modelo de consistência eventual pode

funcionar.

Tiwari (2011) utiliza como exemplo prático de consistência eventual um

sistema de vendas, em que um carrinho de compras pode permitir pedidos, mesmo

não sendo capaz de confirmar com o sistema de estoque sobre a disponibilidade do

produto. Há possibilidades de o estoque do produto estar zerado, então o pedido

pode ficar reservado para ser atendido assim que o estoque for reabastecido.

São apresentados por Tiwari (2011) três critérios, e a partir de diferentes

combinações entre eles são demonstradas situações que podem causar efeitos

diversos na consistência, os critérios são:

R – Número de nós de leitura

Page 41: DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS …fateclins.edu.br/v4.0/trabalhoGraduacao/mXNIfr3... · DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS ETSCHEID UM ESTUDO SOBRE A PERSISTÊNCIA

40

W – Número de nós de escrita

N – Número total de nós do cluster

Mantendo R<N e W<N permite-se maior disponibilidade, porém, podem

ocorrer situações em que:

• R+W>N – pode ser estabelecido um estado consistente, pois há uma

intersecção entre nós de leitura e de escrita, quando R=N e W=N, ou seja,

R+W=2N, o sistema fica absolutamente consistente, podendo

proporcionar segurança ACID.

• R=1, W=N – o sistema tem mais leituras que escritas, pode-se permitir

que todos os nós do cluster de leitura recebam e respondam requisições

de leitura, se R=1, os nós atuam independentes uns dos outros. W=N

quer dizer que se deve confirmar a escrita em todos os nós para fazer

uma atualização, se houver uma falha em pelo menos algum nó, o

sistema fica indisponível para escrita/gravação.

• R=N, W=1 – se a escrita para um nó for suficiente, é elevada a chance de

inconsistência, e se R=N, a leitura somente é permitida se todos os nós

do cluster estiverem disponíveis.

• R=W=ceiling((N+1)/2) – isso proporciona uma estatística efetiva para

permitir consistência eventual.

É possível implementar a consistência eventual de várias formas, podendo

envolver sistemas orientados a mensagens, em que se propaga uma atualização

usando uma fila de mensagens ou simplesmente usando identificações exclusivas

sequenciais, ou um consenso baseado em estatísticas. (TIWARI, 2011)

Logo a seguir, descreve-se sobre outro conceito que ajudará na compreensão

de como funciona o armazenamento de dados nos bancos de dados relacionais e

não relacionais.

2.5.4 Agregados

As informações a serem armazenadas em bancos de dados relacionais

precisam ser divididas em várias tuplas, pois uma tupla respresenta uma estrutura

de dados limitada. Elas são conjuntos de valores, não é possível aninhar uma tupla

dentro de outra nem registrar uma lista de valores dentro de uma tupla. Essa

simplicidade reforça o modelo relacional, pois fornece a possibilidade de imaginar

Page 42: DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS …fateclins.edu.br/v4.0/trabalhoGraduacao/mXNIfr3... · DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS ETSCHEID UM ESTUDO SOBRE A PERSISTÊNCIA

41

que todas as operações são realizadas em tuplas e retornam tuplas. (SADALAGE;

FOWLER, 2012)

Segundo Sadalage; Fowler (2012), outro conceito de organizar as

informações é a orientação a agregados. Reconhecendo que muitas vezes é

desejado operar em unidades de dados mais complexas que tuplas, podendo conter

outras estruturas dentro dela. Os bancos de dados NoSQL dos tipos key/value,

document stores e column family, que serão apresentados logo mais, fazem uso

desses registros de dados mais complexos. Por não ter um termo definido para este

tipo de unidade de dado, neste trabalho está sendo usado o termo agregado de

acordo com a definição dada por muitos autores nesse sentido, um termo com raiz

no Domain-Driven-Design, um método de desenvolvimento de software complexo.

(SADALAGE; FOWLER, 2012)

2.5.5 Tipos de Bancos de Dados

A escolha do banco de dados a ser utilizado em uma aplicação é uma decisão

importante que deve ser tomada na fase de planejamento de um projeto, pois

determina várias características da futura aplicação, entre elas, a integridade dos

dados, os tratamentos de concorrência de acesso de diferentes usuários, os meios

de acesso aos dados, as possibilidades de fazer consultas no banco, a performance

e a escalabilidade. Portanto, esta decisão deve ser muito bem analisada, baseando-

se no tipo de aplicação e no ambiente de produção a serem utilizados.

Além dos bancos de dados relacionais, que é o modelo de BD mais utilizado,

existem vários outros conceitos de BDs, que são os não relacionais. A seguir, estão

demonstrados os principais conceitos de BDs, abordando suas principais

características, com o objetivo de facilitar a escolha de um BD para a aplicação a ser

desenvolvida.

2.5.6 Bancos de Dados Relacionais

O modelo relacional de BDs foi introduzido em 1970, por Edgar Frank Codd,

em uma publicação com o título: "A relational model of data for large shared data

banks", na revista da Association for Computing Machinery (ACM). Essa publicação

revolucionária demonstrou como tabelas podem ser usadas para representar objetos

Page 43: DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS …fateclins.edu.br/v4.0/trabalhoGraduacao/mXNIfr3... · DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS ETSCHEID UM ESTUDO SOBRE A PERSISTÊNCIA

42

do mundo real e como os dados podem ser armazenados para os objetos. A

integridade dos dados nesse conceito foi levada mais a sério que em qualquer

modelo de BDs antes visto. Desde esta publicação surgiram muitos BDs utilizando

esse conceito e conquistaram um status quase padrão para uso no desenvolvimento

de aplicações. (MATTHEW; STONES, 2005)

O conceito é baseado na teoria relacional da matemática, por isso há uma

grande flexibilidade para o acesso e a manipulação de dados gravados no BD.

Usando técnicas simples, como normalização na modelagem do BD, criam-se várias

tabelas relacionadas, as quais servem como base para consultas usando uma

linguagem de consulta quase padronizada, a Structured Query Language - SQL. Um

BD relacional, basicamente, contém relações (tabelas) com atributos (colunas) e

tuplas (linhas). Todo atributo tem um tipo de dado definido, uma tupla representa um

conjunto de dados com um valor para cada atributo da linha e as tabelas são

relacionadas através de chaves. (MATTHEW; STONES, 2005)

Figura 2.5 - Agregado no UI é conjunto de várias tuplas de várias tabelas Fonte: Sadalage; Fowler, 2013, p.29

O uso de BDs relacionais torna necessário dividir agregados utilizados na

aplicação em várias relações conforme as regras da normalização. Para recuperar o

mesmo agregado são necessárias consultas utilizando joins, uma operação que

dependendo da quantidade e do tamanho das relações pode ser muito custosa no

Page 44: DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS …fateclins.edu.br/v4.0/trabalhoGraduacao/mXNIfr3... · DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS ETSCHEID UM ESTUDO SOBRE A PERSISTÊNCIA

43

sentido de necessidade de processamento. Nos casos em que se deseja uma

resposta rápida de um sistema isso pode ser uma desvantagem. (SADALAGE;

FOWLER, 2013)

Na Figura 2.5 está ilustrado um exemplo de divisão de agregado e as

relações resultantes.

2.5.7 NoSQL

A expressão NoSQL é um termo não definido claramente, a primeira vez que

surgiu foi em 1998 como um nome para o banco de dados relacional de Carlo

Strozzi, que assim o nomeou por não fornecer uma SQL-API. O mesmo termo foi

usado na formação do nome do evento NoSQL Meetup em 2009, o qual teve como

objetivo a discussão sobre sistemas de banco de dados distribuídos. Como nessa

reunião somente foi discutido sobre BDs não relacionais, o termo começou a ser

usado para o movimento de BDs não relacionais em geral. (EDLICH, S. et al., 2010)

NoSQL-database (2013) fornece a seguinte definição, livremente traduzida:

Sob NoSQL entende-se uma nova geração de BDs, os quais na maioria das vezes

atendem algumas das características abaixo (NOSQL-DATABASE, 2013):

• O modelo de dados não é relacional;

• Os sistemas são projetados para escalabilidade distribuída e horizontal;

• O sistema NoSQL é de código aberto (open-source);

• O sistema é livre de esquemas ou somente tem restrições fracas de

esquemas;

• Devido à arquitetura distribuída o sistema possibilita uma fácil replicação

de dados;

• O sistema fornece uma API simples;

• O sistema na maioria das vezes é baseado num modelo de consistência

diferente: Eventually Consistent e BASE, mas não ACID.

Parece que a força dos BDs relacionais motivou todos os sistemas não

relacionais quererem entrar na categoria dos BDs NoSQL. O arquivo NOSQL-

DATABASE recebeu até maio de 2013, mais de 150 solicitações de sistemas não

relacionais para serem colocados na listagem. Entre os solicitantes, empresas como

Oracle e IBM, duas das empresas mais fortes no campo dos BDs relacionais.

Page 45: DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS …fateclins.edu.br/v4.0/trabalhoGraduacao/mXNIfr3... · DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS ETSCHEID UM ESTUDO SOBRE A PERSISTÊNCIA

Na Figura 2.6 está

com suas respectivas categorias.

Figura 2.6 - Bancos de dados relacionais x não relacionaisFonte: Edlich, et al., 2010, p.6 (adapatada pelos autores)

Os principais motivos para o sucesso dos BDs relacionais são: grande

flexibilidade de consultas, facilidade de modelagem seguindo regras

padronização), fundamento na matemática relacional e a garantia de fornecer dados

consistentes. Entretanto, desde o ano 2000, o crescimento rápido de algumas

empresas da web, o surgimento de enormes quantidades de dados, as novas fontes

de dados como: redes sociais, comportamento de usuários da internet, fóruns e

muitos outros, provocaram a necessidade de mais recursos de computação. Para

aumentar a capacidade de processamento existem duas possibilidades: servidores

mais potentes ou um conjunto de v

algumas vantagens sobre a primeira

servidores pequenos do que em um bastante potente e maior resistência

pois se houver problema com um servidor, o serviço pode continuar disponível.

(SADALAGE; FOWLER, 2013)

Por outro lado, caso seja utilizado um BD com custo de licença, o custo pode

ser muito grande utilizando

único servidor, multiplicando, assim, o custo. Mas o maior problema é que os BDs

está ilustrada a divisão dos grupos de BDs existentes de acordo

com suas respectivas categorias.

Bancos de dados relacionais x não relacionais , 2010, p.6 (adapatada pelos autores)

Os principais motivos para o sucesso dos BDs relacionais são: grande

flexibilidade de consultas, facilidade de modelagem seguindo regras

padronização), fundamento na matemática relacional e a garantia de fornecer dados

consistentes. Entretanto, desde o ano 2000, o crescimento rápido de algumas

empresas da web, o surgimento de enormes quantidades de dados, as novas fontes

mo: redes sociais, comportamento de usuários da internet, fóruns e

muitos outros, provocaram a necessidade de mais recursos de computação. Para

aumentar a capacidade de processamento existem duas possibilidades: servidores

mais potentes ou um conjunto de vários servidores (cluster). A segunda opção traz

algumas vantagens sobre a primeira, como: mais economia na aquisição de vários

servidores pequenos do que em um bastante potente e maior resistência

pois se houver problema com um servidor, o serviço pode continuar disponível.

(SADALAGE; FOWLER, 2013)

Por outro lado, caso seja utilizado um BD com custo de licença, o custo pode

ser muito grande utilizando cluster, pois normalmente uma licença

único servidor, multiplicando, assim, o custo. Mas o maior problema é que os BDs

44

a divisão dos grupos de BDs existentes de acordo

Os principais motivos para o sucesso dos BDs relacionais são: grande

flexibilidade de consultas, facilidade de modelagem seguindo regras simples (quase

padronização), fundamento na matemática relacional e a garantia de fornecer dados

consistentes. Entretanto, desde o ano 2000, o crescimento rápido de algumas

empresas da web, o surgimento de enormes quantidades de dados, as novas fontes

mo: redes sociais, comportamento de usuários da internet, fóruns e

muitos outros, provocaram a necessidade de mais recursos de computação. Para

aumentar a capacidade de processamento existem duas possibilidades: servidores

). A segunda opção traz

: mais economia na aquisição de vários

servidores pequenos do que em um bastante potente e maior resistência a erros,

pois se houver problema com um servidor, o serviço pode continuar disponível.

Por outro lado, caso seja utilizado um BD com custo de licença, o custo pode

, pois normalmente uma licença é válida para um

único servidor, multiplicando, assim, o custo. Mas o maior problema é que os BDs

Page 46: DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS …fateclins.edu.br/v4.0/trabalhoGraduacao/mXNIfr3... · DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS ETSCHEID UM ESTUDO SOBRE A PERSISTÊNCIA

45

relacionais não são projetados para funcionar em cluster. BDs relacionais para

cluster, como Oracle RAC ou Microsoft SQL Server, utilizam o conceito de um

subsistema de disco compartilhado (shared disk subsystem), porém esse

subsistema é o ponto de risco, pois havendo erro, o serviço completo ficará

indisponível. (SADALAGE; FOWLER, 2013)

Essa necessidade de bancos de dados serem projetados para cluster e de

trabalhar com grandes quantidades de dados motivou a utilização de outros

conceitos, cada vez mais presentes.

Os sistemas NoSQL são divididos em dois grupos:

O grupo de NoSQL-núcleo, incluindo os BDs que se encaixam nas seguintes

categorias:

• Key/Value stores (Armazenamento chave/valor)

• Document stores (Armazenamento de documento)

• Column Family stores (Armazenamento em famílias de colunas)

• Graph database (BDs de grafos)

E o grupo dos BDs não relacionais, que não são do tipo de bancos acima, por

exemplo, os BDs orientados a objetos, como o BDs XML ou outros. (EDLICH, S. et

al., 2010)

A seguir estão detalhadas as quatro categorias do NoSQL-núcleo com alguns

exemplos.

2.5.7.1 Key/Value stores

Os sistemas de armazenamento chave/valor pertencem a um dos grupos de

BDs mais antigos. Eles já foram utilizados nos anos 70, porém apenas ganharam

popularidade com o crescimento exponencial de dados a serem computados na era

da Web 2.0, ou seja, com o surgimento de empresas que tiveram de distribuir os

dados coletados em milhares de instâncias computacionais. Muitos desses dados

não são relacionados e por isso não há necessidade de representá-los em modelos

relacionais, os quais são muito difíceis de escalar e distribuir. (EDLICH, S. et al.,

2010)

Esses sistemas são os NoSQL BDs mais fáceis do ponto de vista de uso da

API, pois um agregado de qualquer tipo, representado por um binary large object

(BLOB), pode ser inserido, lido ou excluído do BD. Cada chave de acesso a um

Page 47: DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS …fateclins.edu.br/v4.0/trabalhoGraduacao/mXNIfr3... · DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS ETSCHEID UM ESTUDO SOBRE A PERSISTÊNCIA

46

valor trata-se sempre de acesso de chave primária, por isso, sistemas com esse

princípio são muito rápidos e fáceis de escalar. O valor associado a uma chave não

pode ser analisado pelo BD, assim, restringindo muito a capacidade de se fazer

consultas. O BD somente pode retornar o valor como um total, a responsabilidade

de saber o que esse valor representa e como ele deve ser interpretado é da

aplicação. (SADALAGE; FOWLER, 2013)

Na prática, muitos sistemas chave/valor fornecem recursos um pouco mais

avançados, como permitir que os valores sejam hashes1, sets ou listas. Dessa

forma, aumentam principalmente os recursos de consultas. Sistemas com essas

funcionalidades já se parecem bastante com os sistemas de famílias de colunas, os

quais serão abordados posteriormente. A maioria desses sistemas fornece a

possibilidade de agrupar pares de chave/valor. Comparado com sistemas

relacionais, podemos interpretar um grupo de chave/valores como uma tabela com

duas colunas, sendo uma para a chave e outra para o valor. No sistema Riak, que é

um dos sistemas chave/valor, esses grupos são chamados de bucket (balde).

(SADALAGE; FOWLER, 2013)

Na Figura 2.7 está a estrutura de par chave/valor.

Figura 2.7 - Par chave/valor ou chave/documento Fonte: Sadalage; Fowler, 2013 (adaptada pelos autores)

1 Hashes – tipo específico de tabelas indexadas (SAWAYA M., 1999)

Page 48: DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS …fateclins.edu.br/v4.0/trabalhoGraduacao/mXNIfr3... · DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS ETSCHEID UM ESTUDO SOBRE A PERSISTÊNCIA

47

Convém lembrar que o objeto valor em sistemas comuns normalmente não

pode ser interpretado pelo banco de dados.

Sistemas chave/valor podem ser divididos em dois subgrupos: sistemas in-

memory e sistemas on-disk. Em sistemas da categoria in-memory, todos os dados

permanecem no Random Access Memory (RAM), a memória volátil. Os dados são

persistidos periodicamente na memória não volátil. Essa característica resulta em

uma alta performance, porém, gera o problema de, em caso de uma falha, os dados

não persistidos serem perdidos. Os sistemas on-disk não trazem esse risco, pois os

dados são persistidos diretamente, em contrapartida, a performance é muito menor.

(HEISE, 2013)

Alguns exemplos de sistemas chave/valor conhecidos são Redis, Riak,

BerkeleyDB, HamsterDB e Chordless, porém, existem muitos mais, e o número é

crescente. (NOSQL-DATABASE, 2013)

Como cada um desses sistemas trata assuntos como consistência,

escalabilidade e funcionalidades para consultas de formas diferentes, não basta

somente escolher um banco de dados chave/valor, é necessário também analisar

bem os recursos dos sistemas disponíveis e baseando-se nisto tentar fazer a melhor

opção.

2.5.7.2 Document stores

Os sistemas que usam o conceito de armazenamento de documentos são

bem parecidos com os de armazenamento chave/valor. Eles trabalham com o

mesmo conceito: para cada chave existe um valor, porém esse valor está

representado por um arquivo em formato de coleção de dados, como por exemplo,

JavaScript Object Notation (JSON), binary JSON (BSON), XML, entre outros. Esses

formatos representam estruturas de árvore hierárquica, as quais auto se explicam e

podem conter mapas, coleções ou valores escalares. Pela obrigação de gravar os

valores em formatos específicos, perde-se um pouco da liberdade de se trabalhar

sem esquemas, porém, em troca recebe um sistema de banco de dados com a

capacidade de examinar os documentos. Com isso, as consultas mais complexas do

que em sistemas chave/valor são possíveis. Pode-se ilustrar um par

chave/documento com a Figura 2.7, que também pode representar um par

chave/valor. A diferença é que se for interpretado como documento, pode-se

Page 49: DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS …fateclins.edu.br/v4.0/trabalhoGraduacao/mXNIfr3... · DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS ETSCHEID UM ESTUDO SOBRE A PERSISTÊNCIA

48

acessá-lo diretamente através de consultas, por exemplo, um “CartItem” e retorná-lo.

(SADALAGE; FOWLER, 2013)

Os sistemas de armazenamento de documentos não fornecem relações entre

documentos, esse é um dos motivos pelo qual eles são candidatos perfeitos para

serem escalados horizontalmente. A maioria desses bancos de dados usam

sharding, que é uma forma de escalar quando os dados são divididos em nós

diferentes. Essa divisão de dados deve ser levada em consideração no

desenvolvimento da aplicação. (ROBINSON; WEBBER; EIFREM, 2013)

Alguns dos sistemas de armazenamento de documentos são: MongoDB,

CouchDB, RavenDB e Terrastore. (NOSQL-DATABASE, 2013)

Todos eles têm características específicas, as quais podem trazer vantagens

ou desvantagens para um projeto, por esta razão devem ser bem analisados

previamente.

2.5.7.3 Column family stores

A estrutura de dados armazenados em sistemas que trabalham com o

conceito de column families é parecida com a estrutura de tabelas dos bancos de

dados relacionais.

Uma família de colunas representa uma tabela com linhas, cada linha obtém

uma chave de acesso e cada coluna dessa linha recebe um par chave/valor. Ao

contrário das tabelas conhecidas no conceito relacional, cada linha tem as suas

próprias colunas, podendo ter diferentes tipos de valor e quantidade. Não existe um

esquema predefinido e é possível incluir ou excluir colunas em cada linha. (EDLICH;

S. et al., 2010)

Famílias de colunas representam grupos de dados relacionados que

normalmente são acessados em conjunto. Pode, por exemplo, fazer sentido

armazenar os dados pessoais de um cliente junto com o endereço dele, assim

sendo, é viável criar para esses dados uma família de colunas. Os pedidos

efetuados por um cliente, normalmente, não são consultados ao mesmo tempo em

que os seus dados, assim, os pedidos podem representar outra família de colunas.

(SADALAGE; FOWLER, 2013)

Na Figura 2.8 está representado o conceito básico do modelo column family

stores.

Page 50: DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS …fateclins.edu.br/v4.0/trabalhoGraduacao/mXNIfr3... · DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS ETSCHEID UM ESTUDO SOBRE A PERSISTÊNCIA

49

Figura 2.8 - Modelo de dados de uma família de colunas Fonte: Sadalage; Fowler, 2013 (adaptada pelos autores)

Alguns sistemas de armazenamento em famílias de colunas também

fornecem o conceito de supercoluna (super column), que é uma ferramenta para

organizar as colunas de uma linha em grupos. Famílias de colunas contendo super

colunas também são chamadas famílias de super colunas (EDLICH, S. et al., 2010)

O desempenho de consultas para esse tipo de BDs depende muito da

modelagem dos dados. Cassandra, um BD do conceito de famílias de colunas, foi

projetado para funcionar muito bem em grandes clusters. Para otimizar consultas

nesse banco é recomendado criar uma família de colunas para cada tipo de consulta

que pode ser feita, desta maneira, uma desnormalização é provocada, porém, é

garantido que cada consulta possa ser respondida muito rapidamente. (FH KÖLN,

2013)

Figura 2.9 - Exemplo de duas linhas de uma família de colunas Fonte: FH Köln, 2013

Page 51: DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS …fateclins.edu.br/v4.0/trabalhoGraduacao/mXNIfr3... · DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS ETSCHEID UM ESTUDO SOBRE A PERSISTÊNCIA

50

A Figura 2.9 contém um exemplo de duas linhas de uma família de colunas,

das quais se diferenciam em número de colunas e tipo de valor armazenado,

mostrando a flexibilidade do conceito de famílias de colunas.

Alguns sistemas que fazem parte desse grupo de NoSQL BDs são:

Cassandra, HBase, Hypertable e AmazonSimple DB, todos possuem características

específicas.

O conceito de uma supercoluna está representado na Figura 2.10.

Figura 2.10 - Modelo de uma super coluna Fonte: FH Köln, 2013 (adaptada pelos autores)

2.5.7.4 Graph database

O conceito de BDs de grafos é bem diferente dos tipos de BDs do movimento

NoSQL discutidos até agora. Primeiramente, a maioria deles não permite uma

distribuição dos dados em servidores diferentes. Em contrapartida, existem BDs de

grafos, como Neo4J, que realizam transações ACID quando são executados em um

único servidor. (SADALAGE; FOWLER, 2013)

A representação de entidades e a relação entre elas podem ser realizadas de

uma maneira muito eficiente e representativa com os BDs de grafos. Basicamente

existem nós (entidades) que possuem propriedades e relações entre os nós

chamados edges, os quais também podem possuir propriedades; uma propriedade

nada mais é que um par chave/valor. A relação edges conecta duas entidades em

que a direção é significativa, desta maneira é possível criar modelos que mapeiam

uma rede complexa de relações. Quase todo tipo de problema pode ser

Page 52: DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS …fateclins.edu.br/v4.0/trabalhoGraduacao/mXNIfr3... · DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS ETSCHEID UM ESTUDO SOBRE A PERSISTÊNCIA

51

representado com grafos, porém, por se tratar de uma tecnologia de modelagem

recente, não é conveniente substituir plataformas bem entendidas e estabelecidas. A

introdução dessa tecnologia deve trazer benefícios significativos e há vários casos

de usos em que essa utilização deve ser estudada. (ROBINSON; WEBBER;

EIFREM, 2013)

A teoria dos grafos não é recente, ela foi introduzida no século XVIII por

Leonhard Euler, e estudada por matemáticos, sociólogos, antropólogos e muitos

outros desde aquela época, por isso é bem fundamentada e compreendida. Porém,

somente nos últimos anos ela entrou na realidade do gerenciamento de

informações. Desde então, BDs de grafos ajudam resolver problemas importantes,

como por exemplo, nas áreas de redes sociais, geografia, recomendações, finanças,

pesquisas e outros. A empresa Gartner Inc., que é uma empresa de pesquisas na

área de tecnologia de informação, define cinco grafos principais no mundo dos

negócios: grafos sociais, de intenção, de consumo, de interesse e de movimentação.

As empresas que pretendem ser altamente competitivas em um futuro próximo

devem ter mecanismos para capturar esses grafos e mecanismos e aproveitar essas

informações. (ROBINSON; WEBBER; EIFREM, 2013)

Figura 2.11 - Entidades com relacionamentos com propriedades Fonte: Sadalage; Fowler, 2013

A principal vantagem de banco de dados de grafos é o modo como os dados

são modelados, permitindo que consultas das quais os relacionamentos façam parte

Page 53: DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS …fateclins.edu.br/v4.0/trabalhoGraduacao/mXNIfr3... · DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS ETSCHEID UM ESTUDO SOBRE A PERSISTÊNCIA

52

possam ser efetuadas muito rapidamente. A princípio, uma entidade aponta

fisicamente para outra a qual está relacionada através, por exemplo, de ponteiros,

assim sendo, é possível atravessar o grafo rapidamente. Ao contrário dos modelos

relacionais em que uma relação pode ser recuperada por meio de joins e filtros, um

método lento, principalmente se o volume de dados for grande. (EDLICH, S. et al.,

2010)

Os BDs de grafos mais usados e conhecidos são: Neo4J, FlockDB, OrientDB,

InfoGris, HyperGraphDB, InfiniteGraph e Sones. (NOSQL-DATABASE, 2013)

Um exemplo simples de um grafo está representado na Figura 2.11.

2.5.8 Redis

Redis é um BD open source do tipo chave/valor, muitas vezes considerado

um servidor de estruturas de dados, por ter características bastante avançadas. Os

valores referenciados pelas chaves podem ter uma das estruturas: string, hash, list,

set ou sorted set. (REDIS, 2013)

O Redis é um BD muito rápido, principalmente por trabalhar com todos os

dados in-memory e porque a maioria de suas operações possui processamento

rápido. As operações realizadas pelo Redis são atômicas. (REDIS, 2013)

O BD Redis fornece vários recursos, entre eles: fácil replicação master/slave,

chaves com tempo de vida limitado, persistência de dados no disco seguindo

parâmetros livres e, principalmente, transações, uma característica incomum em

BDs não relacionais. A transação permitida pelo Redis garante que uma sequência

de operações será totalmente executada, ou que não se execute nenhuma das

operações. Além disso, é garantido que nenhum outro cliente será servido no meio

da transação. Porém, se comparadas às transações do BDs relacionais, as

realizadas no Redis são limitadas, mesmo porque no Redis não existe o comando

rollback, muito utilizado nos BDs relacionais. (REDIS, 2013)

A seguir estão as principais estruturas de dados do Redis e suas respectivas

características.

2.5.8.1 String

String é a estrutura de dados mais básica do Redis, podendo representar

Page 54: DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS …fateclins.edu.br/v4.0/trabalhoGraduacao/mXNIfr3... · DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS ETSCHEID UM ESTUDO SOBRE A PERSISTÊNCIA

53

qualquer tipo de dado, já que uma string é uma sequência de caracteres. Dessa

forma, esta estrutura de dados pode ser usada para armazenar uma instância de um

objeto por meio de uma chave, utilizando JSON, por exemplo. (SEGUIN, 2012)

Na Figura 2.12 está representado um par chave/valor do tipo string.

Figura 2.12 - Estrutura de dados tipo string Fonte: Carlson, 2013, p.9 (adaptada pelos autores)

2.5.8.2 Hash

A estrutura de dados hash é parecida com a string, porém, em vez de

armazenar uma sequência de caracteres para cada chave, a hash armazena pares

de subchave/valor, os quais serão acessíveis por meio de uma chave, ou seja, o

próprio valor é composto por pares do tipo chave/valor. Dessa forma, atinge-se uma

granularização menor e isso pode resultar em um melhor desempenho. O valor de

cada subchave pode ser ou uma string ou um valor numérico. Esta estrutura, em

muitas linguagens de programação, é conhecida como map. (CARLSON, 2013)

Na Figura 2.13 está representada uma hash com dois pares subchave/valor.

Figura 2.13 - Estrutura de dados tipo hash Fonte: Carlson, 2013, p.12 (adaptada pelos autores)

Page 55: DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS …fateclins.edu.br/v4.0/trabalhoGraduacao/mXNIfr3... · DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS ETSCHEID UM ESTUDO SOBRE A PERSISTÊNCIA

54

2.5.8.3 List

List é uma estrutura de dados para armazenar e manipular valores referentes

a uma chave, ou seja, uma lista. É possível adicionar elementos nesta lista (push),

recuperar o primeiro ou último elemento (pop) ou ainda manipular um elemento de

uma posição qualquer. As listas sempre mantêm a ordem dos elementos

armazenados. (SEGUIN, 2012)

Entre os BDs do tipo chave/valor, Redis é o único que fornece a estrutura de

dados do tipo list. (CARLSON, 2013)

O exemplo de uma lista pode ser visto na Figura 2.14.

Figura 2.14 - Estrutura de dados tipo list Fonte: Carlson, 2013, p.10 (adaptada pelos autores)

As listas podem ser muito bem utilizadas em vários cenários, por exemplo, no

armazenamento dos cinquenta usuários mais recentes de um site ou do caminho

que um usuário percorre em um site (usertracking) ou, ainda, no caso de um jogo,

no registro das ações dos jogadores. (SEGUIN, 2012)

2.5.8.4 Set

Um set é uma estrutura de dados que representa um conjunto de elementos.

O Redis fornece para esta estrutura de dados operações de conjuntos eficientes. Os

sets não são ordenados. Um exemplo típico para a utilização de sets é a lista de

amigos de um usuário. A operação para descobrir se um amigo pertence ou não a

um usuário tem um tempo de processamento independente da quantidade de

amigos armazenados, isto quer dizer que, mesmo se um usuário tiver um milhão de

Page 56: DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS …fateclins.edu.br/v4.0/trabalhoGraduacao/mXNIfr3... · DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS ETSCHEID UM ESTUDO SOBRE A PERSISTÊNCIA

55

amigos, o tempo para descobrir se um usuário é amigo ou não, é o mesmo, como

ele tivesse somente dez amigos. Operações com essa característica são

denominadas O(1)-operações. Outra operação bastante útil é a intersecção, com

ela, facilmente descobre-se, por exemplo, quais são os amigos em comum entre

dois ou mais usuários (SEGUIN, 2012). Na Figura 2.15 está um set em Redis.

Figura 2.15 - Estrutura de dados tipo set Fonte: Carlson, 2013, p.11 (adaptada pelos autores)

2.5.8.5 Sorted Set

Sorted set é a estrutura de dados mais poderosa do Redis, são conjuntos

ordenados, ou seja, cada elemento deste conjunto está armazenado juntamente

com um valor numérico a fim de classificá-lo. Nesta estrutura é possível recuperar os

elementos referentes a uma chave de certo intervalo de números inteiros.

Retomando o exemplo da lista de amigos, poderia utilizar-se sorted set,

armazenando um número entre um e dez para cada amigo, classificando-os. Desta

forma, pode-se, por exemplo, solicitar ao Redis retornar os amigos com uma

classificação maior que oito ou coisa parecida. (SEGUIN, 2012)

A Figura 2.16 contém a estrutura de dados sorted set com dois elementos.

Figura 2.16 - Estrutura de dados tipo sorted set Fonte: Carlson, 2013, p.11 (adaptada pelos autores)

Page 57: DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS …fateclins.edu.br/v4.0/trabalhoGraduacao/mXNIfr3... · DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS ETSCHEID UM ESTUDO SOBRE A PERSISTÊNCIA

56

A combinação de mais de um tipo de BD em um único projeto é possível e

pode trazer algumas vantagens, como demonstra o conceito de persistência

poliglota demonstrado a seguir.

2.5.9 Persistência Poliglota

Diferentes BDs são projetados para atender diversas necessidades e resolver

problemas distintos. Escolher um único BD para atender todos os requisitos de uma

aplicação pode resultar em uma solução com baixo desempenho em alguns

aspectos. (SADALAGE; FOWLER, 2013)

Na Figura 2.17 está ilustrado o uso de um BD relacional para todos os

requisitos de um e-commerce, como por exemplo, dados do carrinho de compras, da

sessão, pedidos completos entre outros.

Figura 2.17 - Uso de um BD relacional para todos os requisitos de armazenagem Fonte: Sadalage; Fowler, 2013 (adaptada pelos autores)

É possível usar um BD específico para cada requisito, aproveitando as

características de cada um. Soluções que envolvam mais que um BD são chamadas

de sistemas com persistência poliglota (polyglot persistence). (SADALAGE;

FOWLER, 2013)

A Figura 2.18 contém o exemplo de uma plataforma e-commerce utilizando

Page 58: DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS …fateclins.edu.br/v4.0/trabalhoGraduacao/mXNIfr3... · DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS ETSCHEID UM ESTUDO SOBRE A PERSISTÊNCIA

57

quatro tipos de BDs. (SADALAGE; FOWLER, 2013)

Obviamente, uma solução envolvendo vários bancos de dados não traz

somente vantagens, a complexidade de programação e operação aumenta com a

utilização deles. Pode ser difícil achar profissionais para um certo tipo de banco, por

se tratar de tecnologias novas, por isso deve se avaliar muito bem se a utilização de

múltiplos bancos de dados vai trazer vantagens suficientes para valer a pena

aumentar o risco de um projeto. (SADALAGE; FOWLER, 2013)

Figura 2.18 - Exemplo de implementação de persistência poliglota Fonte: Sadalage; Fowler, 2013 (adaptada pelos autores)

Este capítulo abordou algumas tecnologias utilizadas para o desenvolvimento

do portal, no próximo capítulo estão os requisitos levantados e as etapas do

desenvolvimento.

Page 59: DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS …fateclins.edu.br/v4.0/trabalhoGraduacao/mXNIfr3... · DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS ETSCHEID UM ESTUDO SOBRE A PERSISTÊNCIA

58

3 REQUISITOS DO SISTEMA

O desenvolvimento de um software possui algumas fases, chamadas de

atividades, que são organizadas de alguma maneira com o objetivo de obter-se um

resultado de qualidade, ou seja, um software que atenda as necessidades propostas

inicialmente.

Bezerra (2007) descreve essas atividades da seguinte forma:

• Levantamento de requisitos: esta atividade define as necessidades reais

do sistema, também chamadas de requisitos, que são compreendidas por

meio da análise do negócio baseada no mundo real.

• Análise de requisitos: é o estudo detalhado dos requisitos levantados com

a finalidade de entender como o sistema funciona e como seus

componentes interagem. A análise de requisitos não se preocupa com o

ambiente tecnológico, ela foca na estratégia a ser utilizada e não na

maneira como será realizada, nessa fase é construído um modelo para

representar o sistema.

• Projeto: nesta fase é definido como o sistema deve funcionar para atender

os requisitos, atendendo o modelo construído na fase anterior. São

realizadas duas atividades: projeto da arquitetura, de alto nível, em que os

componentes são distribuídos fisicamente de acordo com os recursos de

hardware disponíveis; e projeto detalhado, de baixo nível, trata-se das

funcionalidades do módulo, projeto da interface com o usuário e projeto

de banco de dados.

• Implementação: fase de codificar o sistema, em que se utiliza uma ou

mais linguagens de programação. A descrição computacional da fase de

projeto é traduzida em códigos executáveis.

• Testes: realiza-se diversos testes para verificação do funcionamento do

sistema, emitindo relatórios de erros detectados, após os testes os

módulos do sistema são integrados gerando o produto final.

• Implantação: o sistema é implantado no ambiente do usuário.

As fases apresentadas podem ser organizadas de várias maneiras, cada

modelo de organização dessas fases determina um modelo de ciclo de vida de um

sistema, foram escolhidos dois destes modelos, que serão demonstrados logo mais:

Page 60: DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS …fateclins.edu.br/v4.0/trabalhoGraduacao/mXNIfr3... · DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS ETSCHEID UM ESTUDO SOBRE A PERSISTÊNCIA

59

o modelo em cascata e o modelo iterativo e incremental. (BEZERRA, 2007)

No modelo de ciclo de vida em cascata as atividades são executadas em

sequência, isso facilita a gestão do projeto, contudo, as atividades de requisitos e

análises devem ser muito bem dominadas, pois não são permitidos erros. O cliente

só tem visão do projeto após sua conclusão, ou seja, ele não acompanha as fases

do projeto em desenvolvimento. (PAULA, 2008)

Na Figura 3.1 está ilustrado o modelo de ciclo de vida em cascata.

Figura 3.1 - Modelo de ciclo de vida em cascata Fonte: Bezerra, 2007, p.32

Modelo em cascata é atualmente pouco utilizado devido à grande

complexidade dos sistemas, pois há algumas desvantagens em sua utilização,

como: os requisitos precisam ser detalhadamente definidos antes do início do

projeto, podendo gerar futuros desperdícios de recursos; podem ocorrer erros que

só serão detectados no momento em que o usuário começar utilizar o sistema, e a

falha pode propagar por todas as fases seguintes e como o sistema não estará

pronto enquanto o ciclo do projeto não chegue ao final, o tempo para término do

sistema pode ser muito longo. (BEZERRA, 2007)

O ciclo de vida iterativo e incremental foi proposto para sanar as falhas do

modelo em cascata. O conceito de ciclo de vida iterativo e incremental divide o

desenvolvimento do sistema em ciclos, e cada fase é identificada em cada ciclo.

(BEZERRA, 2007)

O incremental é um modelo que, em geral, é escolhido para atender a

Page 61: DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS …fateclins.edu.br/v4.0/trabalhoGraduacao/mXNIfr3... · DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS ETSCHEID UM ESTUDO SOBRE A PERSISTÊNCIA

60

necessidade de oferecer rapidamente um conjunto limitado de funcionalidades e

posteriormente refinar e expandir cada funcionalidade em versões subsequentes do

sistema. Este modelo combina elementos do modelo em cascata de maneira

iterativa. Cada sequencia de elementos produz incrementos que podem ser

entregues ao usuário. Os primeiros incrementos são versões simplificadas do

sistema e podem servir para avaliações, o modelo incremental é bastante útil

quando não há mão de obra disponível para implementação completa do software

dentro do prazo estabelecido (PRESSMAN, 2011). Por esse motivo este foi o

modelo de ciclo de vida escolhido para o desenvolvimento do sistema resultante

deste trabalho.

Na Figura 3.2 está representado um modelo incremental e iterativo de ciclo de

vida de um sistema.

Figura 3.2 - Modelo de ciclo de vida incremental e iterativo Fonte: Bezerra, 2007, p.33

Em seguida estão as primeiras fases do desenvolvimento do sistema

proposto neste trabalho. As atividades estão descritas na mesma ordem em que

foram sendo realizadas.

3.1 LEVANTAMENTO DE REQUISITOS

Os requisitos levantados no desenvolvimento de um software podem ser

classificados em funcionais ou não funcionais. Robert Grady da Hewlett Packard

desenvolveu uma classificação para os requisitos funcionais e não funcionais,

Page 62: DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS …fateclins.edu.br/v4.0/trabalhoGraduacao/mXNIfr3... · DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS ETSCHEID UM ESTUDO SOBRE A PERSISTÊNCIA

61

utilizando o termo em inglês functionality para classificar os requisitos funcionais, e

para os requisitos não funcionais, os termos também em inglês, reliability,

performance e supportability, formando o acrônimo FURPS. Ele utilizou também o

sinal de “+” no final da palavra FURPS para referenciar-se a outras restrições, como

concepção, implementação, interface e limitações físicas do sistema. (EELES, 2004)

Logo a seguir os requisitos estão abordados mais detalhadamente de acordo

com a classificação feita por Robert Grady:

3.1.1 Requisitos funcionais

Os requisitos funcionais, que de acordo com a classificação FURPS é o “F” de

functionality, significa funcionalidade (EELES, 2004). Esse tipo de requisito

representa o comportamento que o sistema apresenta devido às ações dos

usuários; os tipos de transações suportadas pelo sistema é um exemplo de requisito

funcional. Estes requisitos são capturados por uma ferramenta chamada caso de

uso, cada caso de uso representa uma parte de funcionalidade do sistema, os

relacionamentos dos casos de uso com os grupos de usuários e entre si são

descritos dentro da visão (diagrama) de casos de uso. O fluxo em que as funções

são executadas obedece a um padrão dentro da especificação dos requisitos.

(PAULA, 2008)

O sistema proposto neste trabalho tem o objetivo de fazer a intermediação

entre estabelecimentos que vendam comida pronta para entrega em domicílio e

seus consumidores. De acordo com a análise realizada para definição das

necessidades do mesmo, definiu-se que a plataforma deverá ser acessível por meio

da internet, em que o consumidor poderá, utilizando seu CEP ou endereço,

pesquisar os restaurantes que atendam a sua região, consultar o cardápio e fazer

seu pedido. O sistema será o responsável pela comunicação entre o restaurante e o

consumidor.

Também foram identificados os seguintes tipos de usuários: visitante,

consumidor, restaurante e administrador. A sequência a seguir mostra as etapas de

um pedido a ser realizado através do sistema:

1. O consumidor faz um pedido no site;

2. O sistema envia o pedido para o restaurante, que pode ser por meio de e-

mail, fax, Short Message Service (SMS) e outros;

Page 63: DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS …fateclins.edu.br/v4.0/trabalhoGraduacao/mXNIfr3... · DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS ETSCHEID UM ESTUDO SOBRE A PERSISTÊNCIA

62

3. O restaurante confirma o recebimento do pedido e atualiza o status do

mesmo no site (pedido pronto, a caminho, entrega realizada);

4. O sistema envia um e-mail ao consumidor com um link que direciona para

o site permitindo a avaliação da compra;

5. O consumidor faz a avaliação no site.

3.1.2 Requisitos não funcionais

Os requisitos não funcionais do sistema quantificam as características

comportamentais do sistema e não capturadas pelos casos de uso. São exemplos

de requisitos não funcionais: a facilidade de uso do sistema, o tempo de resposta e o

tempo entre as falhas no sistema. Ou seja, os requisitos não funcionais descrevem

os requisitos de desempenho e outros aspectos que diz respeito à qualidade que se

deseja atingir do sistema. (PAULA, 2008)

Logo a seguir estão os tipos de requisitos não funcionais segundo a

classificação já mencionada FURPS (EELES, 2004):

• Usability – que significa usabilidade: baseia-se em torno da interface de

usuário, como acessibilidade, design e consistência da interface.

• Reliability – que significa confiabilidade: trata de aspectos como a

disponibilidade do sistema, como precisão ou capacidade de recuperação

no caso de falhas.

• Performance – que significa atuação: envolve tempo de resposta do

sistema, tempo de recuperação e inicialização, ou seja, o desempenho

transferência de informações através do sistema .

• Supportability – que significa suportabilidade: outros requisitos, como

testabilidade, adaptabilidade, facilidade de manutenção, compatibilidade,

configuração, escalabilidade e outros são considerados requisitos de

suporte. (EELES, 2004)

A seguir estão os requisitos não funcionais levantados para o sistema a ser

desenvolvido.

Para os requisitos de usabilidade, pretende-se criar uma interface gráfica

simples e atrativa e que funcione perfeitamente nos navegadores mais utilizados. As

permissões de acesso ao sistema serão baseadas em papeis de usuários e

controladas por meio de autenticações de usuário e senha.

Page 64: DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS …fateclins.edu.br/v4.0/trabalhoGraduacao/mXNIfr3... · DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS ETSCHEID UM ESTUDO SOBRE A PERSISTÊNCIA

63

Quanto à confiabilidade do sistema, espera-se que o mesmo esteja disponível

sempre que requisitado e que seus dados sejam consistentes.

Espera-se que a performance do sistema seja a melhor possível, com tempo

curto de resposta, principalmente para requisições de busca, e suportar requisições

de grandes quantidades de usuários simultaneamente sem que seu desempenho

seja afetado.

Para os requisitos de suportabilidade, pretende-se que o sistema seja de fácil

manutenção e alta escalabilidade.

3.1.3 As restrições

As outras restrições citadas anteriormente podem definir a adequação de

custos e prazos para o desenvolvimento de um projeto, a plataforma tecnológica, as

licenças de uso e os componentes de hardware e software entre outros. (BEZERRA,

2007)

No subitem a seguir está a apresentação da análise dos respectivos

requisitos levantados.

3.2 ANÁLISE DE REQUISITOS FUNCIONAIS

Os requisitos funcionais como já mencionado anteriormente são moldados

pelos casos de uso. O diagrama de caso de uso possui uma notação gráfica simples

e uma linguagem natural, facilitando o entendimento e a comunicação entre

desenvolvedores e usuários. (BEZERRA, 2007)

Como foi escolhido o ciclo de vida incremental e iterativo para o

desenvolvimento do sistema proposto neste trabalho, inicialmente serão

incrementadas apenas algumas das funcionalidades do diagrama de caso de uso,

as quais estão relacionadas a seguir:

• Pesquisar Restaurante;

• Fazer Login;

• Manter Usuário Restaurante;

• Manter Cardápio.

Na Figura 3.3 está representado o diagrama de caso de uso das

funcionalidades do sistema.

Page 65: DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS …fateclins.edu.br/v4.0/trabalhoGraduacao/mXNIfr3... · DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS ETSCHEID UM ESTUDO SOBRE A PERSISTÊNCIA

Figura 3.3 - Diagrama de Caso de UsoFonte: Elaborada pelos autores

Na Figura 3.4 está representado o

Diagrama de Caso de Uso autores, 2014.

está representado o diagrama de classe.

64

Page 66: DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS …fateclins.edu.br/v4.0/trabalhoGraduacao/mXNIfr3... · DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS ETSCHEID UM ESTUDO SOBRE A PERSISTÊNCIA

Figura 3.4 - Diagrama de CFonte: Elaborada pelos autores

Em seguida estão as histórias e os diagramas

MVC referentes a cada caso de uso das funcionalidades escolhidas.

Diagrama de Classe Fonte: Elaborada pelos autores, 2014.

Em seguida estão as histórias e os diagramas de atividades, sequência e

cada caso de uso das funcionalidades escolhidas.

65

de atividades, sequência e

cada caso de uso das funcionalidades escolhidas.

Page 67: DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS …fateclins.edu.br/v4.0/trabalhoGraduacao/mXNIfr3... · DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS ETSCHEID UM ESTUDO SOBRE A PERSISTÊNCIA

3.2.1 Caso de uso: Pesquisar Restaurante

O consumidor/visitante do site informa um CEP e o sistema mostrará uma

lista de restaurantes cadastrados que atendam àquela região. A lista mostrará as

informações principais de cada restaurante, como nome, endereço, tipo de comida,

horário de atendimento, tempo e taxa de entrega. Após a escolha do restaurante, o

sistema apresenta o car

cadastrado que atenda o CEP informado, o sistema exibirá uma mensagem.

O diagrama de atividades referente ao caso de uso Pesquisar Restaurante

está demonstrado na Figura

Figura 3.5 - Diagrama de Atividade Pesquisar RestauranteFonte: Elaborada pelos autores

Na Figura 3.6 e

Pesquisar Restaurante.

Caso de uso: Pesquisar Restaurante

O consumidor/visitante do site informa um CEP e o sistema mostrará uma

staurantes cadastrados que atendam àquela região. A lista mostrará as

informações principais de cada restaurante, como nome, endereço, tipo de comida,

horário de atendimento, tempo e taxa de entrega. Após a escolha do restaurante, o

sistema apresenta o cardápio do mesmo. Caso não haja nenhum restaurante

cadastrado que atenda o CEP informado, o sistema exibirá uma mensagem.

O diagrama de atividades referente ao caso de uso Pesquisar Restaurante

Figura 3.5.

Diagrama de Atividade Pesquisar Restaurante Fonte: Elaborada pelos autores, 2014.

está ilustrado o diagrama de sequência do caso de uso

66

O consumidor/visitante do site informa um CEP e o sistema mostrará uma

staurantes cadastrados que atendam àquela região. A lista mostrará as

informações principais de cada restaurante, como nome, endereço, tipo de comida,

horário de atendimento, tempo e taxa de entrega. Após a escolha do restaurante, o

dápio do mesmo. Caso não haja nenhum restaurante

cadastrado que atenda o CEP informado, o sistema exibirá uma mensagem.

O diagrama de atividades referente ao caso de uso Pesquisar Restaurante

o diagrama de sequência do caso de uso

Page 68: DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS …fateclins.edu.br/v4.0/trabalhoGraduacao/mXNIfr3... · DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS ETSCHEID UM ESTUDO SOBRE A PERSISTÊNCIA

Figura 3.6 - Diagrama de SFonte: Elaborada pelos autores

O diagrama MVC Pesquisar Restaurante está demonstrado na

Figura 3.7 - MVC Pesquisar RestauranteFonte: Elaborada pelos autores

Diagrama de Sequência Pesquisar Restaurante Fonte: Elaborada pelos autores, 2014.

O diagrama MVC Pesquisar Restaurante está demonstrado na

MVC Pesquisar Restaurante Fonte: Elaborada pelos autores, 2014.

67

O diagrama MVC Pesquisar Restaurante está demonstrado na Figura 3.7.

Page 69: DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS …fateclins.edu.br/v4.0/trabalhoGraduacao/mXNIfr3... · DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS ETSCHEID UM ESTUDO SOBRE A PERSISTÊNCIA

3.2.2 Caso de uso: Fazer Login

O login pode ser realizado por qualquer um dos usuários:

restaurante e administrador.

cadastrados e o sistema faz a verificação dos dados. Se estiverem corretos, o

usuário acessa o sistema de acordo com seus privilégios, caso os dados informados

não estejam corretos, o usuário opta por

sistema.

Na Figura 3.8 está

Figura 3.8 - Diagrama de Atividade Fazer LoginFonte: Elaborada pelos autores

Na Figura 3.9 est

Fazer Login, demonstrando a permissão de cada usuário.

O diagrama MVC do caso de uso Fazer Login está demonstrado na

3.10.

Como os casos de uso Manter Usuário Restaurante e Manter Cardápio são

bastante comuns, não serão mostrados neste trabalho, apenas uma breve descrição

de cada um deles pode ser lida logo em seguida aos diagramas referentes ao caso

de uso Fazer Login.

Caso de uso: Fazer Login

O login pode ser realizado por qualquer um dos usuários:

restaurante e administrador. O usuário digita seu e-mail e sua senha anteriormente

sistema faz a verificação dos dados. Se estiverem corretos, o

usuário acessa o sistema de acordo com seus privilégios, caso os dados informados

não estejam corretos, o usuário opta por retornar à opção fazer

á o diagrama de atividades do caso de uso Fazer

Diagrama de Atividade Fazer Login Fonte: Elaborada pelos autores, 2014.

tá representado o diagrama de sequência

Fazer Login, demonstrando a permissão de cada usuário.

O diagrama MVC do caso de uso Fazer Login está demonstrado na

Como os casos de uso Manter Usuário Restaurante e Manter Cardápio são

erão mostrados neste trabalho, apenas uma breve descrição

de cada um deles pode ser lida logo em seguida aos diagramas referentes ao caso

68

O login pode ser realizado por qualquer um dos usuários: consumidor,

senha anteriormente

sistema faz a verificação dos dados. Se estiverem corretos, o

usuário acessa o sistema de acordo com seus privilégios, caso os dados informados

fazer login ou sair do

o diagrama de atividades do caso de uso Fazer Login.

o diagrama de sequência do caso de uso

O diagrama MVC do caso de uso Fazer Login está demonstrado na Figura

Como os casos de uso Manter Usuário Restaurante e Manter Cardápio são

erão mostrados neste trabalho, apenas uma breve descrição

de cada um deles pode ser lida logo em seguida aos diagramas referentes ao caso

Page 70: DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS …fateclins.edu.br/v4.0/trabalhoGraduacao/mXNIfr3... · DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS ETSCHEID UM ESTUDO SOBRE A PERSISTÊNCIA

Figura 3.9 - Diagrama de SFonte: Elaborada pelos autores

Figura 3.10 - Diagrama MVC Fazer LoginFonte: Elaborada pelos autores

Diagrama de Sequência Fazer Login Fonte: Elaborada pelos autores, 2014.

Diagrama MVC Fazer Login Fonte: Elaborada pelos autores, 2014.

69

Page 71: DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS …fateclins.edu.br/v4.0/trabalhoGraduacao/mXNIfr3... · DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS ETSCHEID UM ESTUDO SOBRE A PERSISTÊNCIA

70

3.2.3 Caso de uso: Manter Usuário Restaurante

O Manter Usuário Restaurante é a atividade de cadastrar, alterar ou excluir o

usuário do restaurante. Nesta atividade, o usuário do restaurante ainda não

cadastrado terá acesso a uma tela para cadastrar o estabelecimento com os dados

solicitados pelo sistema, informando inclusive e-mail e senha para acesso futuro. O

cadastro será analisado pelo administrador do sistema, caso seja aprovado, será

ativado pelo administrador, permitindo ao usuário do restaurante o acesso ao

sistema.

Um usuário já cadastro tem a permissão nesse caso de uso de fazer

alterações para atualizar seus dados ou excluí-los.

Como o caso de uso do tipo Manter é bastante comum, neste trabalho não

serão mostrados todos os diagramas de caso uso deste tipo.

3.2.4 Caso de uso: Manter Cardápio

No caso de uso Manter Cardápio, o usuário restaurante tem a possibilidade

cadastrar, alterar ou excluir itens do próprio cardápio.

Como dito anteriormente, o diagrama desse caso de uso não será mostrado.

3.3 ANÁLISE DE REQUISITOS NÃO FUNCIONAIS

Com a pretensão de atender os requisitos não funcionais, citados no

levantamento de requisitos, foram pesquisadas algumas técnicas e definidas

algumas metodologias, que estão descritas logo a seguir.

3.3.1 Usabilidade

Para garantir que o sistema tenha compatibilidade com a maioria dos

navegadores, serão utilizadas as tecnologias JavaServer Faces com PrimeFaces.

Quanto ao design do site, as páginas terão uma navegabilidade simples, com no

máximo quatro cliques será possível acessar as suas principais funcionalidades.

Para o controle de autenticação da senha do usuário e de suas permissões de uso

será utilizado o framework Spring Security.

Page 72: DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS …fateclins.edu.br/v4.0/trabalhoGraduacao/mXNIfr3... · DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS ETSCHEID UM ESTUDO SOBRE A PERSISTÊNCIA

71

3.3.2 Performance

Tomando por base um dos conceitos de persistência poliglota, apresentado

por Chris Richardson, autor, desenvolvedor e palestrante renomado, surgiu a ideia

de utilizar o banco de dados chave/valor Redis para garantir a obtenção de

respostas rápidas para as principais requisições feitas ao sistema. O Redis será o

responsável por responder às requisições de busca do site. As principais

características do banco de dados Redis já foram abordadas no segundo capítulo

deste trabalho.

As consultas realizadas em um banco de dados chave/valor são restritas, não

havendo a possibilidade de se realizar pesquisas complexas. As respostas

desejadas devem ser armazenadas no Redis de uma forma desnormalizada,

evitando joins e outros comandos SQL mais pesados, utilizados nos bancos de

dados relacionais. A utilização da forma desnormalizada contribui para o alcance de

respostas mais rápidas.

Para descobrir quais informações devem ser armazenadas de forma

desnormalizada, é necessário identificar as requisições feitas ao sistema.

Duas requisições principais foram identificadas neste sistema para a primeira

fase do desenvolvimento, suas respectivas respostas devem retornar:

• A lista de restaurantes que atendam determinado CEP;

• O cardápio do restaurante escolhido.

As informações podem ser armazenadas no Redis de maneira adequada e

consideravelmente fácil. A modelagem de dados para o Redis e a forma de

armazenamento de dados no mesmo serão abordadas detalhadamente no próximo

capítulo.

3.3.3 Confiabilidade

Segundo Chris Richardson, as vantagens oferecidas pelos bancos relacionais

e pelos bancos chave/valor podem ser usufruídas ao mesmo tempo, se essas

tecnologias forem combinadas em uma solução de persistência poliglota. Um

exemplo apresentado pelo autor em suas palestras é uma aplicação utilizando

MySQL como sistema de armazenamento, em inglês System Of Record - SOR e

Redis, um banco chave/valor, para atender as requisições de busca feitas ao

Page 73: DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS …fateclins.edu.br/v4.0/trabalhoGraduacao/mXNIfr3... · DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS ETSCHEID UM ESTUDO SOBRE A PERSISTÊNCIA

sistema. As principais vantagens que essa solução traz são: respos

requisições, fácil replicação e

Para garantir a consistência entre os dois

necessário abrir mão das características ACID e trabalhar com consistência

eventual.

Na Figura 3.11 e

garantia da consistência

Figura 3.11 - Padrão de sincronização MySQL/RedisFonte: Elaborada pelos autores,

Descrição dos passos da

1. Transação ACID no MySQL:

• Começar MySQL transação

• Fazer create/update/delete

sistema. As principais vantagens que essa solução traz são: respos

requisições, fácil replicação e sharding. (RICHARDSON, 2012)

Para garantir a consistência entre os dois tipos de bancos de dados é

necessário abrir mão das características ACID e trabalhar com consistência

estão representados os dois passos necessários

eventual sincronizando Redis e MySQL.

Padrão de sincronização MySQL/Redis Fonte: Elaborada pelos autores, 2014.

Descrição dos passos da Figura 3.11:

Transação ACID no MySQL:

Começar MySQL transação;

create/update/delete no MySQL;

72

sistema. As principais vantagens que essa solução traz são: respostas rápidas para

tipos de bancos de dados é

necessário abrir mão das características ACID e trabalhar com consistência

passos necessários para a

sincronizando Redis e MySQL.

Page 74: DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS …fateclins.edu.br/v4.0/trabalhoGraduacao/mXNIfr3... · DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS ETSCHEID UM ESTUDO SOBRE A PERSISTÊNCIA

73

• Gravar evento Create, Read, Update and Delete (CRUD) no MySQL;

• Terminar transação (commit).

2. Alterar dados no Redis:

• Começar laço para cada evento CRUD não processado;

• Pegar próximo evento CRUD;

• Se o evento ainda não foi atualizado no Redis, atualizar;

• Marcar evento em MySQL como processado;

• Ir para próximo evento CRUD.

A transação ACID garante que somente aconteçam alterações no BD MySQL

caso seja gravado um evento registrando estas alterações. Em intervalos de tempo

predefinidos os eventos são verificados, os não processados são utilizados para

fazer a atualização no Redis, se esta atualização for realizada com sucesso, o

evento é marcado como processado. Este processo garante que os dados nos

bancos sejam eventualmente consistentes. (RICHARDSON, C., 2012)

3.3.4 Suportabilidade

Será utilizado o padrão MVC para tentar assegurar que a manutenção do

sistema seja mais simples possível. A arquitetura do sistema deverá ser bem

estruturada, a cada classe será atribuída uma única responsabilidade.

Deseja-se ainda atingir uma alta escalabilidade, principalmente horizontal,

aproveitando-se de um recurso fornecido pelo Redis, que facilita a replicação do tipo

master/slave e sharding .

No próximo capítulo estão as fases de implementação das funcionalidades

principais do sistema, a descrição das técnicas utilizadas, a sincronização dos

bancos de dados MySQL e Redis e as imagens das telas finais do protótipo do

sistema desenvolvido.

Page 75: DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS …fateclins.edu.br/v4.0/trabalhoGraduacao/mXNIfr3... · DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS ETSCHEID UM ESTUDO SOBRE A PERSISTÊNCIA

74

4 IMPLEMENTAÇÃO DO SISTEMA

Neste capítulo são apresentados os principais passos para o desenvolvimento

do protótipo do sistema e as técnicas utilizadas. Logo em seguida estão as imagens

das telas com as funcionalidades implementadas e a conexão dos bancos de dados

utilizando a persistência poliglota.

4.1 PREPARAÇÃO DO AMBIENTE DE DESENVOLVIMENTO

A preparação do ambiente de desenvolvimento do sistema foi o primeiro

passo necessário para a realização do projeto.

O ambiente integrado para o desenvolvimento de software (IDE) escolhido foi

o NetBeans versão 7.3. Para a construção de interfaces de usuário foi utilizado o

framework MVC chamado JavaServer Faces na versão 2.2. Este framework foi

usado em conjunto com o PrimeFaces versão 4.0, que é uma biblioteca de

componentes para JSF.

O Apache Tomcat versão 7.0 foi utilizado como servidor web. A

implementação EclipseLink versão 2.5 do JPA foi utilizada para realizar o

mapeamento objeto relacional com o banco de dados MySQL 5.6.13.

Para realizar o controle da autenticação e da autorização dos usuários do

sistema foi utilizado o framework Spring Security 3.0 com suas respectivas

bibliotecas.

Foi criado um projeto Java web em que foram inclusas as bibliotecas citadas

anteriormente.

4.2 CONFIGURAÇÃO JPA E IMPLEMENTAÇÃO DAS CLASSES EN TIDADES

Para realizar a conexão com o banco de dados MySQL foi escolhido o

método Java Naming and Directory Interface (JNDI), que define a fonte de dados.

Esta conexão será utilizada pelo JPA e pelo Spring Security, já mencionados nos

subtítulos 2.3 e 2.4 do segundo capítulo.

A fonte de dados JNDI foi definida no arquivo context.xml, criado na pasta

META-INF.

Page 76: DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS …fateclins.edu.br/v4.0/trabalhoGraduacao/mXNIfr3... · DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS ETSCHEID UM ESTUDO SOBRE A PERSISTÊNCIA

75

Na Figura 4.1 está a implementação deste arquivo de configuração.

Figura 4.1 - Arquivo context.xml Fonte: Elaborada pelos autores, 2014.

A Figura 4.2 contém o arquivo persistence.xml, que é o arquivo de

configuração para a implementação EclipseLink do JPA criado na pasta

Configuration Files do projeto.

Figura 4.2 - Arquivo persistence.xml Fonte: Elaborada pelos autores, 2014.

Após a configuração da conexão com o banco de dados MySQL foram

implementadas todas as classes de entidades com as respectivas anotações JPA

para o mapeamento objeto-relacional automático.

Page 77: DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS …fateclins.edu.br/v4.0/trabalhoGraduacao/mXNIfr3... · DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS ETSCHEID UM ESTUDO SOBRE A PERSISTÊNCIA

76

Na Figura 4.3 está representada a classe entidade Produto, escolhida para

exemplificar as anotações JPA.

Figura 4.3 - Classe entidade Produto Fonte: Elaborada pelos autores, 2014.

Como o EclipseLink está configurado para criar tabelas automaticamente,

todas as tabelas referentes às entidades criadas no banco de dados MySQL são

encontradas após um deploy do projeto.

4.3 PADRÕES DE CONTROLE DE TRANSAÇÃO

Para garantir um melhor aproveitamento dos recursos disponíveis no servidor

web e reduzir a responsabilidade do desenvolvedor sobre o controle das transações

foram combinados dois padrões, para serem usados em conjunto:

OpenEntityManagerInView (OEMV) e OpenTransactionInApplicationPhaseListener

(OTAPL).

Page 78: DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS …fateclins.edu.br/v4.0/trabalhoGraduacao/mXNIfr3... · DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS ETSCHEID UM ESTUDO SOBRE A PERSISTÊNCIA

77

O padrão de controle OEMV garante que para cada requisição seja fornecido

um único EntityManager, que está disponível para os beans da aplicação.

(PATRICIO, 2009)

Este padrão foi alcançado utilizando um Servlet Filter chamado

EntityManagerFilter juntamente com uma classe utilitária chamada

EntityManagerUtil. A única função da classe EntityManagerUtil é o fornecimento do

EntityManager criado para cada thread (requisição) utilizando um atributo do tipo

ThreadLocal<EntityManager>.

O padrão de controle OEMV traz algumas vantagens:

• A existência de um único ponto na aplicação para a criação e fechamento

do EntityManager para cada requisição, que é o método doFilter() no

EntityManagerFilter. Isso ocorre automaticamente, sem a necessidade da

interferência do desenvolvedor;

• O aproveitamento de uma única EntityManagerFactory para toda a

aplicação, pois este objeto está sendo instanciado no momento da

inicialização do EntityManagerFilter (no método init() do filtro) e destruído

quando o filtro está sendo destruído (no método destroy() do filtro). Além

de facilitar o desenvolvimento, isto poupa recursos, pois a criação de uma

EntityManagerFactory é relativamente custosa;

• O EntityManager para um thread pode ser recuperado por qualquer

classe da aplicação chamando o método estático getEntityManager() da

classe utilitária EntityManagerUtil.

Figura 4.4 - Classe EntityManagerUtil Fonte: Elaborada pelos autores, 2014.

Page 79: DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS …fateclins.edu.br/v4.0/trabalhoGraduacao/mXNIfr3... · DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS ETSCHEID UM ESTUDO SOBRE A PERSISTÊNCIA

78

Na Figura 4.4 está a implementação da classe EntityManagerUtil, que

disponibiliza o EntityManager para a aplicação.

Os métodos init(), destroy() e doFilter() do EntityManagerFilter estão

representados na Figura 4.5.

Figura 4.5 - Classe EntityManagerFilter Fonte: Elaborada pelos autores, 2014.

O padrão OTAPL é responsável por abrir e fechar transações, aproveitando o

ciclo de vida do JSF. Antes de entrar na fase Invoke Application é aberta uma

transação utilizando o EntityManager, fornecido pela classe EntityManagerUtil; ao

sair desta fase, a transação é fechada. Desta forma, é garantido que somente sejam

abertas transações caso a aplicação esteja sendo invocada e garantindo também

que as transações estejam sempre sendo fechadas. (SPRING, 2007).

Para a realização deste padrão, foi implementado um PhaseListener chamado

OpenTransactionInPhaseListener.

Na Figura 4.6 está representada a implementação do PhaseListener.

Para a aplicação tratar dos eventos de entrada e saída da fase foi inserido no

arquivo faces-config.xml um trecho de código, que pode ser observado na Figura

4.7.

Page 80: DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS …fateclins.edu.br/v4.0/trabalhoGraduacao/mXNIfr3... · DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS ETSCHEID UM ESTUDO SOBRE A PERSISTÊNCIA

79

Figura 4.6 - Implementação OpenTransactionInPhaseListener Fonte: Elaborada pelos autores, 2014.

Figura 4.7 - Trecho do arquivo faces-config.xml Fonte: Elaborada pelos autores, 2014.

4.4 ACESSO AOS DADOS

Para realizar a comunicação entre a aplicação e os bancos de dados foi

seguido um padrão, garantindo que nenhuma classe de controle tenha acesso direto

aos bancos. Foi criada uma camada de regras de negócio, responsável pela

intermediação da aplicação com as classes Data Access Object (DAO), esta camada

Page 81: DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS …fateclins.edu.br/v4.0/trabalhoGraduacao/mXNIfr3... · DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS ETSCHEID UM ESTUDO SOBRE A PERSISTÊNCIA

80

fornece as mesmas funcionalidades das DAOs, porém possibilita o tratamento ou a

validação dos dados antes de executar qualquer busca no BD; isso aumenta a

flexibilidade e a segurança da aplicação final.

As regras de negócio podem ser implementadas em um único local e, caso

elas sofram alterações, podem ser adaptadas centralizadamente.

A arquitetura em camadas está representada pela Figura 4.8.

Figura 4.8 - Arquitetura em camadas Fonte: Luckow; Melo, 2010, p. 180 (adaptada pelos autores)

4.5 LEIAUTE DAS PÁGINAS DO SITE

Na Figura 4.9 está representado o leiaute padrão do sistema.

Figura 4.9 - Template padrão do site Fonte: Elaborada pelos autores, 2014.

Page 82: DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS …fateclins.edu.br/v4.0/trabalhoGraduacao/mXNIfr3... · DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS ETSCHEID UM ESTUDO SOBRE A PERSISTÊNCIA

81

Foi definido um leiaute padrão para todas as páginas do site, composto por

logotipo (localizado na área superior da página) seguido por um menu dinâmico, em

seguida vem o corpo da página e abaixo deste está o rodapé dinâmico. Este

template foi desenvolvido com o Facelets do JavaServer Faces utilizando,

principalmente, os componentes composition, define, insert e include.

O código-fonte do template padrão pode ser conferido na Figura 4.10.

Figura 4.10 - Código-fonte do template padrão Fonte: Elaborada pelos autores, 2014.

4.6 IMPLEMENTAÇÃO DOS CASOS DE USO

A seguir está a explicação de como foram implementados os casos de uso

necessários para o estudo da aplicação da persistência poliglota em um protótipo de

um sistema de venda de comida para entrega em domicílio.

Os casos de uso demonstrados foram definidos anteriormente, sendo: Manter

Usuário Restaurante, Fazer Login, Manter Cardápio e Pesquisar Restaurante.

Page 83: DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS …fateclins.edu.br/v4.0/trabalhoGraduacao/mXNIfr3... · DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS ETSCHEID UM ESTUDO SOBRE A PERSISTÊNCIA

82

4.6.1 Implementação do caso de uso Manter Usuário R estaurante

Para implementar o caso de uso Manter Usuário Restaurante foram criadas

duas páginas JSF utilizando, entre outras, a biblioteca de componentes PrimeFaces.

O leiaute da primeira página, que possibilita cadastrar um novo restaurante, contém

o componente wizard do PrimeFaces para organizar as informações solicitadas para

o cadastro do restaurante. O wizard possui quatro abas, para solicitação dos

seguintes dados:

• Primeira aba: dados principais do restaurante;

• Segunda aba: endereço do restaurante;

• Terceira aba: cadastro do usuário responsável pelo restaurante;

• Quarta aba: confirmação dos dados, mostrando o cadastro completo para

que o usuário confirme os dados informados.

Na Figura 4.11 está representada a tela da primeira página do caso de uso

Manter Usuário Restaurante, que é o cadastro do restaurante.

Figura 4.11 - Página Cadastro de Restaurante Fonte: Elaborada pelos autores, 2014.

A segunda página do Manter Usuário Restaurante fornece a funcionalidade

de alteração dos dados cadastrais do restaurante. Para realizar alterações dos

dados cadastrados, o usuário escolhe na página os dados a ser alterados e o

sistema abre uma caixa de diálogo para efetuar a atualização.

Page 84: DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS …fateclins.edu.br/v4.0/trabalhoGraduacao/mXNIfr3... · DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS ETSCHEID UM ESTUDO SOBRE A PERSISTÊNCIA

83

A Figura 4.12 é a imagem da segunda página Manter Usuário Restaurante,

que permite realizar alterações dos dados cadastrados do restaurante.

Figura 4.12 - Página Alterar Dados do Restaurante Fonte: Elaborada pelos autores, 2014.

4.6.2 Implementação do caso de uso Fazer Login

A funcionalidade Fazer Login foi desenvolvida utilizando o framework Spring

Security para garantir maior segurança do sistema e facilitar o controle de

autenticação e autorização na aplicação. Além da importação dos arquivos .jar,

referente a este framework no projeto, foi necessário a inclusão de dois arquivos de

configuração, sendo eles: applicationContext.xml e applicationContext-security.xml.

Figura 4.13 - Código applicationContext.xml Fonte: Elaborada pelos autores, 2014.

Page 85: DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS …fateclins.edu.br/v4.0/trabalhoGraduacao/mXNIfr3... · DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS ETSCHEID UM ESTUDO SOBRE A PERSISTÊNCIA

84

Na Figura 4.13 está representado o código do arquivo applicationContext.xml,

no qual está contida a informação da conexão da aplicação com a fonte de dados,

que contém os dados de acessos e permissões dos usuários.

O arquivo de configuração applicationContext-security.xml determina o

comportamento principal do framework, definindo, entre outras ações, as páginas

que podem ser acessadas de acordo com as permissões, qual será a página de

login, define também como recuperar usuário e senha e as respectivas permissões

de acesso.

Na Figura 4.14 pode-se conferir o código que contém o arquivo

applicationContext-security.xml na aplicação.

Figura 4.14 - Código applicationContext-security.xml Fonte: Elaborada pelos autores, 2014.

A página de Login do sistema está representada na Figura 4.15.

Page 86: DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS …fateclins.edu.br/v4.0/trabalhoGraduacao/mXNIfr3... · DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS ETSCHEID UM ESTUDO SOBRE A PERSISTÊNCIA

85

Figura 4.15 - Página de Login Fonte: Elaborada pelos autores, 2014.

4.6.3 Implementação do caso de uso Manter Cardápio

Manter cardápio é uma funcionalidade em que o usuário administrador do

restaurante pode incluir, alterar ou excluir os produtos pertencentes ao cardápio do

estabelecimento. Este caso de uso foi implementado por meio de uma página JSF

cujo componente principal é um dataTable que contém os produtos cadastrados e os

botões de ação para alterar ou excluir um produto já cadastrado. Para cadastrar um

novo produto há um botão chamado Novo Produto.

A Figura 4.16 é a imagem da página da funcionalidade Manter Cardápio.

Figura 4.16 - Página Manter Cardápio Fonte: Elaborada pelos autores, 2014.

Page 87: DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS …fateclins.edu.br/v4.0/trabalhoGraduacao/mXNIfr3... · DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS ETSCHEID UM ESTUDO SOBRE A PERSISTÊNCIA

86

4.6.4 Implementação do caso de uso Pesquisar Restau rante

A página com a funcionalidade Pesquisar Restaurante é a página principal do

sistema, pois será a mais utilizada, já que o objetivo do site é a busca por

estabelecimentos que atendam um CEP informado. No corpo desta página há

apenas o campo para informação do CEP e um botão para inicializar a busca.

Na Figura 4.17 está a página Pesquisar Restaurante.

Figura 4.17 - Página Pesquisar Restaurante Fonte: Elaborada pelos autores, 2014.

O exemplo de uma página que mostra os restaurantes encontrados que

atendem o CEP informado pode ser verificado na Figura 4.18.

Figura 4.18 - Página dos restaurantes encontrados Fonte: Elaborada pelos autores, 2014.

Ao selecionar um restaurante da lista fornecida, é apresentada ao usuário

uma página contendo o cardápio do restaurante escolhido, conforme se verifica na

Page 88: DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS …fateclins.edu.br/v4.0/trabalhoGraduacao/mXNIfr3... · DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS ETSCHEID UM ESTUDO SOBRE A PERSISTÊNCIA

87

Figura 4.19.

Figura 4.19 - Página do cardápio do restaurante Fonte: Elaborada pelos autores, 2014.

As páginas foram testadas em três navegadores diferentes, são eles: Mozilla

Firefox 29, Microsoft Internet Explorer 11 e Google Chrome 34; não foi notado

nenhum problema de visualização ou funcionamento das páginas.

4.7 IMPLEMENTAÇÃO DA PERSISTÊNCIA POLIGLOTA

Após a implementação de todas as funcionalidades, foi preparado o ambiente

para a implementação da persistência poliglota. Houve a necessidade da instalação

de uma máquina virtual, pois o sistema fora desenvolvido em um ambiente Microsoft

Windows 7 e o BD Redis requer um sistema operacional Linux. A distribuição Linux

CentOS 6.4 foi instalada como máquina virtual no Oracle VM VirtualBox 4.2 para

atender a este requisito do Redis. O Redis versão 2.8 foi instalado e configurado

para ser executado como serviço.

Para possibilitar uma comunicação entre a aplicação e BD Redis foi

necessário configurar uma Local Area Network (LAN), que é uma rede local. Além

disso, houve a necessidade de importar a biblioteca referente à API Jedis versão

2.4, que é um cliente Redis para Java.

A seguir estão as principais etapas que foram realizadas para obtenção da

persistência poliglota.

Page 89: DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS …fateclins.edu.br/v4.0/trabalhoGraduacao/mXNIfr3... · DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS ETSCHEID UM ESTUDO SOBRE A PERSISTÊNCIA

88

4.7.1 Modelagem de dados para o banco de dados Redi s

No capítulo anterior foi citado que o Redis será encarregado em atender as

duas requisições principais do sistema, cujas respostas retornam respectivamente a

lista de restaurantes que atendam um CEP e o cardápio dos estabelecimentos

listados.

Para o atendimento à requisição que retorna a lista de restaurantes, foram

utilizadas duas estruturas de dados suportadas pelo Redis, são elas:

• Estrutura par key/value: para armazenar informações sobre os

restaurantes, em formato JSON. A chave de acesso (key) é composta por

“rest:{código do restaurante}”;

• Estrutura set: para fornecer todas as chaves dos restaurantes que

atendem um CEP. A chave de acesso é composta por “cep:{número do

CEP}”.

A Figura 4.20 contém exemplos de como os dados estão armazenados

utilizando essas duas estruturas no Redis.

Figura 4.20 - Estruturas set e chave/valor Fonte: Elaborada pelos autores, 2014.

A utilização das estruturas possibilita uma recuperação dos dados dos

restaurantes que atendem um CEP informado de maneira eficiente. Com apenas

três passos rápidos consegue-se obter a resposta da requisição. Os passos são:

• Buscar todos os membros do set com a chave “cep:{CEP informado}”;

Page 90: DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS …fateclins.edu.br/v4.0/trabalhoGraduacao/mXNIfr3... · DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS ETSCHEID UM ESTUDO SOBRE A PERSISTÊNCIA

89

• Buscar os JSONs de todos os restaurantes referenciados pelos membros

do set;

• Transformar lista de JSONs em lista de restaurantes.

A requisição que retorna o cardápio do restaurante escolhido é atendida

utilizando uma terceira estrutura de dados suportados pelo Redis, o hash. Todos os

produtos de um restaurante podem ser acessados por meio de uma chave do hash

composta por “rest:{código do restaurante}:produtos”. O JSON que representa cada

produto pode ser acessado dentro do hash com uma sub chave composta por

“prod:{código do produto}”.

Na Figura 4.21 pode-se observar um exemplo de hash que contém os

produtos de um restaurante.

Figura 4.21 - Estrutura hash Fonte: Elaborada pelos autores, 2014.

Para atender a requisição que retorna o cardápio são necessários dois

passos:

• Buscar todos os valores dos campos (JSONs) de um hash da chave

“rest:{código do restaurante}:produtos”;

• Transformar lista de JSONs em lista de produtos.

Mais um set foi criado no BD Redis, para fazer o controle de quais os eventos

CRUDs que foram processados. A chave do set é “crudsProcessados” e os

membros são os códigos de todos os eventos CRUD já processados.

A próxima etapa da implementação é a sincronização entre os dois bancos.

Page 91: DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS …fateclins.edu.br/v4.0/trabalhoGraduacao/mXNIfr3... · DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS ETSCHEID UM ESTUDO SOBRE A PERSISTÊNCIA

90

4.7.2 Realização do padrão de sincronização entre M ySQL e Redis

A sincronização entre MySQL e Redis deste sistema segue um fluxo para

garantir a consistência (BASE) na persistência poliglota. No capítulo anterior, na

Figura 3.11, podem ser observados os dois passos deste fluxo. Foi implementada

uma entidade auxiliar chamada CrudEvent, que é utilizada nos passos definidos no

fluxo. Esta entidade contém as informações necessárias de cada evento CRUD para

alterar os dados no Redis, conforme o evento ocorrido. As informações são as

seguintes:

• O código do evento;

• O tipo de entidade que disparou o evento;

• O código da entidade que disparou o evento;

• Uma string que fornece os principais detalhes do novo estado da entidade

fonte do evento no formato JSON;

• O tipo de evento CRUD que ocorreu;

• Um valor booleano, para indicar se o evento CRUD já foi ou não

processado no Redis.

A Figura 4.22 contém o código da implementação da entidade CrudEvent.

Figura 4.22 - Implementação entidade auxiliar CrudEvent Fonte: Elaborada pelos autores, 2014.

Foi implementado um método chamado save(), que deve ser invocado pela

Page 92: DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS …fateclins.edu.br/v4.0/trabalhoGraduacao/mXNIfr3... · DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS ETSCHEID UM ESTUDO SOBRE A PERSISTÊNCIA

91

camada de regras de negócio para criar e persistir o evento CRUD de maneira

simples, conforme verifica-se na Figura 4.23.

Figura 4.23 - Método save() utilizado para persistir o evento CRUD Fonte: Elaborada pelos autores, 2014.

Após a criação da classe CrudEvent e de seus métodos de persistência para

o BD MySQL, é possível a realização do primeiro passo do fluxo, sendo suficiente

persistir o evento CRUD dentro da mesma transação atômica que realiza o CRUD

da entidade disparadora. Na prática, significa a inclusão de apenas uma linha de

código em cada método CRUD (na camada de regras de negócio), de cada classe

que se deseja persistir futuramente no BD Redis.

Na Figura 4.24 pode ser notada a facilidade para realizar o primeiro passo do

fluxo no exemplo da classe RestauranteRN.

Page 93: DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS …fateclins.edu.br/v4.0/trabalhoGraduacao/mXNIfr3... · DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS ETSCHEID UM ESTUDO SOBRE A PERSISTÊNCIA

92

Figura 4.24 - Trecho da implementação da classe RestauranteRN Fonte: Elaborada pelos autores, 2014.

O segundo passo do fluxo, que é a sincronização do Redis com o MySQL, foi

implementado com um método que é executado automaticamente utilizando um

timer, que é inicializado no método contextInitialized() em uma classe que

implementa a interface ServletContextListener.

Na Figura 4.25 está o código com o método que faz a sincronização do Redis

com o MySQL tratando os eventos CRUD ainda não processados.

Na Figura 4.26 verifica-se um exemplo de um método utilizado na

sincronização dos bancos que realiza o processamento de um evento CRUD. Este

método é invocado pelo método da Figura 4.25.

Page 94: DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS …fateclins.edu.br/v4.0/trabalhoGraduacao/mXNIfr3... · DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS ETSCHEID UM ESTUDO SOBRE A PERSISTÊNCIA

93

Figura 4.25 - Implementação do método de sincronização MySQL/Redis Fonte: Elaborada pelos autores, 2014.

Page 95: DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS …fateclins.edu.br/v4.0/trabalhoGraduacao/mXNIfr3... · DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS ETSCHEID UM ESTUDO SOBRE A PERSISTÊNCIA

94

Figura 4.26 - Implementação do método que processa um evento CRUD Fonte: Elaborada pelos autores, 2014.

Após todo processo de implementação o banco de dados MySQL foi povoado

para possibilitar a realização de alguns testes, cujos resultados estão mostrados a

seguir.

4.7.3 Teste de viabilidade da persistência poliglot a

Sabendo-se que o BD Redis possui uma limitação relevante de que todos os

dados no Redis devem caber na RAM do servidor, notou-se a importância de testar

a ocupação do espaço da memória em função do volume de dados armazenados.

Foram realizados testes empíricos no protótipo para verificar como os bancos

de dados se comportariam nesta aplicação.

Para povoar o banco de dados MySQL foi criado um algoritmo, que define

que cada restaurante atenderá em média duzentos CEPs, possuirá cem produtos e

Page 96: DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS …fateclins.edu.br/v4.0/trabalhoGraduacao/mXNIfr3... · DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS ETSCHEID UM ESTUDO SOBRE A PERSISTÊNCIA

95

terá um administrador. Após o povoamento do MySQL, com diferentes quantidades

de dados, foi feita a sincronização com o banco de dados Redis.

A evolução do tamanho do BD Redis em função com a quantidade de

restaurantes armazenados está representada pelo gráfico da Figura 4.27.

Figura 4.27 - Memória RAM ocupada pelo Redis Fonte: Elaborada pelos autores, 2014.

O teste revelou que o espaço ocupado na memória RAM pelo BD Redis é

diretamente proporcional com a quantidade de restaurantes armazenados. Calculou-

se que para armazenar cem mil estabelecimentos são necessários

aproximadamente 2,5 GB de memória RAM, uma quantidade considerada pequena

em custo de hardware, portanto, o uso da persistência poliglota com o BD Redis no

quesito custo de memória necessário é viável.

Também foi efetuado um teste para comparar o tempo de resposta de uma

mesma requisição utilizando Redis e MySQL. Para fazer a comparação foi

implementado um filtro, que cronometra o tempo percorrido entre o momento em

que o filtro repassa a requisição até o momento em que ele recebe a resposta.

Na Figura 4.28 estão os gráficos com os resultados que comprovam que o BD

Redis possui um tempo de resposta constante, independente da quantidade de

restaurantes existentes nele e no BD MySQL o tempo de resposta aumenta

Page 97: DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS …fateclins.edu.br/v4.0/trabalhoGraduacao/mXNIfr3... · DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS ETSCHEID UM ESTUDO SOBRE A PERSISTÊNCIA

96

significativamente em função da quantidade de restaurantes que este armazena.

Frisando que não foi aplicado nenhum tipo de otimização nos bancos e que foi

realizada uma requisição por vez. Em um sistema em produção espera-se que

várias requisições sejam realizadas paralelamente, o que provavelmente

influenciaria ainda mais o resultado.

Figura 4.28 - Comparativo de tempo de resposta MySQL x Redis Fonte: Elaborada pelos autores, 2014.

Vale ressaltar que não foram aplicadas técnicas de análise de desempenho

para tais verificações, portanto, as afirmações anteriores passariam a ter maior e

melhor valor científico se passassem por metodologias específicas para estes

testes.

Page 98: DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS …fateclins.edu.br/v4.0/trabalhoGraduacao/mXNIfr3... · DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS ETSCHEID UM ESTUDO SOBRE A PERSISTÊNCIA

97

CONCLUSÃO

Existem atualmente várias opções de bancos de dados relacionais e não

relacionais no mercado. Entretanto, é importante ressaltar que cada tipo possui

características particulares.

Os bancos de dados relacionais possuem as características ACID, o que os

torna vantajosos pelo alto nível de consistência dos dados armazenados; ao passo

que os bancos de dados não relacionais possibilitam respostas rápidas às buscas e

fácil escalabilidade.

O uso em conjunto de diferentes tipos de bancos de dados pode trazer

grandes vantagens ao projeto, mas para isso, a escolha dos bancos deve ser

definida mediante avaliação prévia e cuidadosa da necessidade real do sistema.

Para um sistema de vendas on-line em que predomina a ação de buscas e

pesquisas essa miscigenação de tipos de bancos de dados permite que sejam

aproveitadas as vantagens oferecidas pelos dois tipos.

A utilização de um banco de dados relacional com outro não relacional recebe

a denominação de persistência poliglota.

Para o desenvolvimento do protótipo em questão foi decidido utilizar um

banco de dados relacional, o MySQL, e um banco de dados não relacional, que foi

escolhido mediante análise bastante minuciosa e estudada, pois dos tipos de bancos

de dados não relacionais que existem, sendo eles: Armazenamento chave/valor,

Armazenamento de documento, Armazenamento de família de colunas e Bancos de

grafos, procurou-se optar pelo tipo que atendesse à necessidade do sistema

proposto, ou seja, que fornecesse respostas rápidas e suportasse grande número de

acessos de usuários ao mesmo tempo. Nesse protótipo de um sistema web foram

criadas apenas algumas funcionalidades para testar a celeridade das respostas às

buscas aplicando a persistência poliglota.

Decidiu-se utilizar o banco não relacional denominado Redis, do tipo

chave/valor, que de acordo com as pesquisas realizadas seria o modelo indicado

para ser aplicado no projeto juntamente com o MySQL.

Conclui-se que o uso da persistência poliglota, apesar da complexidade de

sua aplicação, no projeto em questão foi exequível e até vantajoso, considerando a

Page 99: DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS …fateclins.edu.br/v4.0/trabalhoGraduacao/mXNIfr3... · DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS ETSCHEID UM ESTUDO SOBRE A PERSISTÊNCIA

98

rapidez na obtenção das respostas às requisições. Porém, os resultados podem

variar de acordo com o tipo de aplicação, convém fazer uma pré-análise para

verificar-se qual a real necessidade do sistema e identificar se o uso da persistência

poliglota pode ser vantajoso e suficiente para atender as requisições, caso decida-se

usá-la, definir os tipos de banco de dados mais adequados a serem utilizados de

acordo com suas características.

Foram aplicados testes empíricos, porém já indicam a vantagem em relação

às soluções tradicionais, que utilizam apenas bancos de dados relacionais.

Nos testes realizados no prótotipo foi observado que o espaço ocupado na

memória RAM pelo banco de dados Redis foi diretamente proporcional à quantidade

de dados armazenados. Verificou-se também que a quantidade de dados

armazenados no Redis não influenciou o tempo de resposta para as requisições; já

no MySQL, quanto maior a quantidade de dados armazenados maior foi o tempo de

resposta para as mesmas requisições.

Como sugestão para trabalhos futuros:

• Realização de testes para comparar as consultas utilizando MySQL ou

Redis; principalmente observando as alterações em um ambiente em que

são feitas inúmeras requisições ao servidor web paralelamente;

• Análise da otimização das consultas ao MySQL e verificação do impacto

no resultado dos testes;

• Análise da otimização da modelagem dos dados para o Redis com ênfase

na economicidade de espaço na memória e melhor aproveitamento das

particularidades do Redis;

• Adaptação do protótipo desenvolvido usando bancos não relacionais do

tipo grafos ou documentos em substituição ao BD chave/valor Redis;

• Desenvolvimento de outras funcionalidades do sistema (como carrinho de

compras, acompanhamentos de pedidos, emissão de relatórios, entre

outros) fazendo análise do aproveitamento das vantagens da persistência

poliglota.

Page 100: DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS …fateclins.edu.br/v4.0/trabalhoGraduacao/mXNIfr3... · DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS ETSCHEID UM ESTUDO SOBRE A PERSISTÊNCIA

99

REFERÊNCIAS BIBLIOGRÁFICAS

ABIA. Mercado de Food Service . 2010. Disponível em: <http://www.abia.org.br/cfs2012/mercado.asp> Acesso em: 13 abr. 2013. ABRASEL. Delivery online de comida deve crescer 100% ano até 2015, 05 abr. 2013. Disponível em: <http://www.abrasel.com.br/index.php/component/ content/article/7-noticias/2050-050413-delivery-online-de-comida-deve-crescer-100-ao-ano-ate-2015.html> Acesso em: 06 abr. 2013. BEZERRA, E. Princípios de análise e projetos de sistemas com UM L. 2. ed. Rio de Janeiro: Elsevier, 2007. BRASIL. Empreendedorismo online. 2013. Disponível em: <http://www.brasil.gov.br/empreendedor/estrutura-da-empresa/empreendedoris mo-online> Acesso em: 24 fev. 2013. BURNS, E.; SCHALK, C. JavaServer Faces 2.0: The Complete Reference . 1. ed. New York: Mc Graw Hill, 2010. ÇALIŞKAN, M.; VARAKSIN O. PrimeFaces Cookbook . 1. ed. Birmingham: Packt Publishing, 2013. CARLSON, J. L. Redis in Action . 1. ed. Shelter Island: Manning Publications Co., 2013. CODD, E. F. A relational model of data for large shared data Banks. Comunications of the ACM. San Jose, v.13, n.6, p. 377-387, jun. 1970. COMERNAWEB. Gastronomia delivery reservas. 2013. Disponível em: <http://www.comernaweb.com.br> Acesso em: 16 abr. 2013. DEVMEDIA. Passo a passo para o mundo de JavaServer Faces . Disponível em: < http://www.devmedia.com.br/passo-a-passo-para-o-mundo-de-javaserver -faces-parte-01/14815> Acesso em: 11 mai 2013. DISKCOOK. Os melhores restaurantes na sua casa. 2013. Disponível em: <http://www.diskcook.com.br/delivery> Acesso em: 16 abr. 2013. EBRICKSDIGITAL. Pesquisa analisa o mercado mobile e de e-commerce no Brasil, 30 abr. 2012. Disponível em: <http://www. ebricksdigital.com.br/ pesquisas-de-mercado/pesquisa-analisa-o-mercado-mobile-e-de-e-commerce-no-brasil> Acesso em: 13 abr. 2013. ECDFOODSERVICE. Introdução ao Mercado Food Service . 2010. Disponível em: <http://ecdfoodservice.com.br/downloads/01.pdf> Acesso em: 14 abr. 2013. ECOMMERCEBRASIL. Comércio Eletrônico: um universo de oportunidades, 24

Page 101: DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS …fateclins.edu.br/v4.0/trabalhoGraduacao/mXNIfr3... · DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS ETSCHEID UM ESTUDO SOBRE A PERSISTÊNCIA

100

jan. 2013. Disponível em: <http://www.ecommerce brasil.com.br/artigos/comercio-eletronico-um-universo-de-oportunidades> Acesso em: 13 mar. 2013. E-COMMERCEORG. Evolução da internet e do e-commerce . 2012. Disponível em: <http://www.e-commerce.org.br/stats.php> Acesso em: 02 abr. 2013. ECOMMERCESCHOOL. Pesquisas Profissionais de Ecommerce . 2011. <http://www.ecommerceschool.com.br/Pesquisa-Profissionais-de-Ecommerce-Ecommerce-School-2011.pdf> Acesso em: 13 mar. 2013. EDLICH, S. et al. NoSQL – Einstieg in die Welt nichtrelationaler Web 2.0 Databanken . 1. ed. München: Hanser, 2010. EELES, P. What, no supplementary specification ? Disponível em: <http://www.ibm.com/developerworks/rational/library/3975.html> Acesso em: 26 jun. 2013. ELMASRI, R.; NAVATHE, S. B. Sistemas de banco de dados. 1. ed. São Paulo: Pearson, 2005. ENTREGADELIVERY. Delivery de comida pela internet. 2013. Disponível em: <http://comida.entregadelivery.com.br> Acesso em: 12 abr. 2013. FH KÖLN. Datenbanken Online Lexikon . Disponível em: <http://wikis.gm.fh-koeln.de/wiki_db/Datenbanken/Cassandra> Acesso em: 12 abr 2013. GONÇALVES, E. Desenvolvendo Aplicações Web com JSP, Servlets, JavaServer Faces , Hibernate, EJB 3 Persistence e AJAX. 1. ed. Rio de Janeiro: Ciência Moderna, 2007. GONÇALVES, E. Dominando JavaServer Faces e Facelets Utilizando Spring 2.5, Hibernate e JPA. 1. ed. Rio de Janeiro: Ciência Moderna, 2008. HEISE. NoSQL im Überblick . Disponível em: <http://www.heise.de/ open/artikel/NoSQL-im-Ueberblick-1012483.html> Acesso em: 12 abr 2013. HOTELNEWS. Indústria do food service invade a internet. 2011. Disponível em:<http://www.revistahotelnews.com.br/2009/na_revista.php?id_revista=18&ano=2011> Acesso em: 13 abr. 2013. IBGE. Pesquisa de Orçamentos Familiares – POF 2002-2003. 2004. Disponível em: <http://www.ibge.gov.br/home/estatistica/populacao/condicaodevida/pof/2002/ pof200220032aed.pdf> Acesso em: 14 abr. 2013. IBGE. Pesquisa de Orçamentos Familiares – POF 2008-2009. 2010. Disponível em: <http://www.ibge.gov.br/home/estatistica/populacao/condicaodevida/pof/2008_ 2009/POFpublicacao.pdf> Acesso em: 14 abr. 2013. IFOOD. O delivery dos deliveries . 2013. Disponível em: <http://www.ifood.com.br/delivery> Acesso em: 16 abr. 2013.

Page 102: DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS …fateclins.edu.br/v4.0/trabalhoGraduacao/mXNIfr3... · DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS ETSCHEID UM ESTUDO SOBRE A PERSISTÊNCIA

101

JANAMESA. Nunca foi tão fácil comer bem. 2013. Disponível em: <http://www.janamesa.com.br> Acesso em: 16 abr. 2013. JAVASERVERFACES. JSF in a nutshell . 2013. Disponível em: <http://www.javaserverfaces.org> Acesso em: 05 mai 2013. LUCKOW, D. H.; MELO, A. A. Programação Java para Web. 1. ed. São Paulo: Novatec, 2010. MATTHEW, N.; STONES, R. Beginning Databases with PostgreSQL - From novice to Professional . 2. ed. New York: Apress, 2005. NETBEANS. Introdução ao JavaSever Faces 2.x. 2013. Disponível em: <https://netbeans.org/kb//docs/web/jsf20-intro_pt_BR.html> Acesso em: 11 mai 2013. OLIVEIRA, H. C. JPA Mini Livro - Primeiros passos e conceitos detal hados. 23 out. 2012. Disponível em: < http://uaihebert.com/sample-page/> Acesso em: 18 jan. 2014. PATRICIO, A. Open Session in View. 11 ago. 2009 Disponível em: <https://community.jboss.org/wiki/OpenSessioninView> Acesso em: 18 jan. 2014. PAULA, W. P. F. Engenharia de Software: Fundamentos, Métodos e Padr ões. 3. ed. Rio de Janeiro: LCT, 2008. PEIXEURBANO. Explore a cidade. 2013. Disponível em: <http://delivery.peixeurbano.com.br> Acesso em: 10 abr. 2013. PITANGA, T. JavaServer Faces : A mais nova tecnologia Java para desenvolvimento web. Disponível em: <http://www.guj.com.br/ content/articles/jsf/jsf.pdf> Acesso em: 11 mai 2013. PRESSMAN, R. S. Engenharia de software. 7. ed. Porto Alegre: AMGH, 2011. REDIS. Site Oficial. Disponível em:< http://redis.io/> Acesso em: 21 ago 2013. RESTAURANTEWEB. Peça delivery online nos melhores restaurantes. 2013. Disponível em: <http://www.restauranteweb.com.br> Acesso em: 10 abr. 2013. RICHARDSON, C. POJOs in action . 1. ed. Greenwich: Manning Publications Co., 2006. RICHARDSON, C. Polyglot persistence talk . Disponível em: <http://plainoldobjects.com / 2013/06/19 / polyglot-persistence-talk-at-gluecon/> Acesso em: 01 jul 2013. ROBINSON, I.; WEBBER, J.; EIFREM, E. Graph Databases . 1. ed. Sebastopol: O’Reilly Media, 2013.

Page 103: DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS …fateclins.edu.br/v4.0/trabalhoGraduacao/mXNIfr3... · DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS ETSCHEID UM ESTUDO SOBRE A PERSISTÊNCIA

102

SADALAGE, P. J.; FOWLER, M. NoSQL Distilled - A Brief Guide to the Emerging World of Polyglot Persistence. 1. ed. New Jersey: Pearson Education, 2013. SADALAGE, P. J.; FOWLER, M. NoSQL Essencial – Um Guia Conciso para o Mundo Emergente da Persistência Poliglota. Tradução Acauan Fernandes. 1. ed. São Paulo: Novatec, 2013. SAWAYA M. Dicionário de Informática e Internet. 1. ed. São Paulo: Nobel, 1999. SEBRAE. Comércio Eletrônico. 2013. Disponível em: <http://www.sebrae.com.br/setor/comercio-eletronico/o-setor/mercado> Acesso em: 13 mar. 2013. SEBRAESP. Jornal de Negócios, São Paulo, mar. 2013. Disponível em: <http://www.sebraesp.com.br / arquivos_site / noticias / jornal_negocios / 226> Acesso em: 13 mar. 2013. SEGUIN, K. The Little Redis book . Disponível em: <http://openmymind.net/2012/1/23/The-Little-Redis-Book/> Acesso em: 17 dez 2012. SCARIONI, C. Pro Spring Security. 1. ed. New York: Apress, 01 abr. 2013. SILBERSCHATZ, A.; KORTH, H. F.; SUDARSHAN, S. Sistema de Banco de Dados. 5. ed. Rio de Janeiro: Elsevier, 2006. SOUSA, P. O teorema CAP. Disponível em: <http://unrealps.wordpress.com/2010/12/28/o-teorema-cap/> Acesso em: 17 mai 2013. SPRING. Code contribution: JPA support for JSF - OpenEntityManagerViewPhaseListener. Disponível em: <https://jira.spring.io/browse/SPR-3179> Acesso em: 18 jan. 2014. TIWARI, S. Professional NoSQL. 1. ed. Indianapolis: John Wiley & Sons, 2011.

Page 104: DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS …fateclins.edu.br/v4.0/trabalhoGraduacao/mXNIfr3... · DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS ETSCHEID UM ESTUDO SOBRE A PERSISTÊNCIA

103

APÊNDICE A – Comandos Básicos do Redis

O Redis fornece um número razoável de operações. A seguir será

apresentado um resumo dos comandos básicos para cada estrutura de dados do

Redis, com nome, breve descrição e complexidade de tempo de cada um deles.

Comandos aplicáveis em valores do tipo string

Comando Descrição Complexidade de tempo

GET Busca valor referente uma chave específica O(1)

SET Grava valor referente uma chave específica O(1)

DEL Deleta chave e valor referente, funciona para todas estruturas de dados O(1), para strings

Comandos aplicáveis em valores do tipo hash

Comando Descrição Complexidade de tempo

HGET Busca valor referente uma sub-chave específica O(1)

HSET Armazena o valor referente uma sub-chave O(1)

HGETALL Busca todos pares sub-chave/valor armazenado em um hash

O(N), onde N é o tamanho do hash

HDEL Deleta um ou mais pares sub-chave/valor do hash

O(N), onde N é o número de pares a ser removidos

Comandos aplicáveis em valores do tipo list

Comando Descrição Complexidade de tempo

RPUSH Adiciona um elemento ao final de uma lista O(1)

LRANGE Busca todos elementos de uma lista dentro de um intervalo específico informado

O(S+N), onde S é o start offset e N o número de elementos no intervalo

LINDEX Busca elemento em uma posição específico O(N), onde N é a distância

do elemento para um extremo da lista

RPOP Busca e deleta o último elemento da lista O(1)

Page 105: DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS …fateclins.edu.br/v4.0/trabalhoGraduacao/mXNIfr3... · DEISE APARECIDA PIZO DA SILVA DOMINIK MATTHIAS ETSCHEID UM ESTUDO SOBRE A PERSISTÊNCIA

104

Comandos aplicáveis em valores do tipo set

Comando Descrição Complexidade de tempo

SADD Adiciona um ou mais elementosao conjunto O(N), onde N é o número de elementos a adicionar

SMEMBERS Busca todos elementos de um conjunto O(N), onde N é o tamanho do conjunto

SINTER Retorna todos elementos existentes em todos conjuntos informados (intersecção)

O(N*M), onde N é o número do menor conjunto e M o

número de conjuntos

SISMEMBER Determina se valor informado é elemento do conjunto O(1)

SREM Deleta um ou mais elementos de um conjunto

O(N), onde N é o número de elementos a remover

Comandos aplicáveis em valores do tipo sorted set

Comando Descrição Complexidade de tempo

ZADD Adiciona um elemento com um valor numérico para classificação

O(log*N), onde N é o número de elementos

existentes

ZRANGE Busca um número específico de

elementos de um sorted set, partindo de um valor de classificação informado

O(log(N)+M), onde N é o número de elementos

existentes e M o número de elementos a retornar

ZRANGEBYSCORE Busca todos elementos cuja

classificação está dentro de um intervalo informado

O(log(N)+M), onde N é o número de elementos

existentes e M o número de elementos a retornar

ZREM Remove todos elementos especificadas

O(M*log(N)), onde N é o número de elementos do

sorted set e M o número a ser removido