Mongoose poolSize如何工作

HIT*_*irl 7 performance mongoose mongodb node.js

我正在尝试提高应用程序的性能,并认为创建多个客户端连接是一种很好的做法,以便mongodb可以并行处理查询(每个客户端连接的队列同步处理)

我正在使用mongoose,并阅读连接文档,我看到你可以设置poolSize(默认为5).我没有在我的连接上设置poolize,所以假设它应该是默认值5

var mongoOptions = {
        server: {
            poolSize: Number(process.env.MONGO_POOLSIZE) || 5
        }
    }
mongoose.connect(DATABASE_URL + "?authMechanism=SCRAM-SHA-1", mongoOptions);
Run Code Online (Sandbox Code Playgroud)

跑进db.serverStatus().connections我的mongo客户端,看看下面的回复 { "current" : 9, "available" : 195, "totalCreated" : NumberLong(2058) }

我知道这包括mongo shell连接,但为什么9个当前连接对6?当我断开服务器时,它会按预期降至1.

然后,如果我将poolSize设置为180,我仍然可以获得9个连接与我的设置.

有人可以解释一下

  1. mongoose连接池是如何工作的
  2. 为什么我的poolSize没有被应用,并且
  3. 有多个连接是否意味着我的查询将由mongo db并行处理?或者一个mongoose连接是否意味着一个客户端连接?

小智 6

猫鼬连接池如何工作?

  • 大多数 MongoDB 驱动程序都支持一个参数,用于设置应用程序可用的最大连接数(池大小)。默认池大小因驱动程序而异,对于 Mongoose 来说是 5。但是,Mongoose 可能会打开比poolSize内部使用更多的连接。

为什么我的 poolSize 没有得到应用?

  • poolSize 是 MongoDB 驱动程序为此连接保持打开的最大套接字数。Mongoose 会自动管理 MongoDB 服务器的连接数量。

拥有多个连接是否意味着我的查询将由 mongo db 并行处理?或者一个猫鼬连接意味着一个客户端连接?

  • MongoDB 一次只允许每个套接字执行一项操作。因此,连接池大小可以被认为是驱动程序可以服务的最大并发请求数。