[Haskell-cafe] Database connection pool

Michael Snoyman michael at snoyman.com
Thu May 6 09:24:36 EDT 2010


On Thu, May 6, 2010 at 9:13 AM, Bryan O'Sullivan <bos at serpentine.com> wrote:

> On Wed, May 5, 2010 at 10:51 PM, Michael Snoyman <michael at snoyman.com>wrote:
>
>> * When a connection is released, is goes to the end of the pool, so
>> connections get used evenly (not sure if this actually matters in practice).
>>
>
> In practice, you're better off letting idle connections stay that way,
> because then your DB server can close connections and free up resources. In
> other words, when you're done with a connection, put it at the front of the
> reuse queue, not the back.
>
> You'll also want to handle the possibility that a connection that you grab
> from the pool has been closed by the server. Many connection pooling
> implementations I've seen get this wrong in subtle or expensive ways.
>

Thanks for the feedback. I've gone ahead and implemented a simple resource
pool module. Since I need it to work with monad transformer stacks, I've
built it on top of MonadCatchIO-transformers. I've put the code up in a gist
on github[1]. I would appreciate if anyone could review this, especially to
make sure the exception handling code is correct. block and unblock in
particular concern me.

Thanks,
Michael

[1] http://gist.github.com/392078
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.haskell.org/pipermail/haskell-cafe/attachments/20100506/8fc091fa/attachment.html


More information about the Haskell-Cafe mailing list