数据库与服务器端处理

时间:2012-02-21 01:43:17

标签: php database postgresql memcached

我目前在postgresql数据库中有2000条记录,每分钟更新一次,用SQL语句过滤。可以存在多达1000种不同的过滤器组合,每分钟可以调用大约500种不同的过滤器。目前,http响应缓存59秒,以减轻服务器负载和数据库调用。但是我考虑在memcached中缓存整个db表并在php中进行过滤。 2000行不是很多但是从内存和数据库获取数据的响应时间会更快。

对于这个行数,php处理时间是否会超过sql过滤的数据库响应时间?在可预见的未来,该表不应超过3000行。

2 个答案:

答案 0 :(得分:4)

与任何与is x faster than y相关的问题一样,唯一真正的答案是为自己进行基准测试。但是,如果数据库已针对您需要执行的查询进行了正确索引,则过滤结果集的速度可能比您编写的大多数PHP代码快得多。

另一方面,RDBMS已经过设计和优化,可用于定位,过滤和排序行。

答案 1 :(得分:1)

PostgreSQL运行的方式,如果你不是非常匮乏它的内存,100%这样一个经常查询的小表将由默认的缓存算法保存在RAM(缓存)中。拥有数据库引擎过滤器几乎肯定比在应用程序中执行相同操作更快。

您可能需要检查postgresql.conf,尤其是shared_buffersplanner cost constants(设置random_page_cost几乎或完全低至seq_page_cost)和{{ 3}}(设置得足够高)。

您可能会从优化索引中受益。有各种类型可供选择。除了普通索引之外,还要考虑effective_cache_size。使用partial indexes, indexes on expression or multi-column indexes进行测试,仅保留实际使用的索引并加快查询速度。由于所有表都驻留在RAM中,因此查询计划程序应计算随机访问几乎或完全与顺序访问一样快。差异仅适用于光盘读取。

在每分钟更新时,请确保以保留任何实际上没有帮助的索引。而且,在这种情况下,经常抽真空和分析它是性能的关键。不是VACUUM FULL ANALYZE,只是VACUUM ANALYZE。或者使用带有调整设置的自动真空。

当然,EXPLAIN ANALYZE的所有标准建议都适用。