猫鼬中的 Connection.prototype.useDb() 方法如何在幕后工作?

问题描述 投票:0回答:1

我试图更好地理解 Connection.prototype.useDb() 方法。如果有人能帮助我,我将不胜感激。

1。 useDb() 的猫鼬文档指出:

使用相同的连接池切换到不同的数据库。

这是否意味着如果连接池中有可用的连接

useDb('db1')
会重用连接?换句话说,
useDb('db1')
使用的连接可以被
useDb('db2')
重用吗? 或者该语句只是意味着
useDb('db1')
将在连接池中创建一个新连接并且只能重用
useDb('db1')
已经创建的连接?

2。 useDb() 的猫鼬文档指出:

[options.useCache=false] «Boolean» 如果为真,则缓存结果,因此多次调用 useDb() 同名只会创建 1 个连接对象。

在以下情况下会发生什么(假设

maxIdleTimeMS
等于0,这意味着没有限制,maxPoolSize等于2)? 3. 考虑:

[options.useCache=false] «Boolean» 如果为真,则缓存结果,因此多次调用 useDb() 同名只会创建 1 个连接对象。

并考虑来自 mongodb.com 的this,其中指出:

MongoDB 是同步的,每个套接字使用一个执行线程,这意味着 MongoDB 将在任何时间点对每个套接字执行一个操作。发送到该套接字的任何其他操作都必须等到当前操作完成。

这是否意味着应该在

mydb2
执行的5个查询,使用来自
conn.useDb('mydb2', { useCache: true })
的连接,必须在队列中等待一个接一个地执行?而不是
conn.useDb('mydb2', { useCache: false })
,这意味着它们将在单独的连接上并行执行?

编辑 由于 mongoose 使用 Nodejs mongo 驱动程序的 db 方法 来实现其

useDb
方法,并且由于 documentation for
db()
方法在 mongo 驱动程序中声明:

创建一个共享当前套接字连接的新 Db 实例。

我想这意味着连接池中的每个连接(套接字)都可以共享,无论它们是通过调用

conn.useDb('mydb1')
还是
conn.useDb('mydb2')

创建的
mongodb mongoose database-connection connection-pooling multi-database-connections
1个回答
0
投票

我进行了某些实验,以便能够通过检查它在某些情况下的行为来理解

useDb
是如何工作的。

  1. 似乎如果连接池中有一个可用的连接(套接字)

    useDb
    将重用连接,换句话说,
    useDb('db1')
    使用/创建的连接,可以被
    useDb('db2')
    重用。

  2. 意味着应该在 mydb2 上执行的 5 个查询,使用来自 conn.useDb('mydb2', { useCache: true }) 的连接,必须在队列中等待一个之后执行另一个。

© www.soinside.com 2019 - 2024. All rights reserved.