【发布时间】:2020-06-30 12:03:09
【问题描述】:
在 Postgres 中,我有一个表,我运行一个函数来返回最高结果。这个函数大约需要 2ms 才能完成,没有缓存数据,这是我所需要的。
然后我将 PostgREST 加入其中,因为我需要一个允许服务运行此函数并使用其结果的 HTTP API。
当我对 PostgREST API 进行 curl 时,我得到 0.29 秒的响应时间,这是 290 毫秒,而且慢得离谱
是什么让 PostgREST 这么慢?
设置
Postgres 12 和 PostgREST 7.0.1 在同一台机器上运行,我的请求来自同一台机器,因此网络延迟应该很小。
代码
curl -d rating_min=5 -d rating_max=8 http://localhost:7045/rpc/get_json_data -w " %{time_starttransfer}\n"
> [{"json": {"name": "Friend"} }] 0.291
CREATE TABLE my_json_data (
"json" jsonb NULL,
mtime timestamp NULL,
rating float8 NULL
);
CREATE OR REPLACE FUNCTION get_json_data(rating_min float, rating_max float)
RETURNS TABLE(
"json" jsonb
) AS
$$
SELECT "json"
FROM my_json_data
WHERE rating BETWEEN rating_min and rating_max
ORDER BY rating
LIMIT 1
$$ LANGUAGE SQL IMMUTABLE;
【问题讨论】:
-
仅供参考 - 您的函数需要返回
jsonb而不是json。写的会创建失败,抛出error: pq: 42P13: return type mismatch in function declared to return json -
谢谢比尔,修正了那个错字
-
Hmm...the docs 仅声称“在 Heroku 免费套餐上,响应时间高达 2000 个请求/秒的亚秒响应时间”。
-
让我看看; 1) 向服务器发送请求。 2) 处理请求 3) 查询数据库并返回结果 4) 发回响应。我认为你需要打破延迟蔓延的地方。
-
@BillJetzer 不幸的是,我无法将其部署到 Heroku,因为他们在非洲没有任何地区。在性能方面,每秒 2000 个请求意味着响应时间为 0.5 毫秒。所以理论上我所看到的不应该发生。
标签: postgresql postgrest