Benchmark: H2, Firebird, PostgreSQL, MySQL

Um dos passos que tem extrema relevância ao se desenvolver um sistema, é escolher o banco de dados apropriado para a situação. A escolha de um banco de dados depende muito de vários fatores. Neste post, veremos alguns fatores que influem nesta escolha, e um pequeno benchmark (teste de desempenho) das principais ferramentas gratuitas de SGBD do mercado.

Qual o “melhor” banco de dados?
Talvez esta pergunta esteja meio incompleta… acredito que a pergunta correta seria: qual o melhor banco de dados para ESTA situação?
Cada banco de dados possui particularidades que podem influenciar (para melhor ou para pior) dependendo de cada situação.

Apesar do foco deste post ser em SGBDs gratuitos, vamos dar uma olhada nos bancos de dados proprietários mais comuns:
Oracle_logo
Talvez o Oracle seja o SGBD que primeiro vem a cabeça quando se fala em banco de dados robusto. Apesar de ser pago (e bem pago), atualmente tem a versão XE (express edition), que pode ser utilizado gratuitamente com bases de dados de até 11GB (versão 11G)
Site Download

Microsoft_SQL_server_logo
O SQLServer é o banco de dados proprietário da Microsoft, e da mesma forma que o Oracle, possui uma versão gratuita (com limitações) chamada Express Edition.
Site Download

A estratégia dos bancos de dados proprietários terem versões gratuitas, é incentivar seu uso, e caso a base de dados comece a realmente ficar grande, vc terá de comprar o SGBD para continuar com a sua utilização.

Agora, os bancos de dados gratuitos:
mysql_logo
Slogan: “The world’s most popular open source database”
Realmente eu acredito que o MySQL é o banco de dados open source mais popular. Os “evangelistas” do MySQL dizem que ele é um banco de dados muito rápido… mas há controvérsias 🙂
Do mais, o MySQL é um banco de dados leve e de fácil instalação e configuração. É um banco de dados que atende a maioria das situações “normais”. O cliente oficial, MySQL Workbench, é uma ferramenta completa que permite administrar, modelar e sincronizar modelos com as bases de dados MySQL.
Site Download

postgresql_logo-555px
Slogan: “The world’s most advanced open source database”
Eu acho que o slogan do Postgres é um tirada de onda com o mysql heheh!
O Postgres é talvez o banco de dados open source que mais chega “próximo” do Oracle em questões de funcionalidades… é um SGBD leve, rápido, de fácil configuração e utilização. Sua instalação já inclui o PGAdmin, que é o cliente do banco de dados oficial que supre todas as necessidades.
Site Download

firebird-logo-300
Slogan: “The true universal open source database”
O Firebird é um SGBD baseado no Interbase (outro SGBD), sendo que é possível utilizar no modo “server” (rodando o SGBD como um serviço do sistema operacional) ou “embedded” (embarcado, com a aplicação acessando diretamente o arquivo do BD) através de algumas bibliotecas nativas para cada sistema operacional.
Infelizmente o Firebird não possui nenhum cliente oficial, o que leva grande parte de seus utilizadores a utilizar ferramentas pagas (pirateadas) para gerenciar o banco de dados.
Site Download

h2-logo-2
O H2 (não tem slogan) é um banco de dados escrito 100% em java. É leve, rápido e pode ser executado no modo server e embedded (assim como o firebird), porém sem necessidade de bibliotecas nativas.
O que me surpreendeu no H2 é que é apenas um arquivo “jar” de 1.5m, que é conector jdbc, servidor e cliente!!!!
O cliente “oficial” é o próprio jar conector jdbc: basta clicar 2 vezes sobre o “jar” e o cliente roda no navegador web.
Lembrando que o H2 é um banco de dados 100% java, e seu uso atualmente é restrito a linguagem de programação java.
Site Download

Ta, mas qual o “melhor”?
Como dito anteriormente, depende muito do propósito.
O Mysql é um banco de dados mais comum, e na maioria dos servidores de hospedagem (por exemplo) ele sempre está presente.
O Postgres é um banco de dados mais robusto, que consegue fazer frente os bancos de dados pagos.
O Firebird é o banco de dados que consegue rodar em modo “embeeded” (sem necessidade de instalação), porém com java necessita de configurações adicionais e bibliotecas específicas para cada sistema operacional.
O H2 é um banco de dados 100% java que também roda em modo embeeded, só que específico para o Java. É ideal para aplicações onde o objetivo é “clicar duas vezes e sair utilizando”.

E quanto ao desempenho?
Este ponto é muito relativo.
O MySQL, por exemplo, sempre é citado como “o mais rápido”. Porém, como muitos sabem, o MySQL trabalha com “engines” (motores) diferentes. As duas mais utilizadas sao MYISAM e INNODB.
MYISAM realmente é rápida, porém nela não existe funções básicas como verificação de chave estrangeira.
INNOBD é mais robusta, mas o desempenho cai drasticamente se comparado a qualquer outro SGBD.

Abaixo, elaborei alguns gráficos de desempenho, que efetuei por conta própria.
Vale lembrar que ORACLE e SQLSERVER não estão abaixo, pois suas licenças não permitem a divulgação de benchmarks 😛
Espertinhos eles hHAUHUAHUAUH

Os testes abaixo foram executados no seguinte ambiente:
SO: Windows 8
Processador: Core2Duo
Memória: 4GB DDR3

Foi utilizada linguagem JAVA e conexão via JDBC.

Não foi utilizada nenhuma técnica de tunning: apenas a instalação “padrão” de cada um SGBD, ou seja, é somente para fins comparativos e não serve para dizer “este é melhor que aquele”.

Foi utilizado uma transação para inserir 10000 registros, em 4 tabelas diferentes, cada uma com chaves primárias de um tipo em específico:
Sequence-> chave primária numérica sequencial e incremental
Varchar -> chave primária em texto (String)
Long Composto -> chave composta por 2 campos “long” ou “bigint”
Numeric -> chave composta de um número extremamente grande (38 casas decimais)
Byte array -> chave primária binária (blob, bytea, raw)

Um detalhe importante é que o Firebird não tem suporte a números com 38 casas decimais e também não faz índice em campos binários.. ou seja, destes dois tipos o Firebird não estará presente.

Comparativo de INSERT (uma transação inserindo 10000 registros, em segundos):

dyerware.com


Bom, neste primeiro gráfico temos a diferença de desempenho ABSURDA do desempenho do MySQL INNODB para MYISAM.
Sim, o que em MYISAM demorou 1 segundo, em INNODB demorou mais de 4 minutos!!

Para melhorar o comparativo, o mesmo teste, mas sem o MySQL no formato INNODB:

dyerware.com


Agora sim. Neste primeiro teste, o Firebird foi ligeiramente mais lento do que o restante dos SGBDs.

Como a maioria dos casos a chave primária é uma sequência, abaixo somente este teste em específico:

dyerware.com


Como resultado, temos o H2 com um desempenho muito rápido (1 segundo e 35 milésimos), em modo embeeded. Realmente muito rápido. Porém, somente é utilizado com Java.
O MySQL também teve um desempenho similar (1 segundo e 345 milésimos). Em MYISAM, que não faz verificações de chaves estrangeiras.
O Postgres teve um desempenho muito bom (3 segundos e 866 milésimos).
O Firebird foi o “lanterninha” (15 segundos e 449 milésimos).

O meu próximo teste será verificação de desempenho com a base de dados com alguns milhões de registros. Assim que eu tiver os resultados, irei publicar aqui.

Abraço!

Deixe um Comentário

9 Comentários.

  1. Do you have the source code for the benchmark ?

    Also can you mention the version of JDBC driver that you used for Firebird
    Also did you used the NATIVE driver ?
    http://jaybirdwiki.firebirdsql.org/jaybird/doku.php?id=config:connection_properties

    There is a rewrite of the driver and it will have better performance on the wire transfer

  2. Cara, achei o post muito bacana e a abordagem bem feita. Mas eu gostaria de sugerir 2 coisas:

    1) Mostrar quais configurações você está utilizando em cada SGDB. Alguns tem uma configuração inicial otimizada para rodar em desktops bem simples e não otimizar a performance.
    2) Tentar testes mais parecidos com os praticados no tpc.org como o TPC-C, TPC-H, etc.

    []s

  3. Boa tarde,

    Muito bacana esse post. Qual ferramenta você usou para testar o desempenho de cada banco?

    Valeu, e parabens

    • Boa tarde Guilherme,

      Na verdade eu mesmo desenvolvi uma ferramenta pequena que executa e mede o tempo de transações em diferentes bancos de dados. As instruções executadas foram exatamente as mesmas em cada SGBD.

      Um abraço!

  4. O Firebird tem um cliente não-oficial e opensource: http://www.flamerobin.org/

  5. Confira uma ferramenta gratuita – Valentina Studio. Produto incrível! IMO é o melhor gerenciador de mysql, para todas as plataformas. http://www.valentina-db.com/en/valentina-studio-overview

  6. se for vender o app e ele precisar do mysql vai ter q comprar a licenca de uso comercial do mysql

  7. para firebird tem tb http://www.sqlmanager.net/en/tools/free. tem uma ferramenta paga e outras frees

Deixe um Comentário


NOTA - Você pode usar estesHTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>