1

使用外部连接池有什么好处?是否有任何理由使用ActiveRecord的数据库连接池?

我听说大多数其他应用程序将为每个工作单元打开一个连接。例如,在Rails中,我认为每个请求都可以打开一个新的连接。我假设一个连接池可以实现这一点。

我能想到的唯一好处是它允许您在没有运行1000个postgres进程的情况下拥有1,000个前端进程。

还有其他好处吗?

回答

2

Rails有connection pooling built in

  1. 只需使用ActiveRecord :: Base.connection与活动记录2.1和更早版本(预连接池)。最后,当您完成连接并希望将其返回到池中时,您可以调用ActiveRecord :: Base.clear_active_connections !.这是Active Record与Action Pack的请求处理周期一起使用时的默认行为。
  2. 使用ActiveRecord :: Base.connection_pool.checkout手动检出池中的连接。完成后,您负责通过调用ActiveRecord :: Base.connection_pool.checkin(connection)将此连接返回到池。
  3. 使用ActiveRecord :: Base.connection_pool.with_connection(&块)获取连接,将其作为块的唯一参数,并在块完成后将其返回给池。

已经有售since version 2.2。你会看到一个pool参数在database.yml控制它:

pool:表示连接池的大小数(默认为5)

,我不认为会有在分层多点在它下面的另一个集合系统,如果你尝试过,它甚至可能会混淆AR的池。

+4

AR的连接池仅用于同一进程中的多个线程。外部连接池允许您在多个进程之间进行池化。 – 2011-10-09 18:56:14

+0

@Joe:你是在回答你自己的问题吗?这是允许的。 – 2011-10-09 19:20:28

相关问题