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