+ Yanıtla
Toplam 9 sonuçtan 1 ile 9 arası olanlar

Konu Başlığı: PHP ile sayfaların önbelleğe alımı hakkında.

  1. #1

    PHP ile sayfaların önbelleğe alımı hakkında.

    Merhaba arkadaşlar;

    PHP ile programlanmış ve yoğun MySQL sorgularının çalıştırıldığı web sitelerinde sayfaların önbelleğe aldındığını biliyorum. Yani tekrar tekrar MySQL sorgusu yapılmıyor ve sistemi çok yormuyor.

    Önbelleğin alındığını biliyorum ama sistemi bilmiyorum. Yani önbellek nereye, nasıl alınıyor ve gerektiğinde sayfaların geri çağrımı nasıl oluyor bunu merak ediyorum.

    Cevaplar için teşekkür ederim şimdiden. İyi çalışmalar...


  2. #2
    merhaba,

    sorudan anladığım kadarıyla sizin istediğiniz veritabanı sorgularından dönen sonuçları cachelemek. bunun için en popüler cache serverlarından biri memcached. detaylı bilgiyi sitesinden alabilirsiniz: http://www.danga.com/memcached/

    kabaca bu tip sistemlerin nasıl çalıştığını anlatayim. cache server'ı çalıştırırken ihtiyacınıza göre bir alanı memory'den (bellek) ayırıyorsunuz. mesela 128MB. genellikle 2'nin kuvvetlerine göre yer ayırmak daha iyi bir seçim olur. (64,128,256,512 ...) daha sonra kaydetmek istediğiniz veriye bir unique key (anahtar) vererek veritabanından gelen sonuçları tercihen array şeklinde kaydediyorsunuz. kaydederken verilerin ne kadar süreyle bellekte tutulacağını da belirtiyorsunuz. mesela 1 saat. tabi illa veritabanı kayıtlarını saklamak durumunda değilsiniz, bellekten hızlıca ulaşmak istediğiniz her türlü veriyi saklayabilirsiniz. veriye tekrardan ulaşmak istediğinizde daha önce verdiğiniz unique key ile tekrardan çağırıyorsunuz. tüm bu işler için birçok dilde hazır kütüphaneler ve fonksiyonlar mevcut. veritabanından gelen verilere unique key (anahtar) atarken direkt olarak SQL kodunun kendisini kullanabilirsiniz. cache server'lar başka bilgisayarlarda olabileceği gibi ihtiyaca göre birden çok da olabilir.

    sözün özü, bu tip cachelemeler tek yönlü olarak sıkça erişilen verileri bellekte saklama prensibine dayanıyor. tek yönlüden kasıt şu; cache server'da herhangi bir veride değişiklik yaparsanız veritabanında da yapmak zorundasınız. fakat senkronize bir cache mekanizması kullanacak olursanız cache'deki değişiklikler periyodik ve otomatik olarak veritabanına da işlenebilir.

    verilere anında ve hızla ulaşmanın dışında ihtiyaca göre daha basit cacheleme mekanizmaları da üretebilirsiniz. mesela periyodik olarak çalıştırılan raporlama sorgularını (günlük, haftalık, aylık, yıllık ...) bellekte tutmak pek de yararlı olmaz. bunun yerine ilgili sorguları 1 kez çalıştırıp, XML olarak sonuçları diske yazdırabilirsiniz.

    ayrıca PHP script caching için zend accelerator gibi cache engine'ler de var.

    kolay gelsin..
    bet3 ~web 2.0, teknoloji ve kişisel beğeniler üzerine
    blogküme ~bloglararası destek şebekesi

  3. #3
    Tekrar merhaba, ilginiz için teşekkür ederim ilk başta...

    Anladığım kadarıyla cache serveri farklı şekilde kiralıyoruz. (belki de yanlış anladım bilmiyorum)

    Yazınızın sonunda XML'e yamaktan bahsetmişsiniz. Bu XML sitemizin çalıştığı sunucu da olacak sanırım. Aklıma takılan XML'deki verileride okurken yine sorgu olmayacak mı ? Ya da bir çok sayfayı bir XML içinde mi tutacağız ya da her sayfaya bir XML şeklinde mi olacak yapı ?

    Sorular fazla oldu biraz ama kusura bakmayın

  4. #4
    cache serveri farklı şekilde kiralayada bilirsiniz ama pek gerekte yok. aynı sunucuda da cacheleyebilirsiniz.

    XML e yazmak farklı bir cache olayını bahsetmiş ve yararlı olmadığınıda belirtmiş zaten.

    kayıtları dosyadan okumak MySQL den çekmeden daha hızlıdır. çünkü MySQL işlemciyi kullanıyor. dosya ise belleği kullanıyor.

    kısaca fark bu.

  5. #5
    merhaba,

    cache server farklı olarak kiraladığınız bir server değil aslında. kendi serverınıza kurduğunuz bir program diyebiliriz. bu durumda shared/managed paylaşımlı hosting servislerine kurmanıza genelde müsade edilmez. dolayısıyla kendinize ait vps, dedicated server benzeri bir servisiniz varsa cacheleme motorlarını kurup, ayarlarını yaparak kullanabilirsiniz. umarım anlatabildim.

    evet, XML sitenizin olduğu sunucuda bulunacak. hayır, ekstra bir sorgu olmayacak. olmaması daha mantıklı olur. sorgu en başta 1 kez, MySQL servera yapılır. çıkan sonuçlar bir XML dosyasına yazılır. her seferinde MySQL serverı sorgulamak ortalama 1sn sürüyorsa, aynı sonuçları direkt XML dosyasından okumak saniyenin binde birinde gerçekleşecektir. tabi burda söz ettiğim sistem kaynaklarını yoğun olarak kullanan raporlama sorguları. sürekli ve değişken sonuçlar döndüren sorguları XML'e yazdırmanın bir anlamı yok. aradaki farkı kavramak da önemli. XML yapısının nasıl olması gerektiği size kalmış. her raporun sonucunu ayrı bir XML dosyasına yazdırmak daha mantıklı olur. daha sonra verileri tekrar okurken hazır library'ler yardımıyla XML'i parse edip okuyabilirsiniz.

    XML ile diske yazıp cacheleme olayı standart veri listelemeleri için kullanılacak bir yöntem değil. bunlar düzenli raporlamalar için daha iyi olabilir. eğer bunların mantığını anlamıyorsanız başlangıç seviyesi uygulamalara bakarsanız daha iyi olur zira böyle aklınızı daha çok karıştırmış olabilirim

    kolay gelsin..
    bet3 ~web 2.0, teknoloji ve kişisel beğeniler üzerine
    blogküme ~bloglararası destek şebekesi

  6. #6
    Alıntı mahmuttt tarafından gönderilen mesaj: Mesajı Göster
    cache serveri farklı şekilde kiralayada bilirsiniz ama pek gerekte yok. aynı sunucuda da cacheleyebilirsiniz.

    XML e yazmak farklı bir cache olayını bahsetmiş ve yararlı olmadığınıda belirtmiş zaten.

    kayıtları dosyadan okumak MySQL den çekmeden daha hızlıdır. çünkü MySQL işlemciyi kullanıyor. dosya ise belleği kullanıyor.

    kısaca fark bu.
    XML'e yazıp diskte tutmak bazı durumlar için yararlı olabilir. "yararlı değildir" demek yanlış olur.

    ek olarak "çünkü MySQL işlemciyi kullanıyor. dosya ise belleği kullanıyor." cümlesi tamamen yanlış. lütfen bilgi sahibi olmadığınız konularda bilgilendirme yapmaya çalışmayınız. insanları yanlış yönlendiriyorsunuz.

    MySQL sunucu hem cpu, hem disk, hem de belleği kullanır. dosyalar ise direkt olarak diskten okunup, buffer'a alınır. özel bir istekte bulunmadıysanız bellekte tutulmaz.

    duruma göre MySQL'den veri almak, diskteki dosyayı okumaktan daha hızlı olabilir. zira veritabanı sistemleri kendi içerisinde birçok optimizasyon ve cacheleme mekanizmasını da beraberinde bulundurur.
    bet3 ~web 2.0, teknoloji ve kişisel beğeniler üzerine
    blogküme ~bloglararası destek şebekesi

  7. #7
    Değerli ve açıklayıcı bilgileriniz için teşekkür ederim...

    SQL Caching - Nasıl Yapılır?

    Forumu araştırırken şöyle bir makale buldum.Bana ve bu konuda bilgisi eksik olan arkadaşlara faydalı olacağına inanıyorum

  8. #8
    kusuruma bakmayın ben öyle hatırlıyordum.

  9. #9
    Zend framework'un Zend_Cache modülünü, framework'den bağımsız olarak kullanabilirsiniz.

    İhtiyacınız nesne, fonksiyon, veritabanı ve / veya ki sizin muhtemel ihtiyacınız olan output caching olsa da hepsini destekler.

    Ayrı sunucu, donanım, kurulum vb. gerektirmez. Modülü kullanmayı öğrenmek biraz zamanınızı alabilir ama görüntülenme sayısı yüksek sayfalarda cevap zamanı (output caching'de) 10 milisaniyelere kadar iner. Nispet yapmak gibi olmasın ama forum.zoque.net anasayfası 767 milisaniyede cevap verdi.
    Spoiler:
    imzaya sponsor?

+ Yanıtla

Bu konu başlığı için etiketler

Mesaj Seçenekleri

  • Yeni başlık açamazsınız
  • Cevap yazabilirsiniz
  • Dosya ekleyemezsiniz
  • Mesajlarınızı değiştiremezsiniz