Bu soru mimarideki en iyi uygulamalar hakkındadır.
Mevcut Mimarimiz
Kullanıcı bilgisi için MySQL erişen bir PHP sınıfı var. Haydi diyelim User
. User
birçok kez erişildiğinden, yükü azaltmak için önbellek katmanları uyguladık.
İlk katman, "istek başına" önbellek dediğimiz şeydir. Veriler MySQL'den alındıktan sonra, verileri özel bir özelliğinde saklarız User
. Veriler için daha sonra yapılan istekler, MySQL'den verileri yeniden istemek yerine özelliği döndürür.
Web isteği isteğe bağlı olarak yaşadığından ve öldüğünden, bu önbellek uygulamanın MySQL'e tek bir istekte yalnızca bir kereden fazla erişmesini önler.
İkinci katmanımız Memcached. Özel mülk boş olduğunda, önce veriler için Memcached'i kontrol ederiz. Memcached boşsa veriler için MySQL'i sorgularız, Memcached'i günceller ve User
.
Soru
Uygulamamız bir oyundur ve bazen bazı verilerin olabildiğince güncel olması zorunludur. Yaklaşık beş dakika içinde, kullanıcı verileri için bir okuma talebi 10 veya 11 kez olabilir; bir güncelleme olabilir. Sonraki okuma isteklerinin güncel olması veya oyun mekaniği başarısız olması gerekir.
Yani, yaptığımız şey bir veritabanı güncellemesi gerçekleştiğinde yürütülen bir kod parçasını uygulamak. Bu kod, güncellenmiş verilerle Memcached'da anahtarı ayarlar, böylece Memcached'a gelen tüm istekler günceldir.
Bu uygun mu? Bunun gibi bir "yaşayan önbellek" tutmaya çalışırken dikkat etmemiz gereken herhangi bir performans kaygısı veya başka "gotchas" var mı?