2009-09-07 12 views
7

$ _SESSION dizisindeki her sayfa yüklemesinde kullanılan (A) önbellek verilerine "daha iyi" (daha verimli, daha hızlı, daha güvenli, vb.) Veriler (ancak verileri yeniden yüklemek için bir bayrak için hala sorgulama)) veya (B) her seferinde veritabanından yüklemek için?PHP SESSION'taki önbellek verileri veya her seferinde db sorgusu var mı?

Önbellek yöntemini (A) kullanıyorum, ancak yüzlerce kullanıcıyla bellekte sorun olabileceğinden endişeleniyorum. Bu, ad, soyadı, doğum günü vb. Gibi basit verilerdir.

Her iki yöntemde de çalıştırılmakta olan bir sorgu var. Düşünceler?

+0

$ _Session'ın bellekte olmadığını unutmayın. Varsayılan olarak diskte var. Tabii ki, oturum değişkeniniz için bir veritabanı destekli depolama alanı kullanabilirsiniz. – ryeguy

+0

ah evet!hatırlatma için çok teşekkür ederim! – Andrew

cevap

6

Verileriniz her sayfa için kullanılıyorsa ve tüm kullanıcılar için aynıysa, bunu $ _SESSION olarak (her kullanıcı için bu verilerin farklı bir kopyasına sahip olmak anlamına gelir) önbelleğe almazdım; gibi: örneğin APC ile anısına

    • dosya, memcached (sadece 1 sunucu ise) anısına
    • , örneğin (çeşitli sunucuları varsa) için
    • veri gerektiriyorsa Elde edilecek uzun hesaplamalar veya birkaç DB sorgusu veritabanında önbelleğe alınabilir. Veri durumunuza durumda gibi görünüyor her kullanıcı (aynı değilse önbelleklediğiniz gibi diğer olasılık,


    (sadece 1 geri almak için sorgu ve daha az hesaplamalar anlamına gelecektir) isimler, doğum günlerinin, ...)
    :

    • ne gerekli olduğundan emin yalnızca önbellek yapacak
    • sadece oldukça Tamam olmalıdır oturumda koyarak önbelleğe birkaç veriyi, sahip olduktan sonra
    • Eğer sen Gerçekten çok fazla kullanıcı var, muhtemelen başka ölçeklenebilirlik problemleriniz olacak ve büyük ihtimalle memcached gibi bir şey kullanmaya başlayacaksınız. hangi önbelleğe alma ;-) Bir not olarak

    sağlayacak başka bir yola sahip olacağınız anlamına gelir: Tekrar tekrar aynı sorguyu yapıyoruz, sen DB sunucusu (kendi başına bunu MySQL için, bu olur önbelleğe "query cache" adresine gidin); Yani, düşündüğünüz kadar kötü olmaz, sanırım - bu kadar optimize edilmiş olmasa bile -

  • 1

    Oturum açtığınız kişiye göre değişir. Oturum işleyiciniz MySQL olabilir ve bu nedenle soru hangisi daha iyi olmaz, ancak oturum işleminizi nasıl optimize edersiniz.

    Varsayılan PHP oturum işleyicisi dosyalarıdır, ancak oldukça kolay bir şekilde mysql olarak değiştirilebilir.

    Kullanıcı olmayan verileri hakkında konuşuyorsanız, yalnızca DB'ye kaydedin. Daha sonra problem yaşarsanız optimizasyon konusunda endişelenin. Daha iyi bir tasarım deseni kullanmak ve daha sonra elden optimize etmeyi düşünmek genellikle daha faydalıdır. Kodunuzu tasarlayın, böylece depolama için farklı bir işleyiciyi kolayca kullanabilirsiniz ve daha sonra sorunları en iyi duruma getirmeyeceksiniz.

    Kullanıcıya özelse, oturumu kullanın, ancak gerekirse uygun bir oturum işleyici kullanın.

    İlgili konular