【问题标题】:Where to initialize a new database connection in nodejs?nodejs在哪里初始化新的数据库连接?
【发布时间】:2016-12-25 20:51:48
【问题描述】:

您应该在路由处理程序范围之外创建一个数据库连接实例,还是为每个处理程序创建一个实例(例如,app.get('/todos'))?

如果我错了,请纠正我,但我猜第一种方法更好,因为它可以重用相同的连接。但是,我已经看到了为每个路由处理程序创建一个的其他示例。

推荐的方法是什么?还是因为数据库如何缓存连接而有关系?

编辑:我可能对数据库驱动程序的连接方式感到困惑。大多数都提供诸如connectDB(config)之类的方法,您可以在其中指定资源的位置、身份验证等。这实际上是在建立连接还是在您实际使用该数据库对象请求某些内容时启动连接?

【问题讨论】:

  • 最佳实践是在路由处理程序范围之外创建数据库连接,如果您为每条路由创建数据库连接,那么您会增加内存消耗,并且在规模上会降低系统性能。

标签: node.js database express


【解决方案1】:

您应该建立一次连接并在所有处理程序中使用它。

如果您在每次请求时都重新连接到数据库,那么您将使用大量资源并增加延迟,更不用说用无用的重新连接来重创您的数据库了。

数据库连接是持久的,而不是一次性的。

你没有说你使用哪个数据库,但在 Mongo 的例子中 - 当你使用本机连接到数据库时 MongoDB Node.js Driver 您可以使用一些选项,例如:

  • poolSize - 为每个单独的服务器或代理连接设置最大 poolSize(默认为 5
  • autoReconnect - 出错时重新连接(默认为 true

其他一些有趣的选项是:reconnectTriesreconnectIntervalkeepAliveconnectTimeoutMSsocketTimeoutMS

如果您对默认设置不满意,您可以更改这些选项的值,但这些选项用于管理长期连接,而不是在每次请求时重新连接和断开连接。

更多信息见:

有关更多信息,另请参阅此答案:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-24
    • 1970-01-01
    • 1970-01-01
    • 2014-04-27
    • 2015-06-27
    • 1970-01-01
    • 1970-01-01
    • 2023-02-04
    相关资源
    最近更新 更多