gpt4 book ai didi

node-postgres - 池化、客户端 checkout 、idleTimeoutMillis

转载 作者:行者123 更新时间:2023-12-05 02:44:36 33 4
gpt4 key购买 nike

这是我看完Documents的理解:

  1. 池化,与许多其他数据库一样,我们只有一定数量的允许连接,所以你们都排好队等待空闲连接返回池中。 (连接在某种意义上就像一个 token )
  2. 在任何给定时间,事件和/或可用连接数控制在 0-max 范围内。
  3. idleTimeoutMillis 表示“客户端在与后端断开连接并被丢弃之前必须在池中闲置且未被 check out 的毫秒数。”不清楚这一点。通常认为,当客户端说 Web 应用程序已完成其 CRUD 但未返回时,自愿认为连接是空闲node-postgres 将启动时钟,一旦达到毫秒数,将为下一个客户端将连接带回池中。那么什么是在与后端断开连接并丢弃之前未被 check out ?

idleTimeoutMillis: 100,这是否意味着此连接将在空闲 100 毫秒后真正断开(注销)?如果是,那么它不会返回到池中,并且会导致频繁的登录连接,如下文档所述:

Connecting a new client to the PostgreSQL server requires a handshakewhich can take 20-30 milliseconds. During this time passwords arenegotiated, SSL may be established, and configuration information isshared with the client & server. Incurring this cost every time wewant to execute a query would substantially slow down our application.

提前感谢愚蠢的问题。

最佳答案

很抱歉,这个问题这么久都没有得到解答,但我最近遇到了一个错误,它也质疑了我对这个库的理解。

本质上,当您进行池化时,您是在告诉图书馆您最多可以同时打开 X 个数据库连接。因此,例如,进入 CRUD API 的每个请求都会打开一个新连接,并且当每个请求打开一个新连接时,您总共可能有 X 个请求。现在,这意味着一旦请求进入,它就会从池中“ check out ”一个连接。这也意味着另一个请求无法使用此连接,因为它当前被另一个请求阻止。

因此,为了让我们在使用该连接完成一个请求时“重用”同一连接,您必须释放它并说它已准备好再次使用“ checkout ”。现在,当另一个请求进入时,它可以使用此连接并执行上述查询。

idleTimeoutMillis 对我来说,这个变量让我很困惑,我花了一段时间才弄清楚。当与已释放或“ checkout ”的数据库有一个打开的连接时,它处于空闲状态,这意味着任何想要发出请求的人都可以使用此连接发出请求,因为它未被使用。这个变量表示当一个连接处于空闲状态时,我们要等多久才能关闭这个连接。对于各种事情,这可能会被使用。显然,打开数据库连接需要内存等,因此关闭它们可能是有益的。此外,在自动缩放时 - 假设您处于每秒最大请求数并且您正在使用所有 DB conns,那么这对于保持 IDLE 连接打开一段时间很有用。但是,如果这太长并且您缩小规模,那么您可能会遇到长时间的内存,因为每个 IDLE 连接都需要一些内存空间。

这样做的好处是,当您有一个打开的连接并只用它发送一个查询时,您不需要使用它已经过身份验证并准备就绪的数据库重新进行身份验证。

关于node-postgres - 池化、客户端 checkout 、idleTimeoutMillis,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66362685/

33 4 0