2012-10-17 59 views
2

我有一个非常昂贵的子查询,我用于存储库中的多个查询。Doctrine2 dbal缓存子查询

我想找到一种方法来缓存该子查询,并在其他本机sql查询中使用它的结果。

  1. 我在symfony2项目中使用Doctrine2 DBAL。
  2. 由于子查询的复杂性,需要原生SQL。
 
example: 

select sum(volume) from (expensive_subquery); 

我一直在审查谷歌和Doctrine2文档,但还没有找到一个很好的解决方案在这里。

欢迎使用其他方法,并保留在Doctrine2,Symfony2,SQL框架的范围内。

+0

考虑一下后,再考虑一下,我认为,除了某种能够缓存子查询的能力之外,最好的方法可能是从子查询中在内存中创建一个临时表,并且针对该问题运行其他查询。这是我暂时想要尝试的,但是,我确定缓存会更清晰。 – Roger

回答

0

你有很多选择。我的第一行动作是散列select语句作为键,并将结果存储在memcached或类似的东西中。然后在你的经理之前运行查询。检查密钥/缓存是否存在。如果存在,请使用缓存的结果。如果缓存不存在,请在长查询运行后创建它。此外,您可能需要集成缓存过期。