Re: [Cascavel-pm] Prévia de novo módulo

Nilson Santos Figueiredo Junior acid06 em gmail.com
Terça Janeiro 31 19:05:58 PST 2006


On 1/31/06, Alceu R. de Freitas Jr. <glasswalk3r em yahoo.com.br> wrote:
> Você mencionou que já é possível fazer algumas coisas
> com MySQL. Eu gostaria de testar isso.
>
> Você pensa em disponibilizar isso para download na
> forma em que já está?

Penso sim.
Mas eu estou acertando umas últimas coisas. Eu acabei de descobrir que
ele tem uns problemas com o MySQL 5 sob Windows (possivelmente em
outros OS também, não sei). Não é por culpa do módulo, mas por culpa
do DBD::mysql que dá segfaults aleatórios no método column_info do
database handle. Isso impedia o funcionamento.

Eu queria escrever uma documentação antes também, nem que fosse para
relatar o que não funciona ainda. A interface está idêntica ao
Class::DBI, creio eu.

Com a ajuda do criador do Rose::DB::Object eu melhorei a performance
do módulo ao máximo para realizar a comparação. Isso gastou muito
trabalho e pra fazer cada query o usuário precisaria passar uma hash
gigantesca de opções. Eu acho que isso quase acaba com o sentido de
utilizar ORM. Com todas essas otimizações, o Rose::DB::Object ainda
foi mais de 2 vezes mais lento.

Como uma comparação injusta eu coloquei o DBI no meio, com uma query
feita à mão que busca tudo de uma vez só, coisa que é impossível pra
um ORM fazer pois ele não sabe de antemão o que realmente será
utilizado ou não (sem que o programador tenha muito trabalho). Eu
achei os resultados satisfatórios.

            Rate     CDBI RDBOSlow RDBOFast      ORM      DBI
CDBI     0.266/s       --     -44%     -91%     -95%     -99%
RDBOSlow 0.471/s      77%       --     -84%     -92%     -98%
RDBOFast  2.89/s     985%     513%       --     -49%     -87%
ORM       5.66/s    2029%    1102%      96%       --     -74%
DBI       21.5/s    7986%    4467%     645%     280%       --

A minha solução ficou em torno de 1/4 da velocidade do DBI "na
mãozona" e o dobro da velocidade do Rose::DB o mais otimizado
possível. Isso tudo com um código idêntico ao do Class::DBI (ou seja,
extremamente simples). O mesmo código rodado no Class::DBI foi 20
vezes mais lento.

Ah! E como eu disse anteriormente, no que já está implementado, o
módulo é uma alternativa "drop-in" para o Class::DBI.

-Nilson Santos F. Jr.


Mais detalhes sobre a lista de discussão Cascavel-pm