小编Rya*_*yan的帖子

具有多个查询的 NodeJS mysql 连接池

我对 NodeJS 相当陌生(来自 PHP 背景)。与 PHP 的阻塞性质相比,我对 NodeJS 的异步性质有基本的了解。我创建了一些连接到 mysql 的应用程序节点并让它们正常工作。

我目前对在 Node 中执行查询的最佳方式的理解是:

  • 创建连接池
  • 当您需要执行查询时:
  • 从池中获取连接()
  • 执行查询
  • .release() 连接

我处于需要迭代大量项目并将每个项目插入数据库的情况。执行上述操作无效。我的想法是,由于每个查询都是并行执行的,列表中的下一项正在尝试获取连接,但由于之前的查询可能尚未完成,因此没有可用的。没有抛出任何错误,只是似乎没有放入项目。通过日志记录,我发现它从未达到运行 pool.getConnection() 回调的程度。

所以我我可以修改连接流程:

  • 创建连接池
  • 当您需要执行多个查询时:
  • 从池中获取连接()
  • 迭代需要查询的项目
  • 执行查询
  • .release() 连接

问题是,我怎么知道 .release() 我的连接什么时候是安全的?我不能只在我的 .query() 回调中执行此操作,因为之后可能会有更多查询。但我也不能在查询回调中执行此操作,因为我知道我需要等待所有查询完成。我是否负责创建自己的逻辑来确定所有查询(以及所有可能的未来查询,即使它们尚未启动)何时完成?或者这只是没有完成的事情?

在 PHP 中,这将是微不足道的,因为它具有阻塞性质。我选择在这个应用程序中使用 NodeJS,因为它有时确实需要异步。但它在我的应用程序不需要的地方强制我使用异步(在某些情况下不应该使用它)。

我不愿发布我的代码,因为它有点复杂,所以我不想分散这个特定主题的注意力。

mysql asynchronous connection-pooling node.js

2
推荐指数
1
解决办法
5411
查看次数

标签 统计

asynchronous ×1

connection-pooling ×1

mysql ×1

node.js ×1