2012-10-17 58 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或類似的東西中。然後在你的經理之前運行查詢。檢查密鑰/緩存是否存在。如果存在,請使用緩存的結果。如果緩存不存在,請在長查詢運行後創建它。此外,您可能需要集成緩存過期。