I expanded by benchmark of DBD::Multi to also include DBIx::HA for
comparison.

While the benchmark reported nearly a 200% overhead for DBD::Multi,
the overhead of DBIx::HA was much better, reported at 50%.

That sounds like a lot  in both cases, but is not necessarily. First, my
test case is not normal-- the SELECT statement used is incredibly
simple. Second, even the slowest one still achieved over 2,000 selects
*per second*.

Still, if both modules offer functionality that meets your needs,
why not go with higher-performance solution?

Here's my raw result:

timing 10000 iterations of ha, multi, raw...
  ha:  4 wallclock secs ( 1.98 usr +  0.20 sys =  2.19 CPU) @ 4571.43/s
(n=10000)
multi:  7 wallclock secs ( 3.97 usr +  0.23 sys =  4.20 CPU) @ 2383.61/s
(n=10000)
  raw:  3 wallclock secs ( 1.28 usr +  0.19 sys =  1.47 CPU) @ 6808.51/s
(n=10000)
        Rate multi    ha   raw
multi 2384/s    --  -48%  -65%
ha    4571/s   92%    --  -33%
raw   6809/s  186%   49%    --

#############

The meat of the meat of the benchmark was essentially the following. In
each case, I made a connection to a single database:

cmpthese(10_000, {
    raw   => sub { $raw_dbh->selectrow_array("SELECT CURRENT_DATE") },
    multi => sub { $multi_dbh->selectrow_array("SELECT CURRENT_DATE") },
    ha    => sub { $ha_dbh->selectrow_array("SELECT CURRENT_DATE") },
});

##############

In the process of developing this benchmark, I did find an
incompatibility with DBD::Pg, which I notified the DBD::Pg developers
about, and submitted a patch for:

http://rt.cpan.org/Ticket/Display.html?id=24503

     Mark








Reply via email to