使用外部连接池有什么好处?
我听说大多数其他应用程序都会为每个工作单元打开一个连接。例如,在Rails中,我认为这意味着每个请求都可以打开一个新连接。我假设连接池会使这成为可能。
我能想到的唯一好处是它允许你拥有1,000个前端进程而不需要运行1000个postgres进程。
还有其他好处吗?
答案 0 :(得分:2)
Rails有connection pooling built in:
- 与Active Record 2.1及更早版本(pre-connection-pooling)一样,只需使用ActiveRecord :: Base.connection。最后,当您完成连接并希望将其返回到池中时,您可以调用ActiveRecord :: Base.clear_active_connections!。当与Action Pack的请求处理周期结合使用时,这将是Active Record的默认行为。
- 使用ActiveRecord :: Base.connection_pool.checkout手动检出池中的连接。通过调用ActiveRecord :: Base.connection_pool.checkin(连接)完成后,您负责将此连接返回到池中。
- 使用ActiveRecord :: Base.connection_pool.with_connection(& block)获取连接,将其作为块的唯一参数,并在块完成后将其返回池中。
醇>
这已经可用since version 2.2。您会在pool
中看到database.yml
参数来控制它:
pool
:表示连接池大小的数字(默认为5)
我不认为在它下面分层另一个池系统会有多大意义,如果你尝试了它,它甚至可能会混淆AR的池。