develooper Front page | perl.dbi.users | Postings from August 2006

Re: DBD-DBM too slow

Thread Previous
From:
Jeff Zucker
Date:
August 23, 2006 12:19
Subject:
Re: DBD-DBM too slow
Message ID:
44ECAA9E.9080408@vpservices.com
ManKyu Han wrote:
> Hi.  I installed DBD::DBM through cpan and everything seems fine.
> I wanted to benchmark DBD::DBM's performance, so I did simple test.
> I populate table that I created with 200000 integer and strings.
> In mysql, it was going almost 7000 inserts / sec
> but in DBD::DBM,  the best I could get was 130/sec
>   
Your tests are flawed see below.  OTOH, DBD::DBM is unlikely to be able 
to compete with MySQL or even SQLite for speed.
> Is there some optimization that I should do?
>   
If your SQL needs are light, use DBI::SQL::Nano instead of 
SQL::Statement. And, especially note the next point:
> foreach my $sql (@sql_i){
>         my $sth = $dbh->prepare($sql);
>         $sth->execute;
>         $count++;
>         if($count%2000 eq 0){
>                 mkUtil::printTime("$count");
>         }
> }
>   
In DBD::DBM, prepare() takes a fair amount of time.  If you prepare once 
outside the loop then execute many times in the loop using placeholders 
you will gain *lots* of time.  This is true of most DBDs but especially 
true of DBD::DBM and other SQL::Statement based DBDs.

Also, you might consider using DBI's new profiling capabilities or even 
Benchmark when doing tests.

-- 
Jeff

Thread Previous


nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About