Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.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
Json 使用EXTO的每个请求的数据库线程_Json_Architecture_Elixir_Psql_Ecto - Fatal编程技术网

Json 使用EXTO的每个请求的数据库线程

Json 使用EXTO的每个请求的数据库线程,json,architecture,elixir,psql,ecto,Json,Architecture,Elixir,Psql,Ecto,一个典型的Elixir web应用程序通常有一个postgresql后端,带有Ecto查询和API逻辑 但是,由于cowboy为每个请求创建一个子GenServer进程(包含应用程序逻辑),因此即使使用cowboy/poolboy提供的池,这是否会产生为n并发请求生成psql线程的效果 然后,转移到存在多个应用程序实例(例如docker容器集群)的场景中,这不会给现有数据库线程的总数增加一个额外的因素吗 Cowboy确实为每个请求创建了一个新的Erlang进程,但是从该进程执行一个Ecto查询不

一个典型的Elixir web应用程序通常有一个postgresql后端,带有
Ecto
查询和API逻辑

但是,由于
cowboy
为每个请求创建一个子
GenServer
进程(包含应用程序逻辑),因此即使使用
cowboy
/
poolboy
提供的池,这是否会产生为n并发请求生成psql线程的效果


然后,转移到存在多个应用程序实例(例如docker容器集群)的场景中,这不会给现有数据库线程的总数增加一个额外的因素吗

Cowboy确实为每个请求创建了一个新的Erlang进程,但是从该进程执行一个Ecto查询不会导致新的数据库连接。Ecto保留一个数据库连接池(使用db_connection/poolboy)。此池的大小是使用回购配置中的
pool\u size
选项设置的。启动查询时,将借用此池中的连接并用于执行查询。执行完成后,连接将返回到池。Ecto永远不会为每个查询创建新连接。如果连接在池中不可用,它将等待一个连接可用,或者如果在配置的超时时间(默认为30秒)内未签入连接,它将最终超时。

Cowboy会为每个请求创建一个新的Erlang进程,但从该进程执行一个Ecto查询不会导致新的数据库连接。Ecto保留一个数据库连接池(使用db_connection/poolboy)。此池的大小是使用回购配置中的
pool\u size
选项设置的。启动查询时,将借用此池中的连接并用于执行查询。执行完成后,连接将返回到池。Ecto永远不会为每个查询创建新连接。如果连接在池中不可用,它将等待一个连接可用,或者如果在配置的超时时间(默认为30秒)内未签入连接,它将最终超时。

谢谢-计算跨n个应用实例的最大应用数据库线程数应为n*
pool\u size
是,没错。应用程序的每个实例都将打开
pool\u size
连接。这不是问题吗?我的意思是,如果实例数量无法控制地增长,那么n*pool_大小的线程可能会在重负载下杀死DB,在Elixir世界中,在这种情况下你会怎么做?我理解,如果你用一个与DB服务器可以处理的成比例的值来控制连接池_大小的集群,它可以解决类似的问题。在Ecto中是否存在类似的情况?请注意,
:pool\u timeout
已被删除,并已被更智能的队列所取代:谢谢-计算跨n个应用程序实例的最大应用程序数据库线程数应为n*
pool\u size
是的,没错。应用程序的每个实例都将打开
pool\u size
连接。这不是问题吗?我的意思是,如果实例数量无法控制地增长,那么n*pool_大小的线程可能会在重负载下杀死DB,在Elixir世界中,在这种情况下你会怎么做?我理解,如果你用一个与DB服务器可以处理的成比例的值来控制连接池_大小的集群,它可以解决类似的问题。在Ecto中是否有类似的情况?请注意,
:pool_timeout
已被删除,并已被更智能的排队所取代: