2015-01-12 62 views
8

Bir Symfony2 proje üzerinde çalışıyorum. Projem, verileri saklamak için veri tabanı ve bu verileri almak için Doctrine2'yi kullanıyor. veritabanı içinde veri olarak Caching Doktrini sonuçları Symfony2'nin

sorguları çok yavaş oldu büyüdü ve bütün web uygulaması yüklemek için yaklaşık 2 dakika sürer veya hiç yüklemez. Görebildiğim

tek yol benim öz bu bazı sorgular sonuçları önbelleğe almak olduğunu tespit ama bunu nasıl yapabiliriz. Böyle bir sorunla uğraşmanın farklı bir yolu olmadığı sürece.

+0

yapılmaktadır kaç? Bunu Symfony2 araç çubuğunda görebilirsiniz. Bu çok büyük bir rakam (100 say) ise, sizin deposundaki fonksiyonları oluşturarak bu sayısını azaltabilir ([rastgele örnek] (http://stackoverflow.com/a/27907665/2257664)). –

cevap

16

Önbellek sürücünüzün configuration doktrininde kurulu ve yapılandırılmış olması gerekir (sizin durumunuzda result_cache_driver önemlidir). Bunu yaptıktan sonra, useResultCache(true)

$cachedResult = $doctrine->getManager() 
    ->createQueryBuilder() 
    ->(...) 
    ->useResultCache(true) 
    ->(...) 

Kontrol this blog post

NOT ayarlayarak sonuç önbellek kullanımı Doctrine yapabilirsiniz: Varsayılan olarak, dev ortamında, sonuç önbellek kullanılmayacaktır

EDIT: DBAL kullanıyor ve ORM kullanıyorsunuz - SymfonyDoctrineBundle bu tür bir önbelleği kutunun dışında desteklemez, ancak bunu ekleyebilirsiniz. Geliştirici modunu Symfony2'de this ayrıntılı bir kılavuz

+0

Dzieki..Buna bakacağım, biraz olsun sonuç verir vermez sana döneceğim. – Tomazi

+1

Hızlı soru, kullanıcı oturumu başına bu önbellek olacak veya globaly önbelleğe alacaktır ..? – Tomazi

+0

ya da bunu DB '/ ** * @Cache (expires =" + 5 dakika ", public = true) sorgulaması için sınıfımın en tepesinde yapabilir miyim? * /' – Tomazi

0

izleyerek kendiniz destek, her sorguda yeni bir önbellek oluşturur. Bu yüzden birçok sorgunun olduğunu varsayalım, o zaman tüm sorguları tek tek önbelleğe alacaktır. Üretim modunda önbellek sadece bir kez depolanacak çünkü

Bu, üretim modunda daha uzun sürer. SQL sorguları

+0

Yep Anlıyorum ama yopu ilk üretim moduna geçmek için önbelleği temizlemek zorunda – Tomazi

+0

sorun becerememek geliştirme ve üretim ortamında var ..! php app/konsol yardımcısı: döküm –