Re: preloading modules and apache::dbi

Michael Peters <[email protected]>
Newsgroups gmane.comp.apache.mod-perl
Message-ID <[email protected]>
On 01/19/2012 08:48 AM, Josh Narins wrote:
> The idea of Apache::DBI is that you get to pool connections.
>
> If you call Apache::DBI->new and there is a spare connection, you get
> it, if not, one is created for you.

This isn't quite accurate. Apache::DBI doesn't do connection pooling, it 
manages persistent connections. It's still one connection per-process 
(per connection attributes) and connections aren't shared between child 
processes (that's where things get messy).

Apache::DBI makes sure you don't create more connections than needed and 
makes sure that the persistent connections are still connected before 
handing them back.

> You almost certainly don't want one $db object being shared as a member
> of a class, unless your entire program also happens to represent one DB
> transaction.

This is actually a pretty common and ok pattern. Remember that execution 
through a request is still linear (not threaded or handled by multiple 
processes) so if you want your whole request to be a single transaction 
you can, or if you want it to auto-commit you can, or if you want it to 
be a mix of transactions and auto-committed statements, you can do that too.

When you use Apache::DBI and then call DBI->connect or 
DBI->connect_cached you'll get the same database connection every time 
(per process of course).

-- 
Michael Peters
Plus Three, LP
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.