2009-08-20 16 views
13

Birçok departman ve kategori ile bir web mağazası yapıyorum. Veritabanımızda saklanır ve sıklıkla erişilir.Asp.net - Bir Sözlük saklamak için Statik Değişken vs Caching

URL yeniden yazmayı kullanıyoruz, böylece mağazadaki hemen her istek bir arama oluşturur. Ayrıca ana mağaza ve bölüm sayfaları için menüler oluşturmak için sık sık verilerin üzerinde yinelemeliyiz.

Bu bilgiler yüzden ben bilgi erişim hızlandırmak için sözlüğüne veritabanını yüklemek gerektiğini düşünüyorum sık sık değişmez.

Ben ancak orada önbelleğe alma sırasında oluşan serileştirme bazı seviyesidir ve büyük bir veri-yapısı için ben havai önemli olacağını düşünüyorum varsayalım, standart uygulama uygulama önbelleğine veri yüklemek için olduğunu biliyoruz.

Bunun üzerindeki dürtü, söz dizimini ilgili sınıflardan birinde statik bir değişkene koymaktır. Ancak bunun üzerine bazı giriş girdileri almak istiyorum. Bu yöntemin daha hızlı olacağını düşünerek haklı mıyım? Bu korkunç bir uygulama mı? Kaybettiğim daha iyi bir yolu var mı?

Bu konuda fazla bilgi bulamıyorum ve paylaşabileceğin her türlü bilgiyi gerçekten takdir ediyorum. Teşekkürler!

cevap

19

Uygulama ve Önbellek koleksiyonları, onlara ilettiğiniz nesneleri serileştirmez, gerçek başvuruyu saklar. Nesnenin ne kadar büyük olursa olsun, bir nesnenin Önbellekten alınması pahalı bir işlem olmayacaktır. Yapmamanız için çok iyi bir nedeniniz olmadıkça, her zaman önbellek nesnelerine sadık kalmayın.

kayda değer tek şey bu koleksiyona iş parçacıklı erişim düşünmek emin olmaktır. Düzgün

+0

Çok teşekkür ederim - Tam olarak bilmem gereken şey bu. –

+0

yardımcı olmaktan mutluluk duyuyoruz :) – LorenVS

+4

Sadece Uygulama veya Önbelleği kullanıyorsanız, bunlar makineye göre olduğundan emin olun. Birden fazla makineye sahipseniz (ör. Web grubu), sorun yaşarsınız. Microsoft Hız veya MemCacheD gibi ölçeklenebilir bir önbellek çözümü kullanmanız gerekecektir ('D', Daemon içindir). –

3

memcached arkadaşın!

senin sözlük uygulaması önbelleğinde nasıl olacağı büyük bir fikrin (ama overkill olabilir dışarı ölçekleme değilseniz)? İyi bir ilk seçenek olarak tavsiye etmek için cazip olurdu.

+0

İlişkili bilgilerle birlikte birkaç düzine departmana ve birkaç yüz kategoriye bakıyorum ... bu nedenle, boyutu çok kötü olmamalı. Veri tabanı düzeyinde önbelleklemeyi kullanmamdaki tek tereddüt, her çağrıda, veritabanı tarafından döndürülen nesneleri ilişkili türlere dönüştürmek zorunda olduğumdur. Ön işlem yapmayı umduğum url gibi bazı ilişkili veriler de var. Sık sık bu öğelerin uzun listelerini almam gerektiği göz önüne alındığında, çizgiyi daha fazla önbelleğe almam gerektiğini düşünüyordum. Bu kesinlikle iyi bir seçenek ve ben gerçekten bilgi için teşekkür ederiz! –

4

Peki kilitlemek etmezseniz çok hızlı bazı ciddi sorunları ile bitirmek için gidiyoruz, bunu ihtiyaç olup olmadığı konusunda yerine uygulama önbellek statik alanını kullanarak kodu yeniden çok iş olduğunu sanmıyorum böyle yaparak. Öncelikli olarak önbelleği kullanıyorum. Prematüre optimizasyona gerek yok, performansı ölçtünüz mü? Uygulama önbellek nesnesi ile doğru şekilde davranabilir. Belki de db sorguları ile iyi çalışır?

Yani, cevabım - önbelleği kullan ve nasıl çalıştığını gör.