845070 - Testes de Performance MongoDB_Db4O

Propaganda
TESTES DE PERFORMANCE UTILIZANDO O DB4O E
MONGODB
Alexandre P. Pinto, Fernanda Malagoli, Rodrigo M. Maciel, Hélio R. Soares,
Sônia A. Santana
Centro Universitário do Triângulo (UNITRI) – Avenida Nicomedes Alves dos
Santos, 4545, Gávea, 38411-106 – Uberlândia – MG – Brasil.
[email protected], {femalagoli, rodrigomm.posbd,
sonia.ap.santana@}gmail.com, [email protected]
Abstract. The NoSQL came out as an alternative to relational
databases, in some cases making easy the distribution of the
databases. This article presents a comparative between two NoSQL
databases, Db4O and MongoDB, in terms of performance (CPU usage,
memory usage and time spent), submitting these two banks to a data
load. Db4o was chosen because it is widely used and easy to
implement and MongoDB to be emerging as one of the best options
database unconventional. It was observed that the data load was
DB4O the faster, MongoDB used less memory and slightly less CPU.
Keyword: NoSQL. Database. Comparative.
Resumo. O NoSQL surge como uma alternativa aos bancos de dados
relacionais, em alguns casos facilitando a distribuição das bases de
dados. Este artigo apresenta um comparativo entre dois bancos de
dados NoSQL, Db4O e MongoDB, quanto ao critério de performance
(uso de CPU, uso de memória e tempo gasto) ao submeter esses dois
bancos a uma mesma carga de dados. O Db4O foi escolhido por ser
muito utilizado e de fácil implementação e o MongoDB por estar
emergindo como uma das melhores opções de banco de dados não
convencionais. Observou-se que na carga de dados o Db4O foi mais
rápido, o MongoDB utilizou menos memória e ligeiramente menos
CPU.
Palavras-Chave: NoSQL. Banco de Dados. Comparativo.
1. Introdução
Os Bancos de Dados NoSQL (Not Only SQL – Não Somente SQL) surgiram
por volta de 1998 como uma alternativa aos bancos de dados relacionais. O
NoSQL não foi criado com o objetivo de substituir o Modelo Relacional e sim
para atender casos onde haja necessidade de uma maior flexibilidade e
distribuição dos dados. Um dos principais fatores que favoreceram seu
surgimento foi a natureza dos dados da internet, a importância de se atingir
altos graus no processamento de grandes volumes de dados e a distribuição
de sistemas em escala global. Uma das primeiras empresas a utilizar a
tecnologia NoSQL foi o Google, que em 2004 criou o BigTable. Atualmente
grandes empresas utilizam essa tecnologia, entre elas o Facebook, Twitter,
eBay entre outras [Brito 2010; Diana e Gerosa 2010, Issa 2011].
De uma forma geral, o modelo relacional atende bem as necessidades
de pequenas e médias aplicações, mas com o crescimento da quantidade de
dados que precisam ser armazenados, torna-se necessário distribuir a base de
dados. Os SGBD’s (Sistemas de Gerenciamento de Banco de Dados)
relacionais não estão totalmente preparados para esta distribuição [Brito 2010;
Issa 2011].
O potencial e a utilização dessas novas tecnologias estão em constante
desenvolvimento e crescimento. E com a importância da modelagem de dados
e implementação de regras de negócios utilizando os conceitos e otimização
em bancos relacionais, uma mudança radical de paradigma justifica uma
investigação mais específica sobre o desempenho dessas novas tecnologias e
que, por sua vez, é o principal motivador desse estudo.
Como essas tecnologias são muito recentes, existem poucas
recomendações indicando em que contexto usar determinado paradigma. Em
especial, apesar de haver casos em que bancos de dados NOSQL ajudaram
organizações a escalar seus sistemas, existem poucos estudos comparativos
que indiquem os cenários em que se aplicam e quais são seus limites de
performance e escalabilidade [Diana e Gerosa 2010].
Assim, o principal objetivo deste artigo é estudar e avaliar sistemas de
banco de dados não relacionais, a fim de obter um conhecimento mais
específico quanto à performance dos mesmos no que diz respeito ao tempo
gasto, uso de CPU e utilização de memória RAM ao aplicar uma carga de
dados no sistema. As tecnologias escolhidas foram o MongoDB e o Db4O.
Para isso, o estudo foi dividido em seções, onde, na seção 2 é mostrada
uma visão geral de Bancos de Dados NoSQL e algumas características e
vantagens do Db4O e do MongoDB. A seção 3 descreve como foi feita a
preparação do ambiente, o software e o hardware utilizados para a carga de
dados e, ainda nessa seção, são apresentados em gráficos os resultados
obtidos. Finalmente, na seção 4, tem-se a conclusão.
2. Bancos de Dados NoSQL
Em geral os bancos de dados ditos NoSQL lidam com dados não estruturados,
como arquivos de texto, multimídia e mídias sociais, possuem as seguintes
características em comum: não relacionais, distribuídos, horizontalmente
escaláveis, possuem esquemas flexíveis, são replicáveis, possuem APIs
(Application Programming Interfaces) simples e não seguem o modelo ACID
(Atomicidade, Consistência, Isolamento e Durabilidade) [Brito 2010; Issa 2011].
O número de bancos de dados NoSQL disponíveis é relativamente
grande e está aumentando constantemente. Promovendo, assim, a criação de
diferentes tipos de bases de dados, cada um com um conjunto específico de
características e aplicáveis aos diferentes domínios de problemas [Silva 2011].
Como exemplo de alguns bancos de dados NoSQL, divididos por
categorias, podem-se citar [Strauch 2010]:
•
•
•
•
•
•
Orientado a Documento:
CouchDB;
MongoDB.
Orientado a Objetos:
Db4O.
Móveis:
Sybase SQL Anywhere;
Oracle Lite 10g.
Chave-valor:
Redis;
Scalaris.
Grafos:
Neo4j.
Colunas:
Cassandra;
Hypertable;
BigTable.
Nas seções seguintes algumas das tecnologias NoSQL disponíveis são
apresentadas.
2.1.MongoDB
O MongoDB é um sistema de gerenciamento de banco de dados da Apache
Software Foundation que armazena dados em coleções de documentos BSON
(Binary Object Notation), que é uma serialização binária codificada de
documentos JSON (JavaScript Object Notation) semelhantes. JSON é um
formato leve para troca e armazenamento de dados computacionais, é um
subconjunto da notação de objeto de JavaScript, mas seu uso não requer
JavaScript exclusivamente.[Plugge et al. 2010, Silva 2011].
Existem versões para os seguintes sistemas operacionais: OS X 64 bits,
Linux 32 e 64 bits, Windows 32 e 64 bits e Solaris 64 bits. Para o acesso ao
banco existem drivers para as linguagens: C, C++, C#, Erlang, Haskell, Java,
JavaScript, Perl, PHP, Python, Rubi, Scala [MongoDB 2013].
Os documentos de bancos de dados orientados a documentos são
coleções de atributos e valores, onde um atributo pode ser multi-valorado,
essas coleções podem ser vistas como um equivalente às tabelas nos banco
de dados relacionais. Não é necessário definir nenhum esquema rígido antes
de realmente usar o banco de dados. Se um documento precisar incluir um
novo campo pode simplesmente incluir esse campo, sem afetar de forma
adversa outros documentos do banco de dados. Além disso, os documentos
não precisam armazenar valores de dados vazios para campos para os quais
não possuem um valor [Diana e Gerosa 2010, Lennon 2009].
Os documentos são identificados pelo campo “_id”, que pode ser gerado
automaticamente pelo banco ou definido pelo usuário [Silva 2011].
Empresas como The Gardian, The New York Times, MTV, CNN Turk,
EA entre outras utilizam o MongoDB [MongoDB 2013].
O MongoDB possui algumas características como [Brito 2010; Mateussi
(apud Chodorow 2009), Silva 2011]:
•
•
•
•
•
•
•
•
Banco de dados orientado a documentos (todos os dados para o
documento em questão estão armazenados no próprio documento);
Código aberto;
Escrito em C++;
Suporte a replicação;
Armazena vídeos e fotos com a ferramenta GridFs;
Suporte a computação em nuvem;
Suporta consultas dinâmicas (ad hoc);
Suporta expressões regulares, comparadores, operadores condicionais
e operadores lógicos.
Além das características Matteussi (apud Pronschinske 2010) cita
as seguintes vantagens:
•
•
•
Abstração de objetos do mundo real como realmente são: complexos e
únicos;
Caso seja necessário adicionar um novo campo, pode adicionar a um
único documento e não a todos os documentos como no caso de uma
tabela no modelo relacional;
Fácil transição de um banco de dados relacional para o MongoDB.
2.2.Db4O
O Db4O é um banco de dados orientado a objetos onde os objetos são
armazenados nativamente, eliminando a complexidade extra e a perda de
performance com a conversão para outros formatos como SQL (Structured
Query Language). Não é necessário rodar nenhum serviço para colocar o
banco no ar, as aplicações têm acesso direto ao banco [Db4O 2013].
A versão completa do Db4O está disponível sob duas licenças: a de
código aberto, licença GPL (General Public License), que possibilita download
gratuito, avaliação e uso em projetos compatíveis com a licença GPL; e uma
licença comercial de runtime para empresas que desejam embutir o Db4O em
suas aplicações comerciais não GPL. Roda nativamente em várias plataformas
de desenvolvimento orientadas a objeto e possibilita o desenvolvimento de
aplicações para distribuição em múltiplas plataformas, como por exemplo, o
mercado de PDA (Personal Digital Assistant), ou em combinações de clientes
Windows e servidores Java. Suporta Java JDK 1.1.x até 5.0 e roda em J2EE e
J2SE. Também roda com dialetos J2ME que suportam reflexão, como CDC,
PersonalProfile, Symbian, Savaje e Zaurus, e sem reflexão, como CLDC e
MIDP, incluindo RIM (Blackberry) e Palm OS [Db4O 2013].
O Db4O também roda em todas as plataformas .Net incluindo .NET
(Microsoft), .NET Compact Framework e .NET Mono, suportando todas as
linguagens gerenciadas como: C#, VB.NET, ASP.NET, Boo, e Managed C++.
Por ser o único banco de dados nativo para Java e .Net ele fornece
portabilidade entre plataformas que libera usuários de altas taxas de
licenciamento e oferece uma grande quantidade de funcionalidades exclusivas
e orientadas a objeto, como sua replicação e seus métodos de recuperação de
dados: Queries nativas, QBE (Query by Example), SODA (Simple Object Data
Access) [Db4O 2013].
Grandes empresas como a BMW, Boeing, Bosch e Hertz utilizam o
Db4O para diminuir custos e tempo de desenvolvimento [Db4O 2013].
Algumas características presentes no Db4O são [Db4O 2013]:
•
•
•
Banco de dados orientado a objetos;
Código aberto;
Possui versões para Java e .Net.
Podem-se citar também algumas vantagens na utilização do Db4O
[Db4O 2013]:
•
•
•
Segundo o fabricante o Db4O pode chegar a ser 55 vezes mais rápido
que alguns bancos de dados que utilizam o modelo relacional;
Utiliza pouco recurso computacional;
Disponibiliza acesso direto ao banco sem utilizar ORM (Mapeamento
Objeto-Relacional).
3. Metodologia
A estratégia adotada para a verificação da performance dos SGBD’s escolhida
foi a experimental, envolvendo aspectos desde a instalação dos softwares,
preparação do hardware, bem como a carga de dados para que se pudessem
coletar os resultados e analisá-los. As seções seguintes detalham os
procedimentos utilizados.
3.1. Software
Foram instalados os bancos de dados Db4O versão 8.0 e o MongoDB versão
2.4.3, sendo, ambos, as últimas versões estáveis na data da realização dos
testes.
Para o acesso ao Db4O foram utilizadas as bibliotecas
“Db4Objects.DB4O.dll” e “Db4Objects.DB4O.Linq.dll”, já para o acesso ao
MongoDB foram utilizadas
as bibliotecas “MongoDB.Bson.dll” e
“MongoDB.Driver.dll”.
Foram desenvolvidos dois programas para fazerem as cargas de dados,
um para o MongoDB e outro para o Db4O, ambos utilizando o Microsoft Visual
Studio 2010 e a linguagem VB.NET.
Foi definida para a inserção dos dados uma estrutura simples e
comumente utilizada em vários bancos de dados: Cliente (Nome, Rua, Número,
Cidade). Estas estruturas foram criadas como classes e são mostradas nas
figuras 1 e 2, respectivamente para Db4O e MongoDB.
Figura 1. Classe Cliente para o Db4O
Figura 2. Classe Cliente para o MongoDB
Após criada a classe para o Db4O foi desenvolvido o programa e sua
tela é mostrada na figura 3, em seguida, a figura 4 mostra o código que é
executado quando o botão “Gerar Dados” é pressionado.
Figura 3. Tela do programa Db4O
Figura 4. Código executado ao pressionar o botão “Gerar Dados” no Db4O
Por sua vez, a tela do programa criado para a carga no MongoDB é
mostrada na figura 5 com seu respectivo código do botão “Gerar Dados” na
figura 6.
Os programas possibilitaram a escolha do número de clientes a serem
inseridos na base de dados. Uma vez escolhida a quantidade de registros,
quando o botão “Gerar Dados” era pressionado a hora do sistema era
registrada e, quando o programa terminava de inserir, registrava-se,
automaticamente, a hora de encerramento. Dessa forma, tem-se o tempo inicial
e o tempo final gastos para a inserção da quantidade, sendo assim possível
calcular o tempo gasto para a inserção dos registros, que foi um critério
analisado.
Figura 5. Tela do Programa MongoDB
Figura 6. Código executado ao pressionar o botão “Gerar Dados” no MongoDB
3.1.Hardware
Os testes foram realizados em um Notebook Intelbras, que possui as seguintes
configurações:
•
•
•
•
4GB de Memória RAM;
Processador Intel Core 2 Duo;
120 GB de Disco Rígido;
Sistema Operacional Windows 7 Professional.
3.2.Preparação do Ambiente de Testes e Carga de Dados
Para a mínima interferência de outros serviços do Windows nos testes, o
computador foi formatado e ficou dedicado exclusivamente para os testes. A
inserção de registros foi feita em duas escalas, uma em intervalos de 100 em
100 mil, começando de 100 mil e terminando em 900 mil e a outra em
intervalos de 1 em 1 milhão, começando de 1 milhão e terminando em 5
milhões.
O software utilizado para a análise foi o Monitor de Recursos do
Windows, que mostra informações em tempo real sobre o uso do Hardware
(CPU, memória RAM, disco e Rede).
Para cada teste, o computador foi reiniciado, e após iniciado o Windows,
foi aberto o Monitor de Recursos e aguardado até que os recursos “Uso de
CPU” e “Memória Física Usada” estabilizassem seus valores.
A carga de dados foi feita cinco vezes para cada quantidade de
registros, com os valores obtidos dos critérios foram feitas as médias e a partir
delas foram gerados gráficos.
3.3.Resultados e Discussões
Os dados obtidos nos testes são mostrados nos gráficos a seguir, com suas
respectivas discussões.
3.3.1.Tempo Gasto para a Inserção dos Dados
As figuras 7 e 8 mostram, respectivamente, os valores de tempo gasto para a
inserção dos registros nas escalas de 100 mil a 900 mil e 1 milhão a 5 milhões
para cada banco.
O desempenho do Db4O e do MongoDB para a inserção de até cinco
milhões de registros foi linear. Para todas as quantidades de registros inseridos
o Db4O foi mais rápido que o MongoDB, chegando a ser até 100% mais rápido.
Esta diferença se dá pelo fato do MongoDB necessitar de uma interface
(mongod.exe) para receber as solicitações de gravações e fazê-las no disco,
enquanto no Db4O o acesso pela aplicação é nativo, ou seja, a aplicação faz a
escrita direta no disco.
Figura 7. Gráfico do Tempo Gasto – escala de 100 mil a 900 mil.
Figura 8. Gráfico do Tempo Gasto – escala de 1 milhão a 5 milhões.
3.3.2. Uso de Memória Física (Memória RAM)
O valor de memória física utilizada pelo computador, inicialmente, é de 19%
para o Db4O e de 20% para o MongoDB em execução. Entretanto, os valores
mostrados nos gráficos a seguir foram aqueles obtidos com as cargas de
dados descontados os valores iniciais. As figuras 9 e 10 mostram,
respectivamente, a memória física utilizada por ambos os bancos nas escalas
de 100 mil a 900 mil e 1 milhão a 5 milhões.
Observando nos gráficos a porcentagem de memória física utilizada por
cada banco ao se fazer a carga de dados, percebe-se que o MongoDB teve
sempre um menor consumo de memória, isso se deve ao fato que o Db4O para
obter um desempenho maior necessita de mais memória.
Figura 9. Uso de Memória Física – escala de 100 mil a 900 mil.
Figura 10. Uso de Memória Física – escala de 1 milhão a 5 milhões.
3.3.3.Uso de CPU
O valor inicial de Uso de CPU é de 2% tanto para o Db4O quanto para o
MongoDB, em execução. As figuras 11 e 12 mostram os gráficos do uso de
CPU para, respectivamente, escalas de 100 mil a 900 mil e 1 milhão a 5
milhões.
Figura 11. Uso de CPU – escala de 100 mil a 900 mil.
Figura 12. Uso de CPU – escala de 1 milhão a 5 milhões.
O uso de CPU pelo Db4O foi ligeiramente maior do que o MongoDB.
Não houveram alterações significativas no processamento para diferentes
quantidades de registros inseridos. Em média, o Db4O utilizou 54% enquanto o
MongoDB utilizou 53% do CPU.
4. Conclusão
Na carga de dados Db4O apresentou um desempenho superior ao MongoDB,
gastando aproximadamente a metade do tempo para a inserção dos registros.
É um banco de dados que possibilita aos desenvolvedores Java e .Net reduzir
o tempo e o custo de desenvolvimento e alcançar altos níveis de performance,
sendo uma ótima escolha, dentre outras, para aplicação embarcadas em
equipamentos e dispositivos. Para aplicações que dispõem de menos memória,
mas necessitam de um banco com bom desempenho e sem esquemas, o
MongoDB é uma boa opção. Nos testes mostrou-se bem mais “econômico”,
utilizando na maioria das vezes menos da metade de memória utilizada pelo
Db4O.
No critério de uso de CPU os valores foram muito próximos sendo que o
MongoDB utilizou 1% menos de CPU. Considerando a instalação ambos não
apresentaram dificuldades já na utilização o Db4O apresenta uma facilidade a
mais por não necessitar de colocar o banco no ar antes de utilizá-lo.
Como sugestão para trabalhos futuros pode-se acrescentar testes com
consultas, exclusão de registros e atualizações nas bases de dados, bem como
aumentar o número de bancos testados.
Referências
Brito, Ricardo W. (2010) “Banco de Dados NoSQL x SGBD’s Relacionais:
Análise
Comparativa*”,
http://www.infobrasil.inf.br/userfiles/27-05-S4-168840-Bancos%20de%20Dados%20NoSQL.pdf, 21/04/2013.
Diana, Maurício de, Gerosa, Marco Aurélio (2010) “NOSQL na Web 2.0: Um
Estudo Comparativo de Bancos Não-Relacionais para Armazenamento de
Dados
na
Web
2.0”,
http://www.lbd.dcc.ufmg.br/colecoes/wtdbd/2010/sbbd_wtd_12.pdf,
07/07/2013.
Issa, Felipe Gustavo de Sousa. (2011) “Estudo Comparativo entre Banco de
Dados Relacionais e Banco de Dados NoSQL na utilização por aplicações
de
Business
Intelligence”,
fatecsjc.edu.br/trabalhos-de-graduacao/wpcontent/uploads/2012/03/Trabalho-de-Graduação-Felipe-G.-S.-Issa.pdf,
21/04/2013.
Lennon, Joe. (2009) “Explorando o CouchDB”,
.
http://www.ibm.com/developerworks/br/library/os-couchdb/, 19/04/2013.
Matteussi, Kassiano José (2010) “Protótipo de Interface Web com PHP para
.
gerenciamento de Banco de Dados CouchDB”,
https://s3.amazonaws.com/elton/docs/monografia_kassiano.pdf, 20/04/2013.
MongoDB (2013), http://www.mongodb.org, 26/06/2013.
Plugge, Eelco, Membrey, Peter and Hawkins, Tim (2010), The Definitive Guide
to MongoDB: The NoSQL Database for Cloud and Desktop Computing,
Apress, 1ª edição.
Silva, Carlos A. R. F. Oliveira da (2011) “Data Modeling with NoSQL: How,
When
and
Why”,
http://repositorioaberto.up.pt/bitstream/10216/61586/1/000148158.pdf, 07/08/2013.
Strauch, Christof (2010) “NoSQL Databases”
http://oak.cs.ucla.edu/cs144/handouts/nosqldbs.pdf, 05/08/2013.
Versant (2013), http://www.db4o.com, 06/06/2013.
.
Download