checklist para auxiliar na definição da arquitetura de - Ceavi

Propaganda
CHECKLIST PARA AUXILIAR NA DEFINIÇÃO DA
ARQUITETURA DE BANCO DE DADOS
Tiago Vanderlinde, Osmar Oliveira Braz Junior
Universidade do Estado de Santa Catarina - UDESC
[email protected], [email protected]
Resumo
Este trabalho apresenta a definição de um checklist que auxilia a escolha da arquitetura de banco
de dados para uma determinada aplicação. Através deste checklist é possível determinar três
arquiteturas de banco de dados diferentes: modelo relacional, NoSQL ou persistência poliglota,
que utiliza o modelo relacional e NoSQL. A escolha de uma destas arquiteturas é feita através de
alguns critérios, e para isso, são elencados as características de cada aplicação e posteriormente
confrontados com estes critérios. Desta forma, é possível determinar qual é a arquitetura mais
indicada para cada aplicação.
Palavras-chave: Checklist. Arquitetura. Banco de Dados
Abstract
This work presents the definition of a checklist that assists the choice of database architecture
for a given application. Through this checklist is to identify three architectures from different
databases: relational model, NoSQL or polyglot persistence, which uses the relational model
and NoSQL. The choice of these architectures is done by certain criteria, and so are the
characteristics listed for each application and then confronted with these criteria. This way, you
can determine which is the most suitable architecture for each application.
Keywords: Checklist. Architecture. Database.
1. Introdução
Atualmente está cada vez mais comum o surgimento de aplicações que possuem uma grande
quantidade de dados. O Google, por exemplo, precisa lidar com grandes quantidades de dados
diariamente. Estima-se que, no ano de 2009, cerca de 20 petabytes de informação era processado
diariamente pela Google (HLIP apud ISSA, 2011).
Outro caso onde o processamento de dados é elevado é no Ebay, a empresa americana de
comércio eletrônico, possui um Data Warehouse de 5 petabytes, que é utilizado para armazenar
dados sobre seus clientes, produtos e as transações realizadas em sua plataforma (TERADATA
apud ISSA, 2011).
Em casos como estes, existiu uma grande necessidade de construir sistemas distribuídos,
devido essa grande massa de dados. Entretanto também existe uma grande dificuldade em
manter sistemas deste porte utilizando uma arquitetura de banco de dados baseada no modelo
relacional. Nestes exemplos as aplicações tiveram problemas com a utilização de bancos de
dados relacionais e tiveram que mudar para outro modelo de persistência. Desta forma, começou
a surgir outros tipos de bancos de dados denominados NoSQL (ISSA, 2010).
O termo NoSQL foi utilizado pela primeira vez em 1998, por Carlo Strozzi, para identificar
bancos de dados de código aberto que não possuíam interface SQL (NVRSDQEF apud ISSA,
2010). A partir deste momento começou a surgir um movimento para que os bancos de dados
NoSQL fossem difundidos e utilizados no desenvolvimento de aplicações.
Atualmente, este movimento vem crescendo bastante no ambiente de desenvolvimento de
software, e a adoção e difusão de tecnologias NoSQL vem se tornando algo cada vez mais
comum. Uma parte desta adoção vem sendo utilizada em locais onde os bancos de dados
tradicionais ainda são fortemente dominantes como, por exemplo, instituições financeiras,
agências governamentais, e comércio de produtos de varejo. Isto pode ser explicado pelo fato
que existe uma demanda muito grande para soluções que tenham alta flexibilidade,
escalabilidade, performance, e suporte a diferentes modelos de dados complexos (VIEIRA et al,
2012).
Entretanto, grande parte dos bancos de dados NoSQL que são considerados não relacionais
foram desenvolvidos com a ideia de que, por melhor que um banco de dados seja, ele não servirá
para todos os casos. Assim, dependendo da demanda exigida, os bancos de dados NoSQL podem
ser uma alternativa eficiente ao modelo relacional. (LEITE, 2010).
Outra arquitetura que vem ganhando espaço é a persistência poliglota (Polyglot Persistence).
Nestes casos, uma aplicação pode ter mais de um banco de dados. Assim, a informação da
aplicação fica particionada e acaba sendo armazenada em bancos de dados que utilizam
tecnologias diferentes. Desta forma, podem-se tratar os problemas individualmente e utilizar o
banco dados mais adequando para cada tipo de problema (FOWLER, 2011).
Um problema com a utilização da persistência poliglota é a complexidade da aplicação, que
acaba aumentando. Assim, acaba-se tornando necessária a quebra do código fonte em
componentes separados que interagem entre si. Apesar de este modelo ter um custo de
desenvolvimento maior, ele tem suas vantagens. Afinal enquanto os bancos de dados relacionais
são usados de forma inadequada, este modelo acaba proporcionando maior flexibilidade na
definição da arquitetura de banco de dados e auxiliando uma parte significativa do desempenho
da aplicação (FOWLER, 2011).
Conforme Leite (2010) e Fowler (2011), bancos de dados NoSQL foram desenvolvidos para
atender situações específicas. Assim, começa a surgir alguns questionamentos: Quando utilizar
banco de dados relacionais e quando utilizar banco de dados NoSQL? Quando é devemos utilizar
os dois?
Essas são as principais dúvidas que este trabalho pretende explorar. Para tanto, serão
apresentados critérios para avaliação de aplicações, e posteriormente confrontados com as
características de cada aplicação. Estes critérios vão auxiliar a tomada de decisão, escolhendo o
modelo de persistência mais adequado para cada aplicação.
Mesmo definindo a escolha de um banco de dados NoSQL ainda pode existir dúvidas de qual
o tipo de banco de dados utilizar. Afinal, existem vários tipos de banco de dados NoSQL, por
exemplo: orientado a documento, chave-valor, colunar, grafos.
Diante disso, este trabalho vai apresentar conceitos de banco de dados NoSQL, critérios para
avaliação do modelo de persistência a ser adotado nas aplicações e ainda aplicação prática destes
critérios em um estudo de caso.
2. Objetivos
Desenvolver um modelo que auxilie a tomada de decisão na definição da arquitetura da
aplicação, escolhendo uma destas arquiteturas de banco de dados: modelo relacional, NoSQL ou
persistência poliglota.
Criar um checklist que contenha critérios de avaliação, para que seja possível auxiliar na
definição da melhor arquitetura de banco de dados para cada aplicação.
Efetuar a aplicação deste checklist em um estudo de caso, para verificar se o resultado obtido
é aderente à aplicação.
3. Metodologia
Para a realização deste projeto é fundamental a utilização de metodologia de pesquisa com a
descrição dos procedimentos a serem utilizados. Neste tópico encontram-se as metodologias
utilizadas neste projeto.
Um método de pesquisa utilizada nesse trabalho é a pesquisa bibliográfica. Para Severino
(2007), este tipo de pesquisa constitui em informações extraídas a partir de um material já
elaborado, composto principalmente de livros, artigos científicos e demais trabalhos. A principal
vantagem deste tipo de pesquisa é que se pode pesquisar uma gama de assuntos bem maior do
que pesquisar diretamente. Assim, a elaboração da fundamentação teórica deste trabalho terá
como base principal bibliografias e artigos.
No caso das definições dos critérios de avaliação das aplicações também serão utilizados
como base bibliografias e artigos. Nestes casos, será necessário efetuar uma compilação das
técnicas que foram utilizadas para a escolha de cada tipo de banco de dados, ou seja, os critérios
que os autores utilizaram para definir arquitetura de um banco de dados servirão de base para a
definição dos critérios que estarão no checklist desenvolvido neste trabalho.
Com o checklist de avaliação definido, será efetuado um teste de conceito, ou seja, será
utilizado este modelo para avaliação de um estudo de caso e verificar se resultado é coerente.
4. Justificativa
Uma aplicação pode ter várias características, e somente uma arquitetura de banco de dados pode
não atender a todas. Com o surgimento dos bancos de dados NoSQL e as suas várias frentes
acabou aumentando bastante as possibilidades de atender essas situações específicas.
O intuito deste trabalho é auxiliar esta tomada de decisão, apresentando critérios que irão
categorizar cada uma das arquiteturas de banco de dados. Desta forma, ao final será possível
utilizar o checklist desenvolvido neste trabalho para determinar qual é o modelo de dados mais
indicado para cada aplicação.
5. Trabalhos correlatos
Existem algumas publicações que já falam sobre NoSQL, teorema de CAP e efetuam uma
análise comparativa entre os SGBDs relacionais e bancos de dados NoSQL.
Um destes trabalhos chama-se “Análise Comparativa do Teorema de CAP Entre Banco de
Dados NoSQL e Banco de Dados Relacionais” e foi desenvolvido por Gleidson Sobreira Leite.
Este trabalho tem como foco apresentar um comparativo entre os bancos de dados NoSQL e
relacional, baseado no teorema de CAP. Além disso, este trabalho apresenta uma análise mais
especifica comparando características as características do teorema de CAP entre banco de dados
PostgreSQL e CouchDB.
Outro trabalho correlato é a “Bancos de Dados NoSQL x SGBDs Relacionais: Análise
Comparativa” e foi desenvolvido por Ricardo W. Brito. Assim como o anterior este trabalho tem
como foco apresentar um comparativo entre os bancos de dados NoSQL e relacional, baseado no
teorema de CAP. Entretanto neste comparativo é apresentado de maneira mais específica como
cada banco (SGBD relacional e NoSQL) reage no momento de testar as características do
teorema CAP.
Os dois trabalhos citados acima apresentam um comparativo entre SGBD relacional e
NoSQL. Entretanto nenhum deles apresenta de maneira explícita em que momento deve-se
utilizar um modelo ou outro. Outro fato é que os dois autores apresentam um comparativo e em
nenhum momento sugerem um modelo híbrido, utilizando os dois modelos dentro de uma
mesma aplicação.
Desta forma, este trabalho pretende apresentar de maneira mais concreta como definir um
modelo de persistência de dados para a aplicação. Considerando ainda a possibilidade de utilizar
mais de um tipo de arquitetura de banco de dados em uma mesma aplicação.
6. Fundamentação teórica
O resultado do checklist elaborado neste trabalho é a escolha entre três arquiteturas de bancos de
dados diferentes: modelo relacional, NoSQL ou persistência poliglota. Desta forma, são
apresentados conceitos de cada uma destas arquiteturas.
5.1. Modelo relacional
O modelo relacional é hoje o principal modelo de dados utilizado em aplicações comerciais de
processamento de dados. Ele conquistou este destaque devido sua simplicidade, pois, comparado
aos modelos anteriores, ele facilita o trabalho no momento de desenvolver aplicações
(SILBERSCHATZ, 2006).
Segundo Silberschatz (2006), um banco de dados relacional consiste em um conjunto de
tabelas, sendo que, cada uma tem um nome atribuído. Enquanto que uma linha de uma tabela
representa uma relação entre um conjunto de valores, ou seja, uma tabela é um conjunto de
entidades e uma linha é uma entidade.
O modelo relacional tem como base a teoria dos conjuntos e álgebra relacional, e foi resultado
de um estudo teórico realizado por Codd, que era investigador da IBM. Este modelo foi
publicado em 1970, entretanto só foi implementado nos anos 80 e revelou-se ser o mais flexível
e adequado ao solucionar os vários problemas que se colocam no nível da concepção e
implementação da base de dados (TAKAI, 2005).
Para Takai (2005), a estrutura fundamental do modelo relacional é a relação entre tabelas.
Uma relação é constituída por um ou mais atributos de uma tabela. Este modelo implementa
estruturas de dados organizadas em relações. Porém, para trabalhar com essas tabelas, algumas
restrições precisaram ser impostas para evitar aspectos indesejáveis, como: Repetição de
informação, incapacidade de representar parte da informação e perda de informação. Essas
restrições são: integridade referencial, chaves e integridade de junções de relações.
5.2. NoSQL
O NoSQL é um termo genérico usado para se referir a qualquer armazenamento de dados que
não segue o modelo relacional especificamente, assim, estes bancos não utilizam o SQL como
linguagem de consulta. Este termo normalmente é usado para se referir aos bancos de dados que
tentam solucionar os problemas de como: escalabilidade e disponibilidade (VAISH, 2013).
O objetivo dos bancos de dados NoSQL é de propor soluções alternativas ao uso do modelo
relacional, tendo como um dos principais motivos à estrutura pouco flexível utilizada nos bancos
de dados relacionais. Vários projetistas de bancos de dados de grandes organizações passaram a
desenvolver novas maneiras de desenvolvimento onde seria possível flexibilizar certas estruturas
e regras existentes nos bancos de dados relacionais. Desta forma, em 1998 surgiu o termo
NoSQL (Not only SQL) a partir de uma solução de banco de dados que não disponibilizava uma
interface SQL, e, posteriormente esse termo passou a representar soluções caracterizadas como
uma alternativa ao já bastante utilizado e consolidado modelo relacional (BRITO apud LEITE,
2010).
Uma das principais vantagens dos bancos de dados NoSQL sobre os bancos de dados
relacionais é a questão do escalonamento. Basicamente pelo fato de que estes bancos foram
criados para esse fim, enquanto os SGBDs relacionais possuem uma estruturação menos flexível
e menos adaptada para cenários em que o escalonamento faz-se necessário (BRITO, 2013).
Bancos de dados NoSQL são subdivididos pelo seu núcleo, ou seja, a maneira com que cada
um lida com as informações que armazena. Brito apud Leite (2010) categoriza-os da seguinte
forma:
•
•
•
•
Chave-valor;
Orientados a documentos;
Orientados a colunas;
Baseados em grafos;
A seguir é apresentado cada uma destas categorias.
5.2.1. Chave-Valor
Dentre os modelos do NoSQL, os bancos de dados chave-valor são considerados os mais
simples. Esta categoria é estruturada basicamente por um conjunto de chave-valor, ou seja, um
HashMap na linguagem de programação Java. Desta forma, este modelo oferece uma grande
eficiência no momento da busca dos dados (TIWARI, 2011).
Leavitt apud Issa (2011), apresenta a implementação deste modelo na Amazon, utilizando o
banco de dados SimpleDB. Este banco prove funções de indexação de informação e buscas na
web 2.0. E ainda uma interface simples para persistência e acesso as dados.
Figura 1 – Tabela chave-valor (TERMEHCHY apud ISSA, 2011)
A figura 1 apresenta um exemplo de tabela chave-valor. As chaves deste modelo são únicas e
cada chave aponta para um conjunto de valores. Entretanto as consultas destes valores só podem
ser efetuadas pela chave, ou seja, não é possível efetuar a busca de um registro utilizando um de
seus valores (VAISH, 2013).
5.2.2 Orientados a documentos
Bancos de dados orientados a documentos tratam-se de modelos que organizam os dados em
coleções. Sendo que estas coleções podem conter um conjunto diversificado de documentos. Isto
significa que em uma coleção, os valores dos registros não são delimitados por colunas, dando
mais liberdade que os modelos relacionais (TIWARI, 2011).
A maioria dos bancos de dados deste modelo utiliza o XML, JSON, BSON ou YAML como
maneira de acesso aos dados. Normalmente utilizando o protocolo HTTP com RESTful ou o
protocolo Apache Thrift para que as linguagens de programação consigam acessar os dados
(VAISH, 2013).
Figura 2 – Exemplo de documento (VAISH, 2013)
A figura 2 apresenta o exemplo de um documento. Neste caso, é apresentado um documento
com informações de locais de trabalho. Assim temos o código e o nome do local e após
informações sobre o seu endereço. Este modelo pode proporcionar uma alta flexibilidade, pois
cada documento pode ter uma estrutura totalmente diferente (VAISH, 2013).
5.2.3
Orientados a colunas
Os bancos de dados orientados a coluna armazenam os dados em colunas em vez de linhas, como
é o caso do modelo relacional. No modelo relacional os dados são apresentados em tabelas
bidimensionais compreendendo de linhas e colunas, sendo que, este modelo recupera e processa
os dados uma linha de cada vez. Enquanto que o modelo orientado a coluna armazena os dados
em forma de colunas (VAISH, 2013).
No modelo orientado a colunas, o valor de cada coluna (atributo) é armazenado em sequência,
aumentando a performance da leitura de uma única coluna. Com este modelo de armazenamento,
o banco de dados carrega em memória apenas os valores das colunas que serão utilizadas,
evitando preencher a memória com dados que não serão utilizados (ISSA, 2011).
Figura 3 – Diferença entre dados no modelo relacional e orientado a colunas (Adaptado de
VAISH, 2013)
A figura 3 apresenta um exemplo de organização dos dados no modelo relacional e no modelo
orientado a colunas. Neste exemplo pode-se perceber que os dados são armazenados em colunas
e não em linhas como é no modelo relacional.
5.2.4 Baseados em grafos
Bancos de dados baseados em grafos representam uma categoria especial de bancos de dados do
NoSQL, onde as relações são representadas na forma de grafos. Neste modelo, pode haver várias
ligações entre os dois nós em um grafo, representando as múltiplas relações que os dois nós
compartilham. As relações representadas podem incluir as relações sociais entre as pessoas,
ligações de transporte entre lugares, ou topologias de rede entre sistemas conectados (VAISH,
2013).
Figura 4 – Exemplo de grafo (VAISH, 2013)
A figura 4 apresenta um exemplo de grafo. Neste modelo os relacionamentos dos nós são
organizados em uma estrutura arbitrária, permitindo um grafo se assemelhar a uma lista, uma
árvore, um mapa ou uma entidade composta. Bancos de dados baseados em grafos são bastantes
novos no mercado, com apenas algumas soluções comprovadas: Neo4j e FlockDB (utilizado
pelo Twitter) (VAISH, 2013).
5.2.5 Persistência Poliglota (Poliglot Persistence)
A persistência poliglota ou Poliglot Persistence representa uma aplicação que pode ter mais de
um banco de dados. Desta forma, durante o seu desenvolvimento foi utilizada mais de uma
tecnologia para a persistência dos dados da aplicação. Com isso, podem-se tratar problemas
individualmente e utilizar o banco dados mais adequando para cada tipo de situação (FOWLER,
2011).
Neste caso a arquitetura de banco de dados pode ficar mais complexa, pois, em uma mesma
aplicação podem-se encontrar os vários modelos de bancos de dados NoSQL juntamente com um
modelo relacional. Assim, torna-se necessária a quebra do código fonte em componentes
separados que interagem entre si. Apesar destes custos este modelo acaba tornando-se viável,
pois quando os bancos de dados relacionais são usados de forma inadequada, eles acabam
consumindo uma parte significativa do desempenho da aplicação (FOWLER, 2011).
Figura 5 – Exemplo do modelo híbrido (MCMURTRY et al., 2013)
A figura 5 apresenta um exemplo de utilização deste modelo. Neste exemplo é utilizada uma
técnica de implementação comum, onde é disponibilizado um serviço de web como uma
fachada. O serviço web fornece uma interface que expõe as operações de negócios e as converte
em operações que se comunicar com o banco de dados apropriado (MCMURTRY et al, 2013).
7. Checklist
Neste tópico será abordada a definição do checklist que auxiliará na tomada de decisão no
momento da escolha da arquitetura de banco de dados de uma aplicação. O modelo definido
neste tópico apresenta como saída uma das arquiteturas apresentada anteriormente: modelo
relacional, NoSQL (chave-valor, orientado a colunas, orientado a documentos, baseado em
grafos) ou persistência poliglota.
Para tanto, este checklist terá critérios que serão definidos com base em algumas referências
bibliográficas. Assim, o primeiro critério que será levado em consideração é o teorema de CAP.
Eric Brewer desenvolveu o teorema de CAP (Consistency, Availability e Partition Tolerance),
onde ele afirma que é impossível uma aplicação com banco de dados distribuído garantir, de
forma simultânea, consistência, disponibilidade e tolerância a partições. Segundo esse teorema,
um sistema distribuído pode garantir apenas duas dessas três características simultaneamente
(BRITO, 2013).
Este conceito surgiu devido às aplicações estarem cada vez maiores, e, com suas bases de
dados crescendo exponencialmente, começou a surgir à necessidade de escalar o banco de dados.
Entretanto escalar um banco de dados relacional pode ser bastante custoso e/ou complexo.
Diversas alternativas ao modelo relacional surgiram para suprir as restrições relativas à
complexidade ao realizar a distribuição de dados, das quais a que mais ganhou destaque foi o
paradigma NoSQL (Not only SQL) (LEITE, 2010).
Segundo Redmond et al (2012), o teorema de CAP prova que somente é possível criar um
sistema com banco de dados distribuído consistente e tolerante a partições ou um sistema que
está disponível e tolerante a partições ou então um sistema que consistente e disponível. Desta
forma, não é possível criar uma aplicação que é consistente, tolerante a partições e disponível
(Vide figura 6).
Figura 6 – Teorema de CAP (Adaptado de VAISH, 2013)
Veira et al (2012), apresenta o significado de cada uma destas características do teorema de
CAP:
 Consistência: objetivo é permitir que transações distribuídas em vários nós, que
agem com a semântica de “tudo-ou-nada”. Quando existir réplicas, elas devem estar
sempre em um estado consistente;
 Disponibilidade: objetivo é manter o sistema sempre disponível, e em caso de
falha o sistema deve continuar funcionando com alguma réplica dos recursos
indisponíveis;
 Tolerância a partições: objetivo é manter o sistema operando mesmo no caso de
falhas de rede, para isso é dividido o processamento dos nós em grupos que não se
comunicam.
Desta forma, o teorema de CAP é pertinente quando decidir utilizar um banco de dados
distribuído.
Baseado neste teorema será identificado os primeiros critérios que irão compor o checklist.
Sendo o primeiro, identificar se a aplicação necessita de um ambiente distribuído. Caso exista
esta necessidade, é necessário que o questionar quais as características desejadas para esta
aplicação:
 Consistência e tolerância a partições;
 Disponível e tolerância a partições; ou
 Consistência e disponível.
Conforme apresentado na figura 6, nos casos onde a exigência ocorre para que a aplicação
esteja disponível e tenha tolerância a partições o indicado são os bancos de dados NoSQL. Nos
casos onde a aplicação exige consistência e tolerância a partições é o mais indicado também são
os bancos de dados NoSQL. Enquanto que nos casos onde a consistência e a disponibilidade é o
mais importante para a aplicação, o mais indicado são os bancos de dados relacionais.
Para os casos de consistência e tolerância a partições e disponível e tolerância a partições é
indicado o uso de um banco de dados NoSQL. Entretanto não é definida qual a categoria mais
indicada (orientado a documentos, orientado a colunas, baseado em grafos ou chave-valor).
Assim, será necessário analisar mais alguns critérios para definir qual a arquitetura de banco de
dados mais indicada.
Fowler et al (2012), apresenta um exemplo que auxilia a diferenciar qual a arquitetura de
bancos de dados é a mais indicada baseada no tipo da aplicação.
Figura 7 – Banco de dados indicado para cada tipo de aplicação (Adaptado de FOLWER et
al, 2012)
A figura 7 apresenta qual o modelo de persistência mais indicada para cada tipo de aplicação
segundo Fowler et al (2012). Segundo ele, o modelo chave-valor é indicado para os casos onde
se deseja ter um acesso rápido na escrita e leitura dos dados. Entretanto não existe a necessidade
dos dados serem duráveis ou existir a integridade dos dados.
Esta ideia também é apresentada por Finley (2010), pois, segundo ele, quando a latência é
importante, é difícil efetuar uma busca ou escrita de dados mais rápida que banco de dados
chave-valor. Um ponto negativo deste banco de dados é a necessidade de uma quantidade de
memória primária maior, por oferecer o recurso de cache de dados.
Para Fowler et al (2012), os bancos de dados relacionais são mais indicados para aplicações
que precisam lidar com transações, ou em casos onde a modelagem tabular se encaixa
perfeitamente na arquitetura da aplicação. Fowler el al (2012) destaca ainda, que as aplicações
que necessitam de muitos relatórios também é indicado o uso de bancos de dados relacionais. O
principal motivo destacado por ele é a facilidade de integração que as ferramentas de criação de
relatórios possuem com a linguagem SQL.
Os bancos de dados orientados a documentos são indicados nos casos onde existe uma grande
quantidade de leitura e escrita de dados (FOWLER et al, 2012). Além disso, este tipo de banco
de dados é indicado para aplicações onde pode existir uma mudança constante na estrutura dos
dados, por exemplo: número de variáveis do objeto, coleções de objetos agrupados. Assim, este
tipo de banco de dados pode lidar com mudanças de esquema ao longo do tempo (FINLEY,
2010).
Fowler et al (2012), indica o uso de bancos de dados orientados a coluna nos casos onde é
necessário efetuar análises em grande escala sobre um grande aglomerado de dados. Este tipo de
banco de dados também é indicado em casos onde existe uma grande necessidade de escrita de
dados.
Bancos de dados baseados em grafos são indicados para os casos onde existe a estrutura de
dados da aplicação representa um grafo, por exemplo: relacionamentos entre pessoas, locais, etc.
(FOWLER et al, 2012).
Considerando as características de cada banco de dados é possível elencar critérios e baseado
neles é possível definir um checklist que pode auxiliar na escolha da arquitetura de banco de
dados, vide quadro 1.
Critério
Necessita de
distribuído
Relacional
ambiente
Deve ser tolerante a
partições
Integridade dos dados é
obrigatória
Relatórios gerenciais são
importantes
Estrutura de dados é em
forma tabular
Atributos podem variar
constantemente
Utilizo algoritmo baseado
no relacionamento entre
minhas entidades
Persistência dos dados
sempre deve ser garantida
Persistência dos dados não
é vital
Necessito
de
alto
desempenho na escrita e
leitura de dados
Relacionamentos entre as
entidades
são
muito
complexos
Integridade referencial é
necessária
Redundância de dados é um
problema
Memória
primária
é
problema
A maioria das pesquisas é
feita pelo atributo
A maioria das pesquisas é
feita pelo identificador
x
Documental
x
Chave/Valor
x
Colunar
x
Grafo
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
x
Quadro 1 – Checklist para auxilio na escolha da arquitetura de banco de dados (Autor, 2014)
A primeira coluna do checklist apresentado no quadro 1 representa um critério. As demais
colunas representam arquitetura de banco de dados, relacional e os tipos de bancos de dados
NoSQL. Os registros marcados com “x” representam que aquele tipo de banco de dados atende
aquele critério. Por exemplo: O critério “Integridade dos dados é obrigatória” é atendido pelos
bancos de dados relacionais e orientados a documentos.
Para utilizar o checklist apresentado no quadro 1 basta verificar se o critério apresentado na
primeira coluna é relevante para a aplicação. Feito isso, é preciso verificar qual ou quais
arquiteturas se encaixam neste critério. Ao final é preciso verificar quais foram as arquiteturas
indicadas pelo checklist, para os casos onde for mais de uma arquitetura significa que o modelo
mais indicado é o híbrido. Existem critérios neste modelo que são atendidos por mais de uma
arquitetura. Desta forma, é preciso ter atenção para não adicionar arquiteturas de banco de dados
desnecessariamente, pois cada quanto maior o número de arquiteturas maior é o nível de
complexidade da aplicação.
No tópico a seguir é apresentada a utilização deste checklist em alguns estudos de casos.
8. Aplicação do checklist
Neste tópico será apresentada a arquitetura de banco de dados encontrada por outro autor para
uma determinada aplicação. O intuito é aplicar este o checklist apresentado no tópico anterior
neste mesmo estudo de caso, após será comparada a arquitetura apresentada no estudo de caso
com a arquitetura de banco de dados que o checklist sugerir.
O estudo de caso abordado será uma solução apresentada por Nance et al (2013), onde é
definida a arquitetura de banco de dados para um e-commerce em sistema distribuído. Segundo
Nance et al (2013), uma aplicação e-commerce tem uma grande quantidade de dados
temporários que não pertencem a estrutura de um banco de dados relacional. Por exemplo,
carrinho de compras, sessão com os dados do usuário, etc. Além disso, os comentários dos
clientes e os seus relacionamentos nas redes sociais tendem a ter uma melhor aderência em
bancos de dados NoSQL.
Assim, numa plataforma e-commerce os dados do carrinho de compras precisam ser escritos e
lidos no banco de dados rapidamente, mas não é necessário garantir que estes dados sejam
persistidos antes da finalização da compra. Os dados pertinentes aos produtos, categorias, preços,
etc. possuem uma estrutura tabular. Enquanto que, os históricos dos pedidos não se enquadram
nesta categoria. Já as sugestões de clientes, avaliações de produtos ou recomendações possuem
uma estrutura baseada em grafos (NANCE et al, 2013).
Para solucionar este problema Nance et al (2013) apresenta uma arquitetura poliglota, sendo
que, a aplicação teria quatro tipos de bancos de dados diferentes (vide figura 8).
Figura 8 – Arquitetura de banco de banco de dados para e-commerce (NANCE et al, 2013)
Conforme apresentado na figura 8, cada parte da aplicação possui um banco de dados
diferente, tornando uma aplicação com persistência poliglota. Baseado nas informações
apresentadas por Nance et al (2013), é possível aplicar estes dados no checklist criado
anteriormente. A seguir são apresentados os critérios do checklist se enquadram nesta aplicação
e-commerce:
 Necessita de ambiente distribuído
 Estrutura de dados é em forma tabular
 Atributos podem variar constantemente




Persistência dos dados sempre deve ser garantida
Persistência dos dados não é vital
Utilizo algoritmo baseado no relacionamento entre minhas entidades
Necessito de alto desempenho na escrita e leitura de dados
Pode-se perceber que alguns dos critérios são divergentes, por exemplo: “Persistência dos
dados sempre deve ser garantida” e “Persistência dos dados não é vital”. Isto ocorreu, pois a
aplicação tem estruturas de dados diferentes que devem ser analisadas de perspectivas diferentes.
No caso do carrinho de compras a persistência não precisa ser garantida, enquanto que nos casos
demais casos sempre é necessário garantir a persistência dos dados. Os critérios relacionados a
hardware não foram considerados devido não estarem especificados do trabalho de Nance et al
(2013).
Avaliando os critérios que se enquadram para esta aplicação pode-se perceber que a
arquitetura sugerida pelo checklist é a persistência poliglota, sendo que os tipos de banco de
dados indicados são: modelo relacional, chave-valor, grafo e documental. Assim, a arquitetura de
banco de dados sugerida acaba ficando parecida com a proposta por Nance et al (2013).
9. Considerações finais
Atualmente, está cada vez mais comum a necessidade de lidar com uma grande quantidade de
dados e mesmo assim garantir um bom desempenho para a aplicação. A definição da arquitetura
de banco de dados está totalmente atrelada a este problema. Para auxiliar na solução deste
problema este trabalho propôs a criação de um checklist que auxilia na definição da arquitetura
de banco de dados.
Para determinar os critérios elencados para fazer parte do checklist foram consideradas as
características principais de cada tipo de banco de dados. Entretanto algumas situações podem
apresentar a necessidade de critérios mais específicos e que não foram catalogados neste
checklist podendo ocasionar divergências entre a arquitetura recomendada e a arquitetura ideal
para a aplicação.
A aplicação do checklist em um estudo de caso mostrou que os critérios elencados para este
estudo de caso foram aderentes. A utilização deste checklist pode se tornar um pouco confusa,
pois uma mesma aplicação pode ter características totalmente divergentes. No momento de
efetuar a avaliação de uma aplicação pode ser necessário considerar apenas uma parte da
aplicação.
A utilização deste checklist acaba tornando-se desnecessária para os casos onde a pessoa já
possui o conhecimento e experiência em várias arquiteturas de banco de dados. Entretanto pode
ser utilizada por pessoas que ainda não possuem um conhecimento mais avançado nas várias
arquiteturas de banco de dados existentes.
Portanto, todos os objetivos propostos neste trabalho foram atendidos, pois foi criado um
checklist que auxilia na definição da arquitetura de banco de dados, que posteriormente foi
aplicado em um estudo de caso.
Referências
BRITO, Ricardo W. Bancos de Dados NoSQL x SGBDs Relacionais:Análise Comparativa.
Disponível em: < http://www.infobrasil.inf.br/userfiles/27-05-S4-1-68840Bancos%20de%20Dados%20NoSQL.pdf>, 2013. Acessado em: 03/06/2013.
FINLEY, K. What the heck are you actually using NoSQL for?. Disponível em:<
http://highscalability.com/blog/2010/12/6/what-the-heck-are-you-actually-using-nosql-for.html>,
2010. Acessado em: 15/11/2013.
FOWLER, Martin. Polyglot Persistence. Disponível em: <
http://martinfowler.com/bliki/PolyglotPersistence.html >, 2011. Acessado em: 03/06/2013.
FOWLER, Martin et al. The future is: Polyglot Persistence. Disponível em: <
http://martinfowler.com/articles/nosql-intro-original.pdf>, 2012. Acessado em: 15/11/2013.
ISSA, Felipe G. S. Estudo comparativo entre banco de dados relacionais e banco de dados
NoSQL na utilização por aplicações de business intelligence. Disponível em: <
http://fatecsjc.edu.br/trabalhos-de-graduacao/wp-content/uploads/2012/03/Trabalho-deGradua%C3%A7%C3%A3o-Felipe-G.-S.-Issa.pdf>, 2011. Acessado em: 03/06/2013.
LEITE, Gleidson. S. Análise Comparativa do Teorema de CAP Entre Banco de Dados
NoSQL e Banco de Dados Relacionais. Disponível em:
<http://www.ffb.edu.br/sites/default/files/tcc-20102-gleidson-sobreira-leite.pdf >, 2010.
Acessado em: 03/06/2013.
MCMURTRY, Douglas et al. Data Access for Highly-Scalable Solutions: Using SQL, NoSQL
and Polyglot Percistence. Disponível em: < http://www.microsoft.com/enus/download/details.aspx?id=40327 >, 2013. Acessado em: 15/11/2013.
NANCE C. et al. NoSQL vs RDBMS – Why there is room for both. Disponível em: <
http://sais.aisnet.org/2013/Nance.pdf>, 2013. Acessado em 20/11/2013.
REDMOND, Eric et al. Seven Databases in Seven Weeks. p1..0. Texas: Pragmatic
Programmers, 2012. 333 p.
SEVERINO, Antonio Joaquim. Metodologia do trabalho científico. 23 ed. São Paulo: Cortez,
2007.
SILBERSCHATZ, Abraham. Sistema de banco de dados. 5. ed. Rio de Janeiro: Elsevier, 2006.
760 p.
TAKAI, O. K. Introdução a banco de dados. Disponível em: <
http://www.ime.usp.br/~jef/apostila.pdf>, 2005. Acessado em: 11/10/2013.
TIWARI, Shashank. Professional NoSQL. Indianapolis: John Wiley & Sons, 2011. 361p.
VAISH, Gaurav. Getting Started with NoSQL. Birmingham: Packt Publishing, 2013. 123p.
VIEIRA, M. R et al. Bancos de Dados NoSQL: Conceitos, Ferramentas, Linguagens e Estudos
de Casos no Contexto de Big Data. Disponível em: <
http://data.ime.usp.br/sbbd2012/artigos/pdfs/sbbd_min_01.pdf >, 2012. Acessado em:
03/06/2013.
Download