2014-02-19 95 views
0

場景:在我的PHP slim應用程序中,我有一個用於驗證的類,如果通過,我使用「控制器」來執行REST風格的更新。Doctrine ODM Document Reuse

我的問題是:如果我執行查詢,然後在代碼的不相關部分執行查詢,返回一些/所有相同的文檔。教條文檔管理器是否重用以前檢索的文檔?

在此先感謝! Ben

+0

您的應用程序是否在整個應用程序中使用相同的DocumentManager實例?我感覺DM一旦檢索到它們就將對象保存在內存中。但是,如果應用程序的這兩部分之間沒有共享,那麼用處不大。 – Etzeitet

+0

是的,它是同一個文件管理器,這讓我覺得這些文件可能會持續執行當前的執行..? – Ben

+0

您必須檢查,但是如果DM在應用程序的兩個部分之間共享,並且不相關的代碼與第一個查詢在相同的請求中運行,那麼DM應該已經將這些文檔存儲在內存中。但是,我不知道如果第二個查詢包含尚未存在於內存中的文檔會發生什麼情況,即Doctrine是僅獲取缺少的文檔,還是隻是再次抓取所有文檔? – Etzeitet

回答

0

學說可以擴展爲使用像Redis這樣的對象緩存來減少對數據庫的訪問次數。

我們還在我們的數據訪問層添加了代碼以減少查詢 - 這是來自Doctrine的上游。

+0

有關教義緩存的更多細節在這裏:http://docs.doctrine-project.org/en/2.0.x/reference/caching.html – BillyBigPotatoes

+0

我實際上已經在學說層面使用APC ......雖然我並不是'不確定是否存儲key =>值對或編譯的PHP。 – Ben

+0

APC提供了一個PHP字節代碼緩存,它也提供了一個基於內存的鍵/值緩存。這是一個平衡的行爲 - 如果您使用多個服務器/有大量數據,我們更喜歡使用像redis或memcache這樣的專用對象緩存。 – BillyBigPotatoes