当前位置:  开发笔记 > 后端 > 正文

rails数据库连接池的工作原理

如何解决《rails数据库连接池的工作原理》经验,为你挑选了2个好方法。

我正在学习rails数据库连接池概念.在rails应用程序中,我已将池大小定义为5.

我对连接池大小的理解如下.

    当服务器启动rails自动创建database.yml文件中定义的n个连接时.在我的情况下,它将创建5个连接,因为池大小为5.

    在每个http请求上,如果需要访问数据库,则rails将使用连接池中的可用连接来提供请求.

但我的问题是,如果我一次点击1000个请求,那么大部分请求将无法访问数据库连接,因为我的连接池大小仅为5.

我对rails连接池的理解是对的吗?

谢谢,



1> Raza..:

此池大小适用于单个进程.当然,如果您的应用程序在多个进程上运行,那么每个进程将有5个数据库连接.如果您的服务器同时遇到1000个请求,它将在这些连接中分发请求,当它满了时,其余的请求等待轮到他们.



2> Laurens..:

是的,来自文档:

连接池将线程访问与有限数量的数据库连接同步.基本思想是每个线程从池中检出数据库连接,使用该连接并重新检入连接.ConnectionPool完全是线程安全的,并且将确保两个线程不能同时使用连接,只要正确遵循ConnectionPool的合同.它还将处理线程多于连接的情况:如果所有连接都已检出,并且线程试图检查连接,则ConnectionPool将等待其他线程检查连接.

来源:http://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/ConnectionPool.html

如果你使用unicorn之类的东西作为http服务器:

在Unicorn中,每个进程都建立自己的连接池,因此,如果您的数据库池设置为5,并且您有5个Unicorn工作程序,则最多可以有25个连接.但是,由于每个独角兽工作者一次只能处理一个连接,因此除非您的应用程序在内部使用线程,否则每个工作人员实际上只会使用一个数据库连接.

推荐阅读
依然-狠幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有