0

我有一个无状态的网络服务器,需要 2 组用户输入来进行计算:

第 1 页:获取输入 A
第 2 页:获取输入 B
第 3 页:从用户输入 A 和 B 计算的结果

碰巧我的应用程序中的瓶颈是与用户输入 A 相关的查找。

作为加速技巧,我在 A 上发出“第 3 页”稍后会执行的 SQL 请求,同时等待用户输入 B,这样当用户单击“第 2 页”上的提交时,“数据 A”的查找结果已缓存(为不耐烦的用户节省 2-5 秒)。

我的问题

是否可以通过服务器执行查询并将其缓存而不返回任何内容的方式进行我的 SQL 查找,因为我只需要它在缓存中以使最终请求快 2-5 秒。

4

2 回答 2

2

PostgreSQL 没有结果缓存,所以你不能预热它。

确实有一个磁盘缓存。要预热它,您可以只运行SELECT丢弃结果的语句。使用 PL/PgSQLPERFORM语句、无意义的聚合等。搜索“postgresql pre-warm cache”可能会提供信息。

您可能还想查看物化视图。PostgreSQL 还不支持物化视图,但您可以使用触发器和脚本来模拟它们。正在进行补丁以添加正在进行的物化视图支持。

于 2013-03-15T11:27:46.403 回答
1

如果结果不大,最好将用户状态保存在服务器端会话中。


更新:

这是数据库存储会话适合的情况之一(多个 Web 服务器与单个数据库服务器)。

保存结果:

insert into temp_result (session_id, a, b)
select %(session_id)s, a, b
from t

检索它:

select a, b
from t
where session_id = %(session_id)s

当会话过期或超时后删除它。

于 2013-03-15T11:31:29.413 回答