【发布时间】:2018-08-10 08:40:54
【问题描述】:
好的,所以这基本上是一个是/否的答案。我有一个在 Heroku 上运行的节点应用程序,带有 postgres 计划。我使用 Objection.js 作为 ORM。 我在大多数端点上都面临 300 多毫秒的响应时间,我有一个关于为什么会这样的理论。我想确认一下。
我的大多数 api 端点都会执行大约 5-10 次急切加载。 Objection.js 通过执行额外的 WHERE IN 查询而不是通过执行包含大量 JOINS 的大查询来处理急切加载。这样做的原因是这种方式更容易构建,并且不会对性能造成太大影响。
但这让我想到:Heroku Postgres 不像我假设的节点应用程序那样运行在同一个 heroku dyno 上,所以这意味着每个查询都有延迟。会不会是所有这些延迟加起来,总共造成了 300 毫秒的延迟?
总结:如果您有单独托管的数据库,使用 Knex 构建您自己的查询而不是通过 Objection.js 生成查询会更快吗?
【问题讨论】:
-
你可以尝试在postgres上开启slow_log_query,看看是查询慢还是只是因为网络延迟。
-
Heroku 有一个用于耗时查询的特殊仪表板。我现在正在看,没有查询时间超过 1 毫秒
-
我对 heroku-postgres 没有太多经验。但是,如果您的应用程序和数据库之间存在网络延迟,这是绝对正确的,与 1 个主查询和 5-10 个子查询相比,1 个大查询必须是一个很大的优化才能取回数据。 Morover,由于网络延迟,如果您可以减少通过网络发送的有效负载大小(选择要查询的列),这也是一个重大的优化。
标签: node.js postgresql knex.js heroku-postgres objection.js