Uzak MySQL stres almak için PHP ile önbelleğe alma

4 Cevap php

Benim uygulama için bir web hizmeti yazma ve ben alabilirsiniz istekleri muhtemelen ton işlemek için en iyi yolu bilmek istiyorum değilim. Verilerin çok muhtemelen gün boyunca değişmeyecek ama ben yazıyorum belirli komut verileri dikkate muhtemelen script son istek olarak aynı olacaktır biraz aşırı görünüyor 3 MySQL sorguları yapar, ve eğer o değil aynı o hiç önemli değil.

Ben bir dosyaya çıktı XML / JSON kaydetmek ve daha sonra gün boyunca isteyene bu hizmet ve sonra ertesi günün ilk istek üzerine yaz eğer çok daha iyi performans olacak? Bunu yapmanın en iyi yolu nedir?

Joomla ve phpBB bilmek ve gibi birçok MySQL sorguları yapmak değil şekilde diğer MySQL yoğun uygulamaları önbelleğe alma kullanmayın, yani bu beni düşünme var budur.

EDIT - Ben Windows olduğumu söylemeyi unuttum / IIS 7.0

4 Cevap

Eğer ihtiyacınız kadar önbelleğe alma hakkında muck etmeyin. Memcache çok sık bir erken optimizasyon ve son değil, ilk çare olmalıdır. Önbelleğe bu tür ekleme karmaşık tutarlılık sorunlara neden olabilir.

Veritabanları düz dosyaları önbelleğe alınan veriler bir sürü yükleme daha yavaş doğası gereği yavaş ve kesinlikle değildir. Ama kötüye yavaş olabilir. Her türlü-sayfa-sorgulardan biri bir MyISAM tabloya yazma yapar, ya da yok Örneğin bir Sıralanmayan sorgu veya sorguları biri sadece karmaşık ve zordur. İlk şema tespit ederek bu durumları saldırı.

Hızlı ve kirli bir şekilde bu gibi bir şey olurdu.

1. create a cachefilename for this specific url
2. check if such a file exists in the cache directory and if it is younger than n minutes

2.1 if not: 
2.2 // business logic goes here => Save output e.g. in a variable $output
2.3 save contents of $output in cachefilename
2.4 echo $output

3. if so:

3.1 $output = file_get_contents(cachefilename)
3.2 echo $output

Bu memcache veya memcached gibi zarif olmayabilir, ama hemen hemen her yerde kullanabilirsiniz.

Memcached harika ama niyet için bir overkill biraz olabilir. Martin tarafından sunulan gibi bir dosya tabanlı önbelleğe alma yaklaşım sadece iyi çalışır. Orada PHP için dosya bazında hazır önbelleğe kütüphanelerin bir dizi var.