Uygulama katmanı önbelleğe sonuç kümeleri vs MySQL sorgu önbellek

2 Cevap php

I'm running a php/mysql-driven website with a lot of visits and I'm considering the possibility of caching result-sets in shared memory in order to reduce database load.
However, right now MySQL's query cache is enabled and it seems to be doing a pretty good job since if I disable query caching, the use of CPU jumps to 100% immediately.
Given that situation, I dont know if caching result-sets (or even the generated HTML code) locally in shared memory with PHP will result in any noticeable performace improvement.

Herkes orada bu konuda herhangi bir deneyimi var mı?

PS: memcached gibi ağır topçu çözümler öneren kaçının. Sağ şimdi, uygulamak dağıtmak ve korumak için çok fazla zaman gerekmeyen basit çözümler arıyorum.

Edit:
I see my comment about memcached deviated answers from the actual point, which is whether caching DB queries in the application layer would result in a noticeable performace impact considering that the result of those queries are already being cached at the DB level.

2 Cevap

Ben memcached duymak istemediğini biliyorum, ama yapmak için çalışıyoruz ne için en iyi çözüm bu is biri. Siteniz kullanımına bağlı olarak, performans büyük gelişmeler olabilir. Sadece benim veritabanı oturumu işleyici üzerinde en memcached oturum yönetimini kullanarak, ben yarım yük kesilmiş ve% 30'dan fazla kez hizmet isteği üzerine geri kesmek başardı.

Gerçekçi, memcached basit bir çözümdür. Zaten (eğer uzantısı yüklü varsa) PHP ile entegre ve neredeyse hiçbir yapılandırma (Ben sadece bir ya da iki kabuk komutları yapılır benim linux kutusu üzerinde bir hizmet olarak memcached eklemek zorunda kaldım) gerektirir oluyor.

Ben memcache oturum verilerini (ve önbelleğe alma için kendisini ödünç bir şey) depolamak öneririm. (Örneğin yığın taşması ana gibi) dinamik sayfalar için, ben taşmasını önlemek için birkaç saniye için önbelleğe alma çıktı öneriyoruz.

İyi bir tek kutuda çözüm dosya tabanlı önbelleğe alma, ancak elle dışarı süpürme var. Bunun dışında, siz (yine de olsa bunları kendiniz sona zorunda) çok hızlı ve bellek olan APC, kullanabilirsiniz.

Kısa sürede bir web sunucusu geçmiş ölçek olarak, olsa da, memcached paylaşılan bir önbellek, ihtiyacımız olacak. Neden bunu dağıtma değil hakkında bu kadar kararlılar? Bu çok zor değil, ve sadece yolda size zaman kazanmak için gidiyor. Artık memcache kullanmaya başlayabilirsiniz ya ve onunla yapılabilir, ya da şimdi için yukarıdaki yöntemlerden birini kullanın ve sonra bile daha fazla iş sonuçlanan, daha sonra zaten MEMCACHE geçiş bitebileceğini. Artı, çok sen önbellek süre sonu özellikleri almak için bir cronjob veya diğer bazı çirkin kesmek çalışan ile uğraşmak zorunda değilsiniz: sizin için yapar.

Mysql sorgu önbellek güzel, ama issues olmadan değil. Büyüklerden biri otomatik muhtemelen istemiyorum kaynak veri değişti her zaman, aşımına.