Translate

Pesquisar este blog

domingo, 8 de novembro de 2015

Benchmark de Firebird vs PostgreSQL.

Firebird e PostgreSQL são dois dos mais robustos bancos de dados open source existentes. Pode ser difícil determinar qual será o melhor para determinado projeto.
Neste post, eu fiz um teste de velocidade entre os dois bancos, usando o JMeter  .

Carreguei um volume considerável de dados do OpenStreetMap para a massa de dados: mais de 75 milhões de pontos de latitude e longitude, e mais 6 milhões de vias/ruas da América do Sul.

Permita-me apresentar os oponentes:

PostgreSQL

O PostgreSQL possui o slogan "The most advanced Open Source database". É um banco de dados bastante completo e avançado. Sua instalação vem com o Pgadmin3 que é o cliente oficial para administração da base. 
O PostgreSQL possui funcionalidades, algumas bastante exóticas, como tais:
  • Alta disponibilidade e replicação.
  • Full Text Search (FTS) com indexação.
  • Backups incrementais contínuos, com possibilidade de restauração até uma linha de tempo anterior, se necessário.
  • Foreign Data Wrappers (FDW), para a conexão com meios de dados externos.
  • Criação de índices concorrentes, sem a necessidade de travar a tabela em produção (CREATE INDEX CONCURRENTLY).
  • Suporte a funções e tipos de dados de XML e JSON. Permite indexar partes desses arquivos também. 
  • Suporte a funções e tipos de dados trigonométricos.
  • Linguagens de programação no lado do servidor plugáveis.


Firebird

O slogan do Firebird é "The true open source database". (Esse slogan me parece uma zueira com o MySQL, que não é totalmente livre, hehehee).















As funcionalidades do Firebird denotam sua grande facilidade de uso e versatilidade:
  • Três modos de servidor (SuperServer indicado para servidores menores), (Classic para cargas maiores), Embedded e SuperClassic. O formato dos arquivos de banco são os mesmos.
  • Capacidade de rodar em modo embarcado, sem necessidade de um servidor. Isso é bastante usado em programas embarcados feitos em Delphi ou Lazarus.
  • Boa retro-compatibilidade dos servidores com versões anteriores de arquivos. Facilitando a migração de versão do servidor.
  • Backups incrementais, com o comando nbackup. (Mas eu acho menos eficientes que os do PostgreSQL).

O servidor

Eu utilizei um desktop com disco SATA e CPU AMD Athlon64, 4 cores e 4 GB de RAM. Linux Slackware64 14.1com kernel compilado.

O PostgreSQL versão 9.4.4, compilado com -march=native -mtune=native -fPIC.

O Firebird SuperServer versão 2.5.4 compilado com -march=native -mtune=native -fPIC.



Parâmetros

No postgresql.conf:
shared_buffers = 384MB
work_mem = 12MB
checkpoint_segments = 32

No firebird.conf
FileSystemCacheThreshold = 67108864
DefaultDbCachePages = 8192

(O Firebird possui uma documentação oficial muito fraca, foi difícil procurar na net como melhorar esses parâmetros).

A Carga de dados

Eu baixei o arquivo da América do Sul do site do OpenStreeMap. Após tentar entender o XML do arquivo, criei um programa para transformá-lo em CSV e ser carregado no PostgreSQL com o comando COPY.

Depois disso, criei os índices no PostgreSQL, e fiz o comando COPY novamente para gerar um arquivo TXT e carregar no Firebird usando uma tabela external file desse arquivo TXT. Criei os índices no Firebird.

Minha impressão foi de que o PostgreSQL carregou bem mais rápido, tanto o arquivo texto como criou os índices. Infelizmesnte eu não anotei os tempos de cada um mas o PostgreSQL foi mais rápido.


Gráficos

Rodei os seguintes comandos, para cada thread:
  1. SELECT pela chave primária.
  2. INSERT na tabela de log.
  3. SELECT pela chave primária.
  4. SELECT por índice de inteiro.


Tempo médio gasto, com 10, 50 e 100 usuários.





















Aqui vemos que o Firebird possui mais dificuldade de escalar à medida que o número de usuários aumenta.

Nenhum comentário:

Postar um comentário