有没有理由在ActiveRecord中使用数据库连接池?

时间:2011-04-28 23:51:43

标签: ruby-on-rails postgresql activerecord connection-pooling

使用外部连接池有什么好处?

我听说大多数其他应用程序都会为每个工作单元打开一个连接。例如,在Rails中,我认为这意味着每个请求都可以打开一个新连接。我假设连接池会使这成为可能。

我能想到的唯一好处是它允许你拥有1,000个前端进程而不需要运行1000个postgres进程。

还有其他好处吗?

1 个答案:

答案 0 :(得分:2)

Rails有connection pooling built in

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

这已经可用since version 2.2。您会在pool中看到database.yml参数来控制它:

  

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

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

相关问题