2011-05-21 22 views
6

Olası Çoğalt:
Can't pass mysqli connection in session in php bize veritabanları gerektiren PHP uygulamaları yazdım aitsaklamak için veritabanı bağlantısı

Birçok; Çoğunlukla MySQL, ama sık sık insanlar için çok küçük MS Access veritabanları kullandıkları için teknik olarak daha az yeteneklidirler, böylece bir tweak indirebilir/yedekleri kaydedebilir/etc. kendi başlarına (bu doğru mu, değil mi, hiç bir fikrim yok).

Fark ettiğim şey, aynı sorguların bazılarını bağlayıp çalıştırırken çok zaman harcıyor. Bundan dolayı ilginç bir düşüncem vardı: Kullanıcı siteye girerken yükü azaltmak için $_SESSION değişkeninde çoğunlukla statik olan bağlantı ve olası sonuç kümelerinin saklanması.

Açıkçası bunu yapmak çok dikkat gerektirir. Oturum yok olduğunda bağlantıyı kapatmak gibi şeyler sadece başlangıçtır.

Sorum şu: Bu gerçekten mümkün bir şey mi? Ve eğer öyleyse, ne yapmalıyım (session fixation dışında, tüm oturumlar için geçerli olan kendi problemi olduğu gibi)?

cevap

10

Bunu (kaynak vs. verileri) yapsanız bile, bu kötü bir fikirdir. Maksimum bağlantılarınızı çok hızlı bir şekilde patlatacak çok sayıda eşzamanlı açık bağlantıya sahip olacaksınız. Özellikle yaşam döngüsü 100 ms'nin altında (sorgularınıza bağlı olarak) 20 dakikaya veya daha fazlaya genişlediyse. Açık bağlantılar sayesinde, MySQL gibi bir şey de bellek ayırmalarını düzgün bir şekilde sıfırlayamayacak ve tüm sistem cehenneme gider. Kısacası, kodlarınızın tek kullanıcısı tek bir kullanıcı olmadıkça, DB'lerin ne için olduğu bu değildir.

Alternatif olarak, özellikle veritabanı yükünü azaltmak ve bağlantı sürelerini azaltmak için tasarlanan önbelleğe alma teknolojilerini öneriyorum. En basit olanı, memcached gibi bir şeyi kullanmak, performansı tam olarak geliştirir ve tam olarak kaç tane sistem kaynağının önbelleğe geçtiğini belirtebilirsiniz - veri tabanının ihtiyaç duyduğu anda veri alma işini yapmasına izin verirken. için.

+0

Bağlantı sorununu düşünmedim. Bu yüzden sordum :) – steveo225

+0

Memcached bakın. Hatta veritabanları olmadan bile sitelerde kullanıyorum ... Karmaşık bir PHP sayfasını bir kez oluşturmama izin verin ve tüm gün boyunca (yeniden oluşturmadan) bir SVN check ini geçersiz kılar. –

11

Siz bu kaynaklar olduğundan, oturumda veritabanı bağlantıları veya sonuç kümelerini depolamak ve olamaz: Verilerin

Bazı türleri birbirinin pesi getirilemez. Kaynak değişkenleri veya dairesel referanslara sahip nesneleri (yani, kendisini başka bir nesneye referans gösteren nesneler) içerir.

http://php.net/manual/en/intro.session.php

Normal bir diziye ayarlanmış bir sonuç çıkarmak ve diğer değişkenler gibi seansımızda saklayabilir. Bu zaten oturumlar için oldukça tipik bir kullanım durumu olurdu. Sadece oturumda çok fazla veri saklamamaya dikkat edin, çünkü veritabanından almaktan daha fazla vergilendirebilirsiniz.

+0

Bu kabul edilen cevap olmalıdır. –

1

Bazı yapılandırma dosyalarında daha iyi kullanım için bunları yapmalısınız. Oturumlar belirli oturumlar içindir ve küresel değil.

İlgili konular