【发布时间】:2017-09-26 08:09:06
【问题描述】:
我正在使用带有 pg-promise 的 Nodejs 快递服务器。我在数据库中有一些查询需要很长时间才能返回结果。对于此类查询,如果查询 pg-promise 查询需要更长的时间并且服务器返回错误,我将超时设置为 3 秒,这会导致承诺失败。但是,问题是如果我发送具有相同(繁重)查询的后续请求,应用程序将挂起并需要时间来开始处理新请求。它不会抛出任何错误,这就是它难以调试的原因。我想知道节点应用程序挂起的原因是什么?
【问题讨论】:
-
不要在大型项目中使用 javascript!!!!
-
@HaykManasyan 这不是一个大项目。这只是对 db 的大查询,它获取许多行
-
我很怀疑人们可以在没有看到您的代码的情况下帮助您。 node.js 没有理由因为长查询而“挂起”。事实上,我什至不知道“挂”的真正含义。如果您正在执行非常耗时的数据库查询,然后当您尝试执行多个查询时,负载太大,那么问题可能与您的数据库或您如何使用数据库有关,这两者都不是 node.js 。 js问题。您需要重新构建数据以便通过更快的查询来实现目标,或者您需要重新考虑您正在尝试做什么。
-
@NaufalKhalid 您可以使用
explain来定位您的问题。您应该了解您的问题是来自 DB 还是来自 Node.JS。 postgresql.org/docs/9.6/static/using-explain.html -
我知道查询很昂贵,因此,我使用 pg promise 设置超时,如果查询时间过长,则返回错误。这是一个示例代码:
return db.any("select * from users") .then(x => { return x }) .timeout(3000) .error(err => { return err})从逻辑上讲,如果查询时间超过 3 秒,此代码应该返回错误。然而,应用程序需要更多时间来处理查询
标签: node.js postgresql express pg-promise