views:

572

answers:

1

So my Passenger spins up 5 instances of my Rails app

I connect to MongoDB using Connection.new("localhost", 3000, :pool_size => 1, :timeout => 5)

Why would I need a "pool of connections" if I only incur overhead when starting up my Rails app, not per request? Why would a single process need more than 1 connection?

And what is the purpose of the timeout? Why would I want the connection to timeout? Shouldn't it be persist through the Rails process' lifetime?

So confused...

This question is specific to Ruby and Mongo but I guess it applies to other languages/databases.

+1  A: 

You don't need to use connection pooling here. As you're using Passenger, just make sure that each instance uses a separate connection by catching the start_worker_process event. This is documented in the driver README.

Connection pooling can be useful for certain multi-threaded apps. pool_size is the max number of concurrent threads the connection will handle, and timeout is the maximum number of seconds a thread can wait for an available socket before an exception is thrown.

Kyle Banker
In the ruby driver's case, conn = Connection.new(..., :pool_size => 10), which object owns the pool and its connections? Does pooling meann I don't have to lock the connection in my threads?
Alexandre
in that case, conn will own the connection and the pool. you don't have to lock around the connection object at all.
Kyle Banker