C# Data Caching ve Uygulama Senaryosu

By Burak TUNGUT - 1.12.2013 - 11 Yorum - Kategori C#

Proje KatmanlarıUzun, hatta baya bir uzun aradan sonra herkese merhabalar :)

Haziran 2013'de yazdığım son makaleden sonra yaklaşık 6 ay geçmiş. Açıkçası nasıl geçti bu kadar zaman anlamış değilim. Neyse. Klişe lafları bırakıp işimize bakalım :)

Bu makale de Data Caching konusunu ele alıyor olacağız. Makaleyi yazmadan önce anlaşılır ve uyarlanabilir olması için daha önce bir kaç projede kullandığım yapı üzerinden ilerlemeye ve bunu bir diyagrama dökmeye karar verdim.

Açıkçası hayatımda ilk kez bir diyagram hazırladım (Yazılım Mühendisliği derslerinde ki Use-Case ve UML'leri saymazsak tabi ki :) ). 

Yapacağımız örnekte ki projeleri (katmanları) Presentation ve Infrastructure olmak üzere ikiye ayırdım.
Presentation kısmını 1 adet Asp.Net MVC projesi üstleniyor olacak. Bunun haricinde Business, Data-Access, Caching ve Core katmanları ise Infrastructure içerisinde olacaklar.

Senaryo ve Akış

Üretiminde içinde bulunduğunuz, senaryosu ürün bazlı olan bir Web projesi düşünün. Ya da kısa bir değiş ile bir E-Ticaret sitesi. Üst tarafta kategoriler, solda markalar ve layoutda listelenen ürünler. Şimdiye kadar ki kısımda pek sorunumuz yok.

Peki her bir ürüne tıkladığımızda (ürünün detay sayfasına gittiğimizde) arka tarafta bir SQL sorgusunun çalıştığını size hatırlatsam. Hatta bir de sitemizin popüler olduğunu söylesem. Bence daha fazla ileriye gitmeye gerek yok. Sorunların ortaya çıkması için yeterli neden saydım gibi :)

Devamı

Asp.Net MVC Output Cache Kullanımı ve İstisna Senaryoları

By Burak TUNGUT - 24.3.2013 - 2 Yorum - Kategori Asp.Net MVC

Öncelikle herkese merhabalar smiley Bu makalemde Asp.Net MVC uygulamalarında sıklıkla kullanılan bir önbellekleme yöntemi olan OutputCache filter’ının kullanımını inceliyor olacağız. Web projelerinin en büyük sıkıntıları hiç şüphesiz performans kayıplarıdır. Bunu büyük ölçüde absorbe  etmek içinde doğru yerlerde olma şartıyla caching işlemleri yapılır.Asp.Net MVC Output Cache

Örneğin günde yüzbinlerce kişinin girdiği, hepsiburada.com gibi bir siteyi ele alalım. Kategoriler arasında dolaşıyor, ürünleri inceliyor ve sipariş veriyorsunuz. Ancak hangi sayfada olursanız olun üst tarafta kategorileri hep görüyorsunuz. Yüzbinlerce kişinin bu sitede en az 3 sayfayı gezdiğini bile düşünürseniz kategoriler kısmının her seferinde veri tabanından çekiliyor olması büyük performans kayıpları yaşatacaktır.Sonuçta bu kısım an ve an değişiklik gösterebilen bir bölüm değil. Böyle bir siteye kategori eklenmesi belki birkaç ayda bir gerçekleşir.

Sonuç itibariyle böyle bir durumda yani kısa süreçler içerisinde değişime uğramayan veya anlık bilgi üretmeyen kısımların önbelleklenmesi (caching) büyük ölçüdeki performans kayıplarını bir hayli absorbe edecektir.

Bunun yanı sıra az önce “anlık bilgi üretmeyen…” kısmıyla da belirttiğim gibi durumlarda ise caching yapılması mümkün olup, istenilen sonuçların doğru üretilebilmesi çeşitli konfigürasyonlar ile sağlanabilmektedir.

Caching Çeşitleri

Caching işlemlerini Data Caching ve Output Caching olmak üzere ikiye ayırabiliriz.
Data Cache işlemleri .Net üzerinde, desteklediği tüm veri ve referans tiplerini ön bellekleyebileceğimiz ve her bir istekte ise önbellekten aynı veriyi alabileceğimiz bir model sunar. Böyle bir önbellekleme için yukarıda verdiğimiz örneği ele alırsak, veri tabanına bir kere bağlanılır ve çekilen kategori nesneleri data cache ile ön belleklenebilir.

Makalede inceleyeceğimiz Output Cache modeli ise çıktıların yani render edilmiş View bilgilerinin ön belleklenmesini ve timeout olana kadar gelen her bir istekte ise bir önceki ön belleklenmiş bilgilerin sunulmasını sağlar. Aynı örnek üzerinden ilerleyecek olursak output cache ile kategoriler kısmının ön belleklenmesi için kategoriler kısmını içeren bir PartialView’ın tamamının cache edilmesi gerekir.

Anlık değişim içerisinde olmayan bir çok verinin aynı sayfa üzerinde olacağı durumlarda, toplu bir cache mekanizmasına sahip olduğu için Output Cache kullanımı daha tutarlı bir çözüm olacaktır.

Cache yöntemlerinden ve istisna durumlarından da bahsettiğimize göre artık yapacağımız küçük uygulamalara geçebiliriz laugh

OutputCache kullanım kolaylığı sağlanması için Action Filter sınıfından kalıtılmıştır. Bu sayede Controller veya altında oluşturulabilecek Action’lar için Attribute olarak kullanılabilirler.

OutputCache Attribute'ün Kullanımı

Uygulamalarımızı yapabilmek için bir adet Asp.Net MVC 3 ya da 4 projesi açalım.
HomeController altında GetTime adında bir adet action yaratalım ve aşağıdaki gibi kodlayalım;

namespace MVCAuth.Controllers
{
    public class HomeController : Controller
    {
        [OutputCache(Duration=10)]
        public ActionResult GetTime()
        {
            ViewBag.Date = DateTime.Now.ToString();
            return View();
        }
    }
}

Devamı
1
Facebook
Son Yorumlar