PHP önbelleğe alma

8 Cevap php

Biz PHP ile yazılmış web uygulamaları bir dizi çalıştırın. Ne yazık ki MySQL daha az duyarlı olmasına neden olan katılır bazı oldukça ağır olan bu içinde bazı seçme sorguları vardır.

Bu nedenle biz düzenli olarak katılır kullanılan bazı önbelleğe içine arıyoruz. Ben umut verici görünüyor hangi Zend_Cache içine baktım, daha iyi gerçekleştirebilir başka alternatifler var mı?

Ayrıca ne bir önbellek için en iyi arka uç nedir? Ben Zend_Cache tabanlı SQLite'ı ve Memcached dosyayı sunuyor inanıyorum.

8 Cevap

Hız önemli olduğunda kesinlikle memcached için gitmek gerekir. Ancak çoğu durumda bir filecache veya sqlite önbellek ihtiyaçlarınıza hizmet vermektedir.

Zend_Cache, bu önbelleğe alma çözümleri bir esinti lateron değişen yapar adaptör sistemi bulunuyor, bu yüzden kesinlikle Zend_Cache için giderdim yoluyla da çok sayıda önbelleğe alma mekanizmaları destek olması çok iyi bir önbellekleme kütüphanedir.

Bu sorunu çözmek için, yapardım:

  1. (Endeks eksik, MySQL düzgün ayarlanmamış) neyin yanlış olduğunu kontrol etmek için sorguları profili.
  2. Veritabanı sunucusu gerçekten aşırı ise çıkış (Zend_cache, Cache_Lite, memecached, vb) önbelleğe.

Için (1):

  1. Anlamak için öğrenin: EXPLAIN ....
  2. Anlamak için öğrenin: GÖSTER DURUMU

Lütfen sorguları yavaş neden bu şekilde anlayacaksınız.

Gerçekten bu sorguları yavaş neden olduğunu tam olarak ne bağlıdır, ve sorguları yeniden aynı olanları olup olmadığını, ya da her seferinde farklı iseniz.

Genel olarak konuşursak, başlangıçta sorguları yavaş ve bunları geliştirmeye neden odaklanmak istiyorum. Aynı önbellek girdileri (onlar aynı verileri kullanmak varsayarak) farklı sorgular tarafından kullanılabilir, çünkü veritabanı içinde kullanılan önbellek verimlidir.

MySQL sorgu önbellek ile rahatsız etmeyin, veritabanı sunucusunun ram (Eğer InnoDB kullanarak konum varsayarak) innodb tampon havuz artan kullanılmaktadır iyidir. Bu belirli bir sorgunun sonuçları değişmiş olmasa bile - Sorgu önbelleği ile ana zorluk tabloda tek bir satır değiştirilmiş olduğunda bu tablo için her giriş dışarı atılan olmasıdır.

Yanlış kullanıldığında sorgu önbellek, performansı önemli ölçüde zarar verebilir - ama innodb tampon havuzu genellikle sadece faydalıdır.

Veri çok büyük değilse, ucuz ve düşük riskli bir çözüm ram db sunucu çok satın almak ve verilerin boyutunu aşan innodb tampon havuzu artırmaktır.

İstemci tarafı önbelleklerini ama daha az etkili (eğer bir web sunucu başına bir, örneğin) daha ölçeklenebilir olması, ve (muhtemelen otomatik olarak veri bayat olunca sona ermiş olmayacak) uygulamaya bayat verileri gösterecektir.

Herhangi bir performans şey, testi, test test gibi. Üretim sınıf donanım, üretim gibi veri ve iş yüklerini kullanın.

PEAR'ın Cache_Lite paket (http://pear.php.net/package/Cache%5FLite/docs) ayrıca değerlendirmek isteyebilirsiniz başka önbelleğe çözümdür. Sadece olsa bir dosya tabanlı önbelleği kullanır.

Siz tabii ki yavaş olmak ve onları daha hızlı hale getirebileceğini şey olup olmadığını görmek için kanıtlamaktadır sorguları analiz etmelidir.

http://code.google.com/p/samstyle-php-framework/source/browse/trunk/inc/cache.inc.php bak. Sen önbelleğe (PHP dizi) tablosunu kaydedebilirsiniz, daha sonra kolayca tekrar almak.

Perhaps you could start by checking if MySQL Query Cache is turned on, and if not, enable it. This only requires configuration changes to MySQL, and you don't have to start rewriting or adding caching code to your application.

Bazı performans testleri yapmak ve sorgu önbellek şeyleri hızlandırmak yoksa yeterince diğer önerileri içine bakmak gidin.

Take a look at this blog post for some basic info on query cache: http://www.mysqlperformanceblog.com/2006/07/27/mysql-query-cache/

Eğer sadece bir web sunucusu var ve birden çok sunucu arasında önbellek dağıtmak gerekmez o zaman Zend_Cache için APC panelini kullanabilirsiniz. Bu memcached çok daha hızlıdır.