domingo, 3 de novembro de 2013

Comparativo entre componente de conexão com banco de dados Delphi DBX vs FireDAC



Prezados amigos, resolvi fazer um teste comparativo de velocidade entre algumas suíte de acesso a dados do Delphi.  Minha ideia inicial era fazer um comparativo entre o tão falado FireDAC e o DBX. Fiquei surpreso com o resultado, mas foi uma surpresa um tanto decepcionante quanto ao FireDAC. No teste que fiz ele é surpreendentemente lento. Pode ser que haja alguma configuração que eu não tenha feito, mas por default, ele não foi bem. Abaixo segue a metodologia e em seguida os resultados.

Metodologia

Criei uma simples aplicação com os componentes de acesso e fiz um loop com FOR de 1 ate 10000 com INSERTs. Abaixo segue o trecho do código:
  for I := 1 to SpinEdit1.Value do
    begin
      ClientDataSet1.Append;
      ClientDataSet1ID.Value := i;
      ClientDataSet1TEXTO.Value := '0123456789001234567890';
      ClientDataSet1TEMPO.Value :=   now;
      ClientDataSet1.Post;
      ClientDataSet1.ApplyUpdates(0);
    end;
  ClientDataSet1.Close;

Essa arquitetura foi utilizada, pois é assim que utilizo no meu desenvolvimento em 3 camadas com o DataSnap. O ClientDataSet roda no lado cliente e no lado servidor há um provider e o componente de acesso a dados.
Utilizei o banco de dados FireBird porque creio que seja um dos mais comuns na comunidade e sua instalação é bastante simples de realizar.
            A tabela no banco contem apenas três campos: ID interger, TEXTO varchar, TEMPO Time; Para cada registro gravado é fornecido o ID, um texto padrão e no campo tempo vai o momento da em que os campos são atribuídos, utilizando a função NOW como visto no código acima. Após isso é verificado no banco de dados a relação de tempo entre o primeiro registro gravado e o último, obtendo-se assim o tempo gasto para serem feitos todos os inserts. Outros  parâmetros do ambiente do teste:
Versão Delphi: XE5 Trial
Computador: Notebook Dell i5 Windows 64 bits
Versão Firebird: 2.5.1 32 bits
Rede: Servidor local, não foi utilizado rede

Resultados

Aqui segue a tabela de resultados entre as 3 suites testadas ate agora, e uma variação do DBX, gravação com SQLQuery e com SQLDataSet: 

FireBird 2.5 32 Bits

Componente
INSERT=10000 (segundos)


DBX/Query
28

DBX/DataSet
27

FireDAC
274

IB
30

          
Note que no geral a pouca diferença entre as suítes, exceto o FireDAC que é extremamente lento comparado com outros. Pode ser que seja somente com o Firebird? –Talvez, foi um teste que fiz, repito de forma simples para uma avaliação inicial. Para ver as primeiras impressões, bem, eu não estou feliz com o que vi e irei procurar me aprofundar mais no assunto para ver o que pode ser melhorado.

Novos teste 

Estou prevendo realizar novos testes, quero incrementar outros componentes no comparativo, por tanto aceito sugestões(Coloquem nos comentários ou enviem um e-mail para jnelson3@ig.com.br).  E brevemente quero testar com outros bancos de dados e outros e outros comando como Update e Select que são os mais utilizados.

Conclusão

Fiquei realmente decepcionado com o FireDAC, li que ele integrou ao Delphi para ser o padrão, então irei buscar mais informações para saber o que está ocorrendo de errado.  Por hora posso dizer que foi chocante a lentidão. Não recomendo ninguém a mudar por enquanto.

Um comentário: