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

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


Muito provavelmente não (ou iria requerer um grande esforço).
O módulo foi feito justamente para ser mais rápido. Cuidados foram
tomados especialmente para isso.

Porém, nem tudo está perdido: a interface do módulo é quase um drop-in
replacement pro Class::DBI (principalmente porque eu gosto da
interface do Class::DBI). Então se você fizesse a troca, não
precisaria de mudar quase nada.

Por exemplo, o código usado no benchmark é o mesmo para o Class::DBI e
para o meu módulo. Sem mudança alguma no uso. A declaração das classes
de dados tem uma camada de compatibilidade de modo que uma classe de
dados do Class::DBI é uma classe de dados válida do meu módulo.

MAS, meu módulo não implementa tudo (ainda?). Ele só implementa o que
eu uso. ;-)
Para você ter uma idéia de como é o código:

sub ObjRelMap {
        for my $cidade (Cidade->search_like({nome =>'%a%'})) {
                my $x = $cidade->id;
                my $y = $cidade->nome;
                my $z = $cidade->estado;

                my $var = $cidade->estado->pais->nome;
        }
}

Essa foi a simples rotina utilizada para o benchmark. A rotina para o
benchmark do Class::DBI é idêntica, com a exceção de que a classe se
chama CidadeDBI ao invés de só Cidade.

Depois de várias otimizações nas rotinas dos outros módulos (porque eu
achei eles não podiam ser tão lentos assim e resolvi perguntar em uma
outra lista de discussão), o aumento de velocidade caiu de mais 8
vezes para ~4.25x o que ainda é MUITA diferença.

CDBI      37.1/s        --       -6%      -78%
RDB       39.4/s        6%        --      -77%
ObjRelMap  168/s      353%      326%        --

Então acho que vou continuar o desenvolvimento do módulo.
Possivelmente com a implementação de novos recursos a performance irá
cair um pouco, mas acredito que ainda continuará significativamente
mais rápido (pelo menos 3x).

-Nilson Santos F. Jr.

On 1/31/06, Solli Moreira Honorio <shonorio em terra.com.br> wrote:
>
>
> Nilson,
>
> Existe a possibilidade de implementar estas melhorias que resultou em performance no próprio Class::DBI ? Pois assim, o impacto positivo seria enorme.
>
> Abraços,
>
> Solli M. Honório
>
>  De: cascavel-pm-bounces+shonorio=terra.com.br em pm.org
>
>  Para:"Cascavel Perl Mongers" cascavel-pm em pm.org
>
>  Cópia:
>
>
>  Data: Tue, 31 Jan 2006 13:39:08 +0000
>
>
>  Assunto:[Cascavel-pm] Prévia de novo módulo
>
> > Pessoal,
> >
> > Sei que tem que muita gente que evita mapeadores objeto-relacional
> > (como o Class::DBI) por questões de performance. Porém, eu acho a
> > idéia muito boa pra ser estragada simplesmente por causa disso e
> > resolvi agir.
> >
> > Não tenho código com qualidade pra CPAN ainda, mas estou com
> > resultados bastante promissores. Abaixo vai o resultado de um
> > benchmark que acabei de rodar comparando o Class::DBI (CDBI),
> > Rose::DB::Object (RDB) e o meu novo módulo (ObjRelMap), só pra vocês
> > sentirem um gostinho do que possivelmente vem por aí. ;-)
> >
> > Rate CDBI RDB ObjRelMap
> > CDBI 21.0/s -- -29% -90%
> > RDB 29.6/s 41% -- -86%
> > ObjRelMap 206/s 884% 596% --
> >
> > Um "drawback" é que atualmente ele só funciona pra MySQL (ou algum
> > outro banco de dados que aceite a sintaxe de MySQL), mas isso é
> > "consertável". Ele possui os recursos mais importantes do Class::DBI
> > (segundo o meu julgamento) e ainda faz auto-joins (coisa que você só
> > consegue com o Class::DBI::Sweet). Atualmente, existem algumas
> > limitações (os auto-joins possivelmente não se comportam muito bem com
> > tabelas com mais de uma chave primária) mas caso exista demanda isso
> > também é "consertável".
> >
> > Bom, é isso. Espero em breve poder soltar alguma coisa na CPAN. ;-)
> >
> > -Nilson Santos F. Jr.
> >
> > -Nilson Santos F. Jr.
> > _______________________________________________
> > Cascavel-pm mailing list
> > Cascavel-pm em pm.org
> > http://mail.pm.org/mailman/listinfo/cascavel-pm
> _______________________________________________
> Cascavel-pm mailing list
> Cascavel-pm em pm.org
> http://mail.pm.org/mailman/listinfo/cascavel-pm
>
>


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