首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PostgREST JSON字段序列化性能

PostgREST JSON字段序列化性能
EN

Stack Overflow用户
提问于 2020-06-30 12:03:09
回答 2查看 942关注 0票数 1

在Postgres中,我有一个表,它运行一个函数来返回最上面的结果。这个函数需要使用2ms来完成没有缓存数据的,这正是我所需要的。

然后,我将PostgREST放到混合中,因为我需要一个HTTP,它允许服务运行这个函数并使用它的结果。

当我对PostgREST API做卷曲时,响应时间为0.29秒,为290 is,速度慢得离谱。

为什么PostgREST这么慢?

设置

Postgres 12和PostgREST 7.0.1运行在同一台机器上,我的请求来自同一台机器,因此网络延迟应该很小。

代码

代码语言:javascript
复制
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
代码语言:javascript
复制
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;
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-07-02 12:30:22

您正在将查询速度(在postgresql客户机中)与“查询速度+ db连接时间”进行比较。也就是说,当您执行curl请求时,除了运行查询之外,postgrest还需要连接到数据库,这需要时间。默认情况下,连接在10 s后关闭(查看db池超时)。这就是为什么您的第一个调用是慢的,而第二个是快速的(与查询缓存计划无关)。如果您发出一个curl请求(第一个请求)--它将是缓慢的,第二个请求(如果是在后面立即发出)--它将是快速的,然后等待10-15s并发出第三个请求,您将看到它将再次慢下来(因为db连接已经关闭)。您想要的是将db池超时调整为30米,所有的调用都会很快(除了第一个)。

票数 3
EN

Stack Overflow用户

发布于 2020-06-30 13:39:44

这看起来像是网络问题。您自己说过,该函数正在DB中高效地运行。似乎运行curl的计算机与为Rest服务的计算机之间的网络延迟很高。或者,如果jsonb列非常大,则可能与网络带宽有关。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62657008

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档