发出构建“结果缓存”而不返回结果的SQL请求

时间:2013-03-15 11:15:24

标签: sql performance postgresql caching

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

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

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

作为加速黑客攻击,我在A上发出了SQL请求“稍后”,而我等待用户输入B,这样当用户点击'Page 2'上的提交时,查找结果来自'数据A'已经缓存(节省不耐烦的用户2-5秒)。

我的问题

是否有可能以这样一种方式进行SQL查找:服务器执行查询并缓存它而不返回任何内容,因为我只需要它在缓存中以使最终请求的速度提高2-5秒。

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分: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

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