Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/53.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 是否有任何理由将数据库连接池与ActiveRecord一起使用?_Ruby On Rails_Postgresql_Activerecord_Connection Pooling - Fatal编程技术网

Ruby on rails 是否有任何理由将数据库连接池与ActiveRecord一起使用?

Ruby on rails 是否有任何理由将数据库连接池与ActiveRecord一起使用?,ruby-on-rails,postgresql,activerecord,connection-pooling,Ruby On Rails,Postgresql,Activerecord,Connection Pooling,使用外部连接池的好处是什么 我听说大多数其他应用程序将为每个工作单元打开连接。例如,在Rails中,我认为这意味着每个请求都可以打开一个新的连接。我假设一个连接池可以实现这一点 我能想到的唯一好处是,它允许您拥有1000个前端进程,而不必运行1000个postgres进程 还有其他好处吗?Rails有: 只需将ActiveRecord::Base.connection与ActiveRecord 2.1及更早版本(连接前池)一样使用即可。最后,当您完成连接并希望将其返回到池中时,可以调用Activ

使用外部连接池的好处是什么

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

我能想到的唯一好处是,它允许您拥有1000个前端进程,而不必运行1000个postgres进程

还有其他好处吗?

Rails有:

  • 只需将ActiveRecord::Base.connection与ActiveRecord 2.1及更早版本(连接前池)一样使用即可。最后,当您完成连接并希望将其返回到池中时,可以调用ActiveRecord::Base.clear\u active\u connections!。当与Action Pack的请求处理周期一起使用时,这将是活动记录的默认行为
  • 使用ActiveRecord::Base.connection\u pool.checkout从池中手动签出连接。您负责在调用ActiveRecord::Base.connection\u pool.checkin(连接)完成后将此连接返回到池
  • 使用ActiveRecord::Base.connection\u pool.with\u connection(&block),它获取连接,将其作为块的唯一参数生成,并在块完成后将其返回到池
  • 这是可用的。您将在
    数据库.yml中看到一个
    参数来控制它:

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


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

    AR的连接池仅对同一进程中的多个线程有用。外部连接池允许您在多个进程之间共享。@Joe:这是您自己的问题吗?那是允许的。