connect()vs createConnection()

时间:2016-11-26 11:48:24

标签: mongoose

我是使用mongoose的新手,想知道mongoose.connect()mongoose.createConnection()之间的根本区别是什么,特别是一般情况下,当使用另一个时要考虑的事项是什么

我对官方文档的理解是,通常只使用一个连接mongoose.connect(),而如果使用了多个连接实例mongoose.createConnection()

希望有人能够澄清更多相关信息。

另外,如果我的理解是正确的,那么在单一连接中使用mongoose.createConnection()有什么缺点?为什么我们不建议每个案例使用mongoose.createConnection()来标准化连接?

1 个答案:

答案 0 :(得分:9)

  

我对官方文档的理解是,通常只有一个连接使用mongoose.connect(),而如果有多个连接实例,则使用mongoose.createConnection()。

是的。确切地说,.connect()实际上会创建一个套接字/连接池(在连接设置中的poolSize中定义,默认值为5),它保持打开状态,因此实际上有多个连接,但是在一个连接中池。 话虽如此,如果您想要具有不同属性的多个连接池,则应使用createConnection

  

此外,如果我的理解正确的话,   在单连接中使用mongoose.createConnection()?为什么不是   建议我们对每种情况使用mongoose.createConnection()   标准化连接?

这是一个很好的问题,docs中也已经有一个答案:

  
    

当您调用mongoose.connect()时,Mongoose将创建一个默认连接。您可以使用mongoose.connection访问默认连接。

  

基本上.connectcreateConnection的一组(主要是)最佳实践设置的简写

在大多数简单项目中,您不必担心指定不同的读取或写入设置,池大小,到不同副本服务器的单独连接等,这就是.connect存在的原因。

但是,如果您有更高的要求(例如,出于法律或性能方面的原因),则可能必须使用createConnection

几周前,我遇到了一种情况,我的一个(内部)统计数据包需要零星的数据库访问,但负载很大。由于我不想将db / mongoose对象传递给包以使其尽可能保持模块化,因此我创建了一个新连接。这非常有效,因为我只需要访问我在程序包中定义的某个模型,而无需访问在我的“父”程序包中定义的模型。由于新软件包仅需要读取访问权限,并且可以从其他从属/副本数据库中读取数据,从而减轻了主软件包的负担,因此我在两端切换到createConnection,以将连接与主软件包分开。

对我来说,在同一问题中创建多个连接的最大缺点是,如果它们是在“不同”连接中定义的,则无法通过mongoose.model直接访问模型。该答案详细说明了该问题:https://stackoverflow.com/a/22838614/2856218