Günümüz veritabanlarında T-SQL yada PL/SQL ile normal bir programlama diliyle yapabildiğimiz birçok şeyi yapabilmekteyiz. Peki yapacağımız bir projede yapacağımız işlemleri veri katmanında mı yazmak lazım yoksa veri katmanında mı? Veritabanının içinde kod yazmak mı daha verimli yoksa veri katmanında mı? Hangi kod veri katmanında hangi kod veritabanının içinde yazılmalı? Arada ORM araçları kullanmak yada bütün işi veritabanın içinde yapmak arasında nasıl bir performans ve iş farkı var? Kısa bütün kriterler açısından bu ikisi ve aradaki araç veya katmanlarda denge nasıl olmalı? Teşekkürler

soruldu: 17 Kas '12, 05:00

emrekacan's gravatar image

emrekacan
813304450
cevap kabul oranı: 9%

değiştirildi: 19 Mar '13, 11:27

%C3%B6zcanacar's gravatar image

özcanacar ♦♦
17.2k59183183


Şu anda çalıştığım kurumsal firmada(finans sektörü) ilk verilen iş, çok ciddi yoğunlukla kullanılan 5 tane servisi PL/SQL den Java tarafına almak oldu. Diğerleri de peyderpey alınacaktı.

En başta yapılan iş Javada business katmanında parametreleri verip tüm işlemi PL/SQL'de yaptırdıktan sonra sadece sonucu alıp (JSF ile) web uygulamasında yayınlamaktı. Dolayısıyla veritabanına çok yoğun çalışan servisler(borsa yatırımlarıyla alakalı) olduğu için ciddi yük bindiriyordu. Biz de PL/SQL tarafında yapılan işi minimuma indirdik. Sadece veritabanıyla ilgili işleri yapmasını sağladık. Temel işlemler olduğu için bazı ortak noktalar oluştu. Bunlara da ayrı SP yazıp mevcut SP'lerden çağırdık. Java tarafında yapabileceğimiz bütün işlemleri de javaya aldık.

Sonuç olarak hem tablo işlemleri PL/SQL'de kalıp hızlı bir şekilde gerçekleşti, hem de veritabanından fazla yükü almış olduk. Sanırım gerekli kriter bu olmalı.

permanent link

cevaplandı: 19 Kas '12, 04:19

mhkoca60's gravatar image

mhkoca60
1.8k264554
cevap kabul oranı: 15%

değiştirildi: 19 Kas '12, 06:09

SP nedir ?

(19 Mar '13, 13:57) rahmanyazgan ♦ rahmanyazgan's gravatar image
1
(19 Mar '13, 17:28) mhkoca60 mhkoca60's gravatar image

Elbette, tüm işleri veritabanına yaptırmak(örneği PL/SQL le) daha performanslı olacaktır. Çünkü Java tarafından bir SELECT srogusu gönderdiğinizde, bu önce JDBC üzerinden geçecek, sonra sonucta yine JDBC katmanından geçecek ve bu sırada tip dönüşümleri yapılacak. Hele bir de ORM kullanıyorsanız, araya bir de JPA katmanı girecek, ve sorgunuzdan dönen her kayıt, bir Java Objesi olarak oluşturulacak. Bütün bu sorguların yorumlanıp, veritabanı diline çevrilmesi, tip dönüşümleri ve nesnelerin oluşturulması zaman alacak olaylar ve performansı azaltacaktır.

Peki neden eğilim hep bu tür araçları kullanmaktan yana gelişiyor. Çünkü bağımsız olmak istiyor programcılar ve ya şirketler.

Eğer PL/SQL kullanırsanız, oracle veritabanına bağımlı kalacaksınız. Yarın bir firma, "gel projeni bizim veritabanımızda çalıştır, biz MySQL kullanıyoruz" dediğinde, yapamacaksınız ve firmaya Oracle almaları gerektiğini söyleyeceksiniz.

Bence bütün iş mantığını Javada kurmak, bir ORM katmanı kullanmak, ve sadece gerektiğinde veritabanına erişmek en doğru yaklaşım olacaktır.

permanent link

cevaplandı: 19 Mar '13, 13:00

mceliksoy's gravatar image

mceliksoy ♦
6.5k84988
cevap kabul oranı: 25%

İş akışıyla ilgili kodları veritabanından çıkarttığınızda projenizi ölçeklemek, dış kütüphaneler eklemek ve versiyon kontrol yapmak kolaylaşır.

  • Ölçekleme amaçlı veritabanı çoklamak çok zahmetli bir iştir, bazen de mümkün olmayabilir. Yükü mümkün olduğunca iş katmanına kaydırırsanız iş hesabı yapan makineleri çoklayarak çok kolay performans artışı sağlayabilirsiniz.

  • Kodları iş katmanına kaydırmak versiyonlamayı kolaylaştırır. Daha önce PL/SQLde ya da TSQLde olduğu için versiyonlamakta güçlük çektiğiniz kodlarınızı Git gibi kimin ne yaptığını gösteren, hatanın nerede oluşmuş olduğunu bulmak için sürümler arasında gezinmenizi sağlayan güçlü araçlarla versiyonlayabilirsiniz.

  • Projenize eklediğiniz kütüphaneleri kullanmanız kolaylaşır. Her ne kadar PL/SQL java çalıştırabilse de java kütüphanesini doğrudan iş katmanında çalıştırmak sizi pek çok külfetten kurtarır.

Yeni mimarinize uygun kod yazmaya özen gösterin. Örneğin iş katmanınızı çokladığınızda veriyapınız, hız ölçümleriniz ve ağınız gruplamaları iş katmanında yapmanıza elveriyorsa ölçeklenebilirlik açısından GROUP BY, CROSS JOIN ve benzeri işlemleri iş katmanına almanız daha iyi olabilir.

permanent link

cevaplandı: 20 Mar '13, 05:57

nurettin's gravatar image

nurettin
2.2k2441
cevap kabul oranı: 14%

değiştirildi: 20 Mar '13, 06:43

Cevabınız
toggle preview

Bu soruyu takip et

E-Posta üzerinden:

Üyelik girişi yaptıktan sonra abonelik işlemlerini yapabilirsiniz

RSS üzerinden:

Cevaplar

Cevaplar ve Yorumlar

Yazı Formatlama

  • *italic* ya da _italic_
  • **bold** ya da __bold__
  • link:[text](http://url.com/ "başlık")
  • resim?![alt text](/path/img.jpg "başlık")
  • liste: 1. Foo 2. Bar
  • temel HTML etiketleri de kullanılabilir

Bu sorunun etiketleri:

×66
×19
×7
×4
×1

Soruldu: 17 Kas '12, 05:00

Görüntüleme: 1,216 kez

Son güncelleme: 20 Mar '13, 06:43

powered by BitNami OSQA