Ben geldi MVC önbelleğe alma ve fiili uygulama ile ilgili bazı sorular hakkında bir related question bazı yorum gönderme yapıldı. Nasıl bir el önbellek, henüz hala etkili olmaya devam gerek geliştirici olmadan şeffaf çalışır Model-seviye önbellek uyguluyor?
I would keep my caching responsibilities firmly within the model. It is none of the controller's or view's business where the model is getting data. All they care about is that when data is requested, data is provided - this is how the MVC paradigm is supposed to work.
(Kaynak: Post by Jarrod)
Önbelleğe gerçek bir ihtiyaç olmadıkça genellikle yapılmamalı ve arama sonuçları gibi şeyler için yapılmamalı çünkü şüpheci nedenidir. Yani bir şekilde Model kendisi kendisine tanzim edilmekte SELECT deyimi önbelleğe layık olup olmadığını bilmek zorundadır. Model çoğunlukla doğru bir karar yapmak için uzun bir süre boyunca sorgulanan ediliyor ne istatistikleri astronomik akıllı, ve / veya mağaza olmak zorunda değil misiniz? Ve tüm bu yükü zaten önbelleğe alma yararsız yapmaz mı?
Nasıl benzersiz (daha doğrusu, başka bir sonuç kümesindeki sonucu) başka bir sorgudan sorgu belirlemek istiyorsunuz? Ne kullanıcı girişine göre değişen sadece parametreleri ile, hazırlanmış deyimleri kullanarak eğer hakkında?
Başka bir poster bu dedi:
I would suggest using the md5 hash of your query combined with a serialized version of your input arguments.
Çarpışma ufacık şans endişesi değer mi?
Kavramsal olarak, Modeli'nde önbelleğe alma benim için iyi bir fikir gibi görünüyor, ama pratiklik görünüyor nedeniyle geliştirici önbelleğe doğası kontrolör mantığı içine doğrudan denetimini ve explicity kodu o olmalıdır.
Update for Bounty
Ben gerçekten ActiveRecord biraz benzer bir derece hafif ORM kullanarak ancak karmaşık n^2
sorun olmadan katılır ve alt sorgular yapma yeteneğine sahip olduğunu duyuyorum. Ben kendim inşa edilmiş, böylece esnek ve ilişkiler veya sütun adları açısından kısıtlayıcı değil, ve ben sadece önbelleğe alma mekanizması uygulamaya nasıl anlamak istiyorum.
Yardımsever insanların tavsiyesine uyarak, ben onun bir parametre listesi ile birleştirilmiş sorgu bir karma (muhtemelen md5) alacağını ve söz konusu veri deposu için anahtar olarak kullanabilirsiniz. Bunu gerektiren Model sınıfların ayrı ayrı önbelleğe alma uygulamak gerektiğini, ya da ORM katmanın parçası olmalıdır?
Bunun geçersiz gerektiği zaman nasıl anlarım? Ben GÜNCELLEME ayrıştırmak gerekir / manuel hangi kayıtların modifiye ediliyor öğrenmek için parametreleri / INSERT sorguları ve alt SİL? Ya da daha kötüsü, veri işler değişti ve ne geçersiz gereken izlemek için ek sorgular değiştirilmiş mı ne zaman?
Bana (bu şeffaf yapılacak verimli / gerçekten gerekli olup olmadığını) açık kavramsal bir açıklama verebilir kim için lütuf ödül, ve eğer öyleyse, Model önbelleğe alma için bazı uygulama ayrıntılarını vardır olacaktır. Sizin odak daraltmak için yardımcı olur, ben PHP ve MySQL kullanıyorum.