Daha iyi performans için önbelleğe alma tablo sonuçlar ...

4 Cevap php

First of all, the website I run is hosted ve I don't have access to be able to install anything interesting like memcached.

Ben HTML tabloları gösteren birçok web sayfaları var. Bu HTML tablolar için veri pahalı ve karmaşık MySQL sorguları kullanılarak üretilir. Ben bildiğim kadarıyla olabildiğince sorguları optimize edilmiş ve performansını artırmak için yerine dizinleri koyduk. Sorun siteme yüksek trafik varsa MySQL sunucu dövülmüş ve mücadeleler gets.

İlginçtir - MySQL tablo içinde veri çok sık değişmez. Aslında sadece birkaç haftada gerçekleşen belirli bir 'olay' sonra değiştirir.

Peki ben şimdi yaptım şudur:

  1. Bir kez dosyaya oluşturulan HTML tablosunu kaydetmek
  2. URL erişildiğinde Varsa kaydedilen dosyayı kontrol edin
  3. Dosya 1 saat daha eski ise, sorguyu çalıştırmak ve çıkış, dosyayı yeni bir dosya değilse kaydetmek

Bu çok hızlı istekleri sayfayı yükler ve verilerin büyük çoğunluğu için en 1saat eski olabilir sağlar. Benim amaç için bu çok kötü değil.

Gerçekten ne istiyorum veritabanındaki herhangi bir veri değişiklikleri, önbellek dosyası silinirse garanti etmektir. Bu could tablo üzerinde herhangi bir değişiklik sorguları tüm komut bulma ve önbellek dosyasını kaldırmak için bir kod ekleyerek yapılabilir, ancak tüm gelecek değişiklikler de bu mekanizmanın dikkat çekmek gerekir gibi çürük bulunuyor.

Is there an elegant way to do this?

Ben vanilya PHP ve MySQL (son sürümleri), ancak bir şey yok - Ben memcached oynamak isterim, ama yapamam.

4 Cevap

Tamam - Ciddi cevap.

Veritabanı soyutlama katmanı herhangi bir tür varsa (umarım olur), herhangi bir şey güncellendi son kez veritabanındaki bir alanı korumak ve soyutlama katmanı tek bir noktadan o yönetmek olabilir.

örneğin (Yalancı): On any update set last_updated.value = Time.now()

Sonra yeniden sorgu gerekiyorsa görmek için zamanında önbelleğe dosyasının zaman bu karşılaştırın.

Eğer bir soyutlama katmanı yoksa, bu her hangi bir SQL güncelleme çağrı Sarıcı işlev oluşturmak ve her zaman gelecekteki işlevsellik için sarıcı işlevini kullanın.

There are only two hard things in Computer Science: cache invalidation and naming things.

-Phil Karlton

Üzgünüm, çok yardımcı, ama sooooo doğru değildir.

Sen kapalı uçları çoğu var, ama bir last_modified alan ve Cron yardımcı olabilir.

MySQL dosyaları silme yolu yok Postgrees size bu tesis verecekti, ama MySQL yapamam.

Sen PHP'nin kullanarak bir dize için çıkış önbelleğe output buffering functions. Google it ve bu nasıl yapılır açıklayan web sitelerinin güzel bir koleksiyon bulacaksınız.

Ben nasıl verileri bir saat sonra sona biliyoruz, ancak merak ediyorum? Yoksa dramatik 60 dakika içinde sabit sayfa nesil gerektirecek veri alışkanlık değişikliği varsayıyoruz?