Hi, I was trying to perform some fairly simple benchmarks comparing Rose::DB::Object, Class::DBI and an in-house solution and came up with some disappointing results from Rose::DB::Object.
I'd like to know if there's something I did wrong or that could be done in a better way since RoseDB was only marginally faster (about 40%) than Class::DBI (vanilla, without prefetch, nothing). The benchmark code follows: <code> use warnings; use strict; package CidadeDBI; use base 'Class::DBI'; __PACKAGE__->connection("dbi:mysql:database=barcode;host=xxxxxxxx", "root", "xxxxxxxx"); __PACKAGE__->table("cidade"); __PACKAGE__->columns(All => qw|id nome estado|); __PACKAGE__->has_a(estado => 'EstadoDBI'); 1; package EstadoDBI; use base 'Class::DBI'; __PACKAGE__->connection("dbi:mysql:database=barcode;host=xxxxxxxx", "root", "xxxxxxxx"); __PACKAGE__->table("estado"); __PACKAGE__->columns(All => qw|id nome pais|); __PACKAGE__->has_a(pais => 'PaisDBI'); 1; package PaisDBI; use base 'Class::DBI'; __PACKAGE__->connection("dbi:mysql:database=barcode;host=xxxxxxxx", "root", "xxxxxxxx"); __PACKAGE__->table("pais"); __PACKAGE__->columns(All => qw|id nome|); 1; package RDBSetup; use base 'Rose::DB'; use Rose::DB::Registry; # Create a private registry for this class __PACKAGE__->registry(Rose::DB::Registry->new); # Register your lone data source using the default type and domain __PACKAGE__->register_db( driver => 'mysql', database => 'barcode', host => 'xxxxxxxx', username => 'root', password => 'xxxxxxxx', ); 1; package CidadeRDB; use base 'Rose::DB::Object'; __PACKAGE__->meta->table('cidade'); __PACKAGE__->meta->columns(qw|id nome estado|); __PACKAGE__->meta->primary_key_columns('id'); __PACKAGE__->meta->foreign_keys( estado_obj => { class => 'EstadoRDB', key_columns => { estado => 'id' }, } ); __PACKAGE__->meta->initialize; __PACKAGE__->meta->make_manager_class('cidade'); sub init_db { RDBSetup->new } 1; package EstadoRDB; use base 'Rose::DB::Object'; __PACKAGE__->meta->table('estado'); __PACKAGE__->meta->columns(qw|id nome pais|); __PACKAGE__->meta->primary_key_columns('id'); __PACKAGE__->meta->foreign_keys( pais_obj => { class => 'PaisRDB', key_columns => { pais => 'id' }, } ); __PACKAGE__->meta->initialize; __PACKAGE__->meta->make_manager_class('estado'); sub init_db { RDBSetup->new } 1; package PaisRDB; use base 'Rose::DB::Object'; __PACKAGE__->meta->table('pais'); __PACKAGE__->meta->columns(qw|id nome|); __PACKAGE__->meta->primary_key_columns('id'); __PACKAGE__->meta->initialize; __PACKAGE__->meta->make_manager_class('pais'); sub init_db { RDBSetup->new } 1; package main; use warnings; use strict; use Benchmark 'cmpthese'; cmpthese(200, { CDBI => \&CDBI, RDB => \&RDB }); sub RDB { for my $cidade (@{CidadeRDB::Manager->get_cidade(query=>[nome=> { like => '%a%' },])}) { my $x = $cidade->id; my $y = $cidade->nome; my $z = $cidade->estado_obj; my $var = $cidade->estado_obj->pais_obj->nome; } } sub CDBI { for my $cidade (CidadeDBI->search_like({nome =>'%a%'})) { my $x = $cidade->id; my $y = $cidade->nome; my $z = $cidade->estado; my $var = $cidade->estado->pais->nome; } } </code> Thanks for any advice. -Nilson Santos F. Jr. ------------------------------------------------------- This SF.net email is sponsored by: Splunk Inc. Do you grep through log files for problems? Stop! Download the new AJAX search engine that makes searching your log files as easy as surfing the web. DOWNLOAD SPLUNK! http://sel.as-us.falkag.net/sel?cmd=lnk&kid3432&bid#0486&dat1642 _______________________________________________ Rose-db-object mailing list Rose-db-object@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/rose-db-object