20 Haziran 2014 Cuma

Veri Tabanı Çağırımları Performans İpuçları

Veri Tabanı Çağırımları

Veri tabanına gitmek çok kaynak tüketen bir işlemdir. O nedenle, veri tabanı çağrısı yaparken, kendimize sormamız gereken bazı sorular vardır.

1)) Bu çağırıyı yapmama gerek var mı? Bu bilgi elimde hali hazırda var mı?

2)) Çağırımı yapmam gereken asıl ihtiyacım olan yer burası mı? Yoksa bu çağırımı yaptıktan sonra bu bilgiyi kullanmadığım bir senaryo var mı?

3)) İhtiyacım olan kadar mı yoksa daha fazla mı bilgi çekiyorum.

 

Hatalı Kullanım - Döngü İçinde Veri Tabanı Çağrısı

İhtiyacımız olan veri tabanı çağrısını, döngü içinde değişmeyen bir bilgi ile yapıyorsak, bu çağırımın döngü dışında bir kez yapılması yeterlidir.

Aşağıdaki örnekte, şirket bilgisi ile döngü içinde veri tabanı çağırısı yapılmaktadır. Hâlbuki kurulan döngünün şirket bilgisi ile bir ilişkisi yoktur ve bu bilgiyi değiştirmemektedir.

Örnek – 1

Böyle bir durumda bu çağrıyı döngü girişine alıp, entity’mizi istediğimiz bilgi ile doldurduktan sonra, son içinde bu entity’yi kullanabiliriz.

 

 

Hatalı Kullanım - Kullanılmayacak Veri Çekme

Veri tabanında bir istekte bulunan bir kod yazdığımızda, çektiğimiz veriye gerçekten ihtiyaç duyup duymadığımızı sorgulamamız gerekmektedir. Bu konudaki yaygın yanlış kullanımlar şöyledir.

Önce VT Bağımsız Kontrolleri Yapmak

VT çağırımı yapmadan önce, eleyebileceğimiz senaryoları önce kontrol etmek, gereksiz çağırımlara engel olacaktır.

Bir if kontrolünün operatörleri arasında, hali hazırda değeri atanmış bir tane var ise, önce sadece onu içeren bir if yazarak, gereksiz VT sorgusu atmamış oluruz. Sarıya boyanmış kısmın değeri hâlihazırda belli, o nedenle önce onu kontrol edelim.

 

 

Veriyi, ihtiyacı olan kod bloğu içinde çekmek

İlgii tablo, sadece eğer yük adedi sıfıdan büyük ise çalışan for blok içinde çalışıyor. Yük olmadığı durumlar için boşuna kaynak kullanıyoruz.

Olması gereken, döndü içinde ihtiyaç duyulan kaynakları, döngüye girdiği zaman çalışacak blok içinde tanımlamak. Yeni bir “if” yazıp, bu kaynağı orada çekiyoruz.

 

Collection Vs. TypedListBuilder

Bu örnekte, birden fazla tablo (haliyle tablolar arası “relation” ) içeren bir veri kümesi oluşturuyor. Bu kümeden sadece bir alana (Bookin Numara) ihtiyacımız var. Bu alanı çekmek için ORM nin bize sunduğu bir entity’e ait tüm alanları çeken ilgili Collection sinifini kullanılmış. Bu durumda içinden bir tanesini kullanmak üzere tüm alanları tablodan çekmiş bulunuyoruz.

Bunun yerine çalıştığımız framework’un bize sağladığı aynı “relation” ve “filtre” seçeneklerini kullanabileceğimiz, fakat istediğimiz alanı seçmemizi sağlayan altenatif yaklaşımı kullanmalıyız. Örneğimiz için, yukardaki sarı ile işaretlenmiş satırları aşağıdaki sarı satırlar ile değiştirebiliriz.

Hiç yorum yok:

Yorum Gönder