Veri Akışından ve İşlem Yükünden Tasarruf ( Tetikleyiciler / Triggers )

Mart 2012 | Ibrahim Baliç, Software Engineer
Günümüz teknolojisinin gelişmesi( bu teknolojik yapının bizi ilgilendiren en önemli gelişmesi aslında eski sistemlerde 48.000 bit lik 56.000 bit lik veri akışı mümkün iken günümüzde 16.000.000 bitin aktarım hızına sevinirken 100 mbit fiber optik kablolama ile 1, 2 , 3 gbbitlere kadar çıkması ve halen daha gelişiyor olması sanırım en önemli gelişme olmuştur..) internet üzerinden aktarımın hızlanması ve yaygınlaşan internet kullanımı da hemen hemen her programlama dilinde ve teknolojik alt yapıda anlık veri akışı gereksinimi/alternatifi doğurmuştur.

Günümüz teknolojisinin veri aktarim hızları düşünülenden daha hızlı gelişiyor olsa da; cpu teknolojimiz o kadar hızlı gelişemedi, hatta tahminlerin ötesinde daha da yavaş ve yetersiz kaldı. hatta intelin kurucusu olan Gordon Moore(Moore Yasası olarak biliniyor)'ın tahminleride cürümek üzere hatta bana göre cürüdü =))) durum işlemcilerin yani server taraflı olarak yükün bildiği ana makinaların işlem kapasitelerini zorlamasından dolayı alternatif çözümler ( parallel bilgisayarlar şuan ki meşhur olan bulut teknolojisi (cloud) server yük dengeleyiciler vs vs ) olsa da, bu tam anlamıyla çözüm üretemedi. Programcıların canını sıkan en önemli konu server taraflı olarak bilgisayarların işlem veremez hale gelmesi veya gecikmesidir.
 Bu ister web tabanlı bir programlama olsun, isterseniz masa üstü bir uygulama olsun veri akışı sağladığınız her alt yapıda istemci ve veri boyutu arttıkca, sisteminiz down olur. 

Tahminimce buna alternatif bir çok çözüm üretilmiştir,Üretiliyordur fakat benim kendi edindiğim tecrübelerden sizlere küçük örnekler vererek ana veri aktarimi yerine tetikleyici kullanarak hem veri aktarimindan hemde sunucu taraflı ( özellikle mysql, sql gibi database tabanlı veri yığınlarından çekilen bilgi sistemleri için geçerli ) işlem yükünü azaltmaya yönelik bir teknikdir.

Basit bir veri akışı sağlayacak diyagram çıktısı, sanırım şu şekilde örneklenebilir. 
  



Veritabanı

Bu basit veri akışında Kırmızı Hat(red line) server'a yapılan istek ( request ), Yeşil Hat ( green line) istemciye giden cevap ( response ) olarak düşünerek cizildi. 

Bu işlemler zincirinde ana veri aktarımı olarak database'ten 5 farklı tablodan ortalama 0,0186s gibi bir sürede ortalama 4.82 kb lik bir veri çekilmektedir. Bu çekilen veri her saniye bazında kontrol edilmesi ve yapılmış değişikliklerin(eğer varsa) istemci tarafına aktarılmasını gerektirmektedir.

Fakat bu veri değişimi her zaman anlık olarak değişmeye bilmektedir. Buna örnek verilebilenecek bir alt yapı notification(bildiri) sistemleridir. Her an kontrol edilmesi gereklidir fakat her an veri olmayabilir. Bu tarz durumlarda bu trigger (tetikleyici) dediğimiz teknikler inanilmaz boyutta işlem yükünü hemde aktarilan veri boyutunu ortadan kaldirabilir.

Geliştirilen sistem özelliklerine ve işlem akıcılığa göre aktarilan veri boyutunun kontrollünden tutun, aktarilan datanın id numarasına kadar bir çok kontrolü takip ederek tetikleyici oluşturabileceğimiz ucsuz bucaksız bir deryadır. 


Yukarıdaki tabloda gösterilen data akışını ele alalım. "ana veri aktarımı olarak database'ten 5 farklı tablodan ortalama 0,0186s gibi bir sürede ortalama 4.82 kb .." olarak göstermiştik bizim anlık olarak 4.82 kb 'ı aktarıyor olmamız 60 saniyede 60x4.82 kb aktarıma ulaşacağımız anlamına gelmektedir, aynı zamanda bu veriyi cekmek icin database'imizde her saniyede 5 farklı tablodan veri cekmek demektir. Bunun ne demek olduğunun şuan çok daha iyi fark edildiğini düşünüyorum.

Veritabanı


Burada gözüktüğü gibi trigger görevi görecek olan ikinci bir servis eklendi. Burada birinci servisi istenilen verinin boyutu, ikinci serviside gelicek olan verinin tamamını almak icin kullanıyoruz. 1 servisimiz tetikleyici görevi görmektedir. Istemci tarafında alınan son veri miktari işlem aşamasında boyut itibari ile kayıt altına alınarak, saniye bazinda sunucudan gelen gelecek veri boyutu ile karşılaştırarak değişiklik durumunda ana verinin cekilmesi basit bir tetikleyici görevi görmektedir. Bunu genel anlamda türetmek ve geliştirmek, database sorugusundan tasarruflar sağlamak vs mümkündür, Aynı mantığı ajax sistemlerinde, database sorgularında akliniza gelebilecek bir çok farklı alanda kendi alt yapınıza göre geliştirmek/kullanmak mümkündür. Şimdilik söyleyebileceklerim bu kadar fakat devam niteliğinde veri güvenliğini ele alan bir kaç deneyimimi aktaracağım, şimdilik herkese iyi çalışmalar dilerim.

İbrahim BALİÇ