"For select do suspend " şeklinde kullanım doğrumu

Firebird ve Interbase veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
Kullanıcı avatarı
comfort
Üye
Mesajlar: 214
Kayıt: 28 Ara 2004 06:37
Konum: İzmir
İletişim:

"For select do suspend " şeklinde kullanım doğrumu

Mesaj gönderen comfort »

Herkese iyi çalışmalar;
SP lerimde result set elde edebilmek için suspend komutunu for select içine alıyorum. Bu yapının doğruluğundan şüpheliyim çünkü ağ ortamında for select döngüsü kaç kere dönerse client ile server arsında o kadar veri alış verişi olacak demektir. Örnek kod:

Kod: Tümünü seç

For
select id from tablo1 into :id
do
begin
burda işlemler yapılıyor ve en son
suspend;
end
şimdi for döngüsü ilk çalıştığında suspend komutu ile sonuçları client tarafına gönderdi. bi daha çalıştı bi daha gönderdi. Network ortamında çalışan bir sistemde çok fazla kayıt varsa ve output parametrelerimiz çoksa kullanıcıyı baya bekletmiş olcaz. suspend komutunu dışarı aldığımızda ise kullanıcıya result set değil de output parametrelerinin son aldığı değerleri göndermiş olcaz. İşte burda işin içinden çıkamadım. Yoksa suspend komutu for döngüsünün tekrarı kadar değilde bir keremi çalışıyor. :?:
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Re: "For select do suspend " şeklinde kullanım doğ

Mesaj gönderen rsimsek »

comfort yazdı:Herkese iyi çalışmalar;
...
Yoksa suspend komutu for döngüsünün tekrarı kadar değilde bir keremi çalışıyor. :?:
Tabi ki her kayıt için ayrı araç kiralamak gerekmez. Select ten dönen tüm kayıtları paketleyip uygun araçla gönderebilirsin.. Kullandığın yapıda bir terslik yok. Sonu.ta bir tablodan kayıtları aldığın gibi bir kayıtlar seti dönüyor :wink:

Bir de istemci/client tarafa gönderme olayına takılmayın. Aslında bir yere bir şey gönderdiği yok, olamaz da :!: Sadece VT den dışarı çıkarıyor. Dışarı çıkanlara da VT karışmaz artık :wink:
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Kullanıcı avatarı
comfort
Üye
Mesajlar: 214
Kayıt: 28 Ara 2004 06:37
Konum: İzmir
İletişim:

Mesaj gönderen comfort »

hocam sorun şu aslında. benim demek istediğim network trafiğini yoğun tutmamak. yani result set paket halinde gidiyorsa ok. ama her kayıt teker teker server dan client a gönderilirse bu 100.000 kayıtta problem olmazmı.
Kullanıcıyı bekletmezmi.Sonuçta netwrokte benim programım dışında da bir trafik yaşanıyor. Hepten kitlenip kalmayalım. Ben anlamadım heralde sizin demek istediğnizi. :wink: kusura bakmayın
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Ağ ortamında bilgilerin küçük paketler (tek tek) gitmesi ile topluca (büyük paketler halinde) gitmesi atıyorum yüzde 10 bilemedin yüzde 20 ek yük getirir. Asıl önemlisi veritabanı yapısını uygun şekilde tasarlamak, gereksiz trafiği önlemek açısından daha faydalı. Yoksa bir anda 100 bin kayıtları döndüren yapıların baş ağırtması kaçınılmaz :wink:
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
fduman
Moderator
Mesajlar: 2749
Kayıt: 17 Ara 2004 12:02
Konum: Ankara

Mesaj gönderen fduman »

Sorun network falan değil @comfort. Hangisine ihtiyacın var ise onu kullanacaksın.

Eğer her döngüde geriye resultset döndürmek zorundaysan, yani bu bilgiye ihtiyacın var ise o satırı döndürürsün.

Yok ihtiyacın olan sadece sonuç ise ve tek satırsa döngü dışındaki suspend ile bunu yaparsın.
Cevapla