FB İstemci-Sunumcu veri çekme stratejisi??

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
Akin_Delphi
Üye
Mesajlar: 163
Kayıt: 06 Nis 2006 12:22

FB İstemci-Sunumcu veri çekme stratejisi??

Mesaj gönderen Akin_Delphi »

Herkese Merhabalar

Forumu aradım ancak bu konuda bir bilgi bulamadım (gerçi tam olarak neyi aramam gerekiyor onu da bilmiyorum ya o da ayrı mesele).

Şimdi benim sorunum şu: Normalde düz dosya veritabanı (örneğin Paradox) kullandığımızda, VT'den çekilen kayıt sayısı ile ilgilenmiyoruz. Çünkü nasıl olsa VT kendi bilgisayarınızsa ve çok fazla kayıt olsa bile kayıt çekme çok uzun sürmüyor.

Ancak FB gibi bir İstemci-Sunumcu mimarisine sahip olan bir VT sisteminde, uzak bilgisayardaki kayıtları çekerken, eğer kayıt sayısı çok fazla ise IBDataSet.Last komutunu kullandığımızda çok fazla bekleme yapmamız kaçınılmaz. Hele bir de bunu internet üzerinden yaptığınızı düşünün durum daha da vahim hale gelecektir.

İstemci-Sunumcu mimarisinde kayıt çekme performansını artırmak için hangi strateji izlenmeli?

Benim aklıma aşağıdaki stratejiler geliyor:
1. Her seferinde belirli sayıda kayıt çekmek (yani Midas'ın ClientDataSet bileşeninin PacketRecords özelliğindeki gibi, yalnızca atıyorum her seferinde on kayıt çekmek). Gerçi bunu SQL ile nasıl yaparım hiç bir fikrim yok :( :(
2. SQL ifadesi içerisinde where anahtar kelimesiyle kayıtları süzmek ve dolayısıyla atıyorum yalnızca belirli bir tarih aralığı ya da yalnızca belirli bir müşteri adı, ürün adı, vs. için çekmek. Bunun hakkında bir miktar da olsa fikrim var. Ancak sonuçta ortaya çıkan uygulamanın arabirimini nasıl etkiler bu konuda çok emin değilim.

Dolayısıyla, acaba bu konuda deneyime sahip arkadaşlar nasıl bir strateji izlediklerini paylaşabilirler mi?

Saygılarımla
aLonE CoDeR
Kıdemli Üye
Mesajlar: 1223
Kayıt: 26 Nis 2005 04:08

Mesaj gönderen aLonE CoDeR »

Selamlar.

Local network (Lan Networking..) ortamlarında FireBird için çoğu zaman bahsettiğin durum sözkonusu olmaz.Eğer görsel bileşenler kullanmıyorsan çektiğin select cümlesi * olarak işlense, group by ve/veya order by kullanılsa, index kullanılmasa, kayıt sayısı da birkaç milyon olsa dahi dataseti last etmen o derece bir beklemeye neden olmaz.Eğer ortada herhangi bir dbgrid varsa, hele de görsel ya da işlevsel bir gridse bu elbette ki hızdan kısmen ödün vermen gerekeceği anlamına gelir.Ama burada dikkat etmen gereken nokta kısmen kelimesi :idea:

Internet network (Wan Networking..) ortamlarında durum tabii ki değişir.FireBird'ü standart adsl modemlerle, hele ki 256/512 k gibi bağlantılarla kullanmak zaten bu yavaşlığı kabul etmek demektir.Bir süre bunun araştırmasını yaptım ancak internet ortamında örneğin bir mysql hızında olması için neler yapılması gerektiği konusunda bir bilgiye rastlayamadım..Belki ben bulamamışımdır bilmiyorum ama kendi yaptığım testleri de gözönüne alarak söyleyebilirim ki, FireBird şimdilik sadece Lan için ideal vs.vs.

Midas gibi paket paket almak ya da diğer bi deyişle peydel pey verilere ulaşmak için First ve Skip anahtar komutlarını inceleyebilirsin.Forumda konuşulduğunu da hatırlıyorum.Ancak bu noktada bu komutların yönetimi için de iyi bir organizasyon ve senaryo kurman gerekeceğini söyleyebilirim.

Kolay gele..
Kullanıcı avatarı
sadettinpolat
Moderator
Mesajlar: 2131
Kayıt: 07 Ara 2003 02:51
Konum: Ankara
İletişim:

Mesaj gönderen sadettinpolat »

arayalim guzelleselim :) ehueueue


viewtopic.php?t=13259

terminator remote protokolun yeniden yazildigini soylemisti.
http://www.firebirdnews.org/?p=403 adresinde bunun head icerisine dahil edildigi ve yeni versiyonda aktif hale gelecegi belirtilmis. deneyip hizi teste etmek lazim.

ayrica fbconfig dosyasinda tcp paketinin boyutunu artirabiliyorsunuz. yine bunun da nasil bir etkiye neden olacagini test edip gormek lazim....


bu arada server - client arasinda gidip gelecek veri cok fazlaysa remote desktop olayina girmek daha mantikli olabilir :)
"Sevmek, ne zaman vazgececegini bilmektir." dedi, bana.

---
http://sadettinpolat.blogspot.com/
aLonE CoDeR
Kıdemli Üye
Mesajlar: 1223
Kayıt: 26 Nis 2005 04:08

Mesaj gönderen aLonE CoDeR »

sadettinpolat yazdı: bu arada server - client arasinda gidip gelecek veri cok fazlaysa remote desktop olayina girmek daha mantikli olabilir :)
Peki diyelim ki networkde 30 user var, remote desktopla nasıl bir yönetim uygulanabilir :?:
Kullanıcı avatarı
sadettinpolat
Moderator
Mesajlar: 2131
Kayıt: 07 Ara 2003 02:51
Konum: Ankara
İletişim:

Mesaj gönderen sadettinpolat »

bLue aLonE yazdı:
sadettinpolat yazdı: bu arada server - client arasinda gidip gelecek veri cok fazlaysa remote desktop olayina girmek daha mantikli olabilir :)
Peki diyelim ki networkde 30 user var, remote desktopla nasıl bir yönetim uygulanabilir :?:
soruyu anlayamadim. biraz daha acman mumkun mu konuyu ?
"Sevmek, ne zaman vazgececegini bilmektir." dedi, bana.

---
http://sadettinpolat.blogspot.com/
Ali Erdoğan
Kıdemli Üye
Mesajlar: 1026
Kayıt: 11 Şub 2005 02:12
Konum: İstanbul

Mesaj gönderen Ali Erdoğan »

Uzak masaüstü bağlantısı açarak çalışmak bana çok mantıklı geliyor.Hem böylece tek bir güç kaynağı kullanarak elektirik kesintilerinden %100 zararsız çıkmak mümkün. Bunun yanında yazılımda versiyon değişikliği yaptığımızda tek bir yere yüklememiz yeterli olur. Ancak terminale ait bütün donanımlar nasıl kullanılabilinir? Mesela çıktıların sunucudan değil terminale bağlı olan yazıcıdan alınması gerekir veya terminale bağlı bir vebkem i yazılımda nasıl kullanabiliriz.

İşte bu konuda kafamı karıştıran nokta bu.
Hakan Can
Üye
Mesajlar: 634
Kayıt: 04 Mar 2005 04:27
Konum: Ankara

Mesaj gönderen Hakan Can »

Aslında sorunun cevabını başta vermişsin.

İzlenmesi gereken strateji özetle: "Ne kadar köfte, o kadar ekmek." stratejisi.:D Yani; ya bağlantı hızı artar (maliyet artar) istediğin şekilde VT'yi kullanırsın, ya da bağlantı düşük olur VT'yi orantısal olarak kısıtlı kullanırsın.

Bu yaklaşım standart bir yaklaşım. İlla remote bağlantı için geçerli olacak diye bir şey yok. İmkanlar ve istekler ölçüsünde buna karar vermek gerekir.

İyi çalışmalar.
aLonE CoDeR
Kıdemli Üye
Mesajlar: 1223
Kayıt: 26 Nis 2005 04:08

Mesaj gönderen aLonE CoDeR »

Yani 30 kullanıcı için senaryo nasıl olur remote desktop kullanarak?
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

bLue aLone yazdı:Yani 30 kullanıcı için senaryo nasıl olur remote desktop kullanarak?
sanırım her kullanıcı için bir windows kullanıcısı tanımlanıyor. yada dump terminal kullanılarak oluyor. Ama senden fazla bilgim olduğunu sanmıyorum bi tahmin sadece.
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Akin_Delphi
Üye
Mesajlar: 163
Kayıt: 06 Nis 2006 12:22

Mesaj gönderen Akin_Delphi »

Herkese verdiği öneriler için teşekkür ediyorum.

Sanırım karma bir veri çekme stratejisi izleyeceğim. Yani kullanıcı eğer LAN üzerinden kullanırsa, minimum çekilen kayıt sayısı 100 olacak. Ancak server'ın adını kontrol ederek belirlemeyi umduğum WAN adresi olursa, maksimum çekilen kayıt sayısı 100 minimum 10 olacak.

Ayrıca her durumda da kullanıcıya verileri arayıp yalnızca belirli bir kritere (müşteri adı, tarih aralığı vs. olabilir) göre veri süzme imkanı da tanıyacağım.

Yalnız bu durum beni acayip korkutuyor. :oops: Çünkü şu anda bu uygulama deneme aşamasında olmasına rağmen yaklaşık 30 IBDataSet'e ulaştım. Bittiğinde (inşallah), muhtemelen IBDataSet sayısı yaklaşık 45 adet olacak. :shock:

Dolayısıyla her bir IBDataSet için sayfa sayfa almak ve where ifadesiyle süzmek için SQL ifadelerini tek tek oluşturmak ve hiç bir karışıklığa yol açmadan bunları ilgili IBDataSet'lere tayin etmem gerekiyor.

Herkese iyi günler ve hayırlı işler.
Saygılarımla
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Aslında cevap sorunun içindeydi. Yani uzak yakın düşünmeden VT den gereksiz kayıt ve alanları çekmeyeceksin :!: Özellikler select * from ... olayına dikkat etmek gerekiyor. string/varchar alanlara da dikkat etmeli, gerektiğinden uzun tutmamalı ve select lerde gerekmedikçe kullanmamalıdır. VT yi yormamak için de where de kullanılacak alanların (özellikle kayıt sayısı yüksek VT lerde) indekslenmeye çalışılması ağ perfomansı yanında VT perfomansını da artıracak yöntemlerdendir :idea:
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Ali Erdoğan
Kıdemli Üye
Mesajlar: 1026
Kayıt: 11 Şub 2005 02:12
Konum: İstanbul

Mesaj gönderen Ali Erdoğan »

Ali Erdoğan yazdı:Mesela çıktıların sunucudan değil terminale bağlı olan yazıcıdan alınması gerekir veya terminale bağlı bir vebkem i yazılımda nasıl kullanabiliriz?
Bugün şöyle bişey aklıma geldi düşünürken:

Terminale bağlı olan yazıcı sunucuya ağ yazıcısı olarak tanıtılır ve kullanıcı terminalden bu yazıcıya veri gönderebilir. Biraz dolambaçlı bir çözüm ama yazıcı için böyle bir yol izlemek mantıklı olabilir. Ancak vebkem ve diğer donanımlar için nasıl bir çözüm geliştirilebilir onu bilmiyorum.

Birde 30-40 kullanıcı farketmiyor. win2003 de lisansınızın elverdiği derecede terminal sisteme bağlanabiliyor. Ancak her terminal için bir kullanıcı tanımlamanız gerekmekte.

LINUX da ise durum yine aynı: istediğiniz kadar terminal bağlayabilirsiniz. X sunucusu , X istemcisi, şeklinde işliyor sistem ve sunucu ile istemci ayrı bilgisayarlarda olabiliyor. Örneğin Ankara'da bulunan bilgisayardaki veb tarayıcısının pencere görüntüsü İstanbul daki bir bilgisayarın masaüstünde gözükebiliyor (Bunu denemedim. Bkz. Kim Korkar Linux'dan)

O kadar veriyi oradan oraya çekmekten ise şu an bana bu şekil bir çalışma daha mantıklı geliyor. Bundan sonraki sistemlerde bunu denemeyi düşünüyorum.

Bunun yanında yinede kayıt setinde çekilen alanların sayısına ve kayıt miktarına dikkat etmekte her zaman fayda var.
Kullanıcı avatarı
sadettinpolat
Moderator
Mesajlar: 2131
Kayıt: 07 Ara 2003 02:51
Konum: Ankara
İletişim:

Mesaj gönderen sadettinpolat »

terminal service olayinda programi sunucuda calistirip raporun ciktisini yerel makinedeki bir yaziciya otomatik olarak yonlendirebilirsiniz. bu isi kendisi otomatik olarak yapmasi lazim. hic kullanmadim ama bunun boyle olmasi lazim. hatta portlari bile kullanabilmesi lazim. lazim diyorum cunku kesin bir bilgim yok kimseyi yaniltmak istmem zira boyle olmazsa zaten radmin tarzi bir programdan farki kalmiyor.


30 kullanicili senaryo isinde ise senaryolar cok cesitli olabilir. eger yerel bilgisayarin sunucu ile baglantisi surekli olmasi gerekiyorsa , sistem sadece online calisacak sekilde tasarlanmissa ts iyi bir secenek. birkac iddia bayinde bu thin clientlari gordum. buyuk ihtimal bu sekilde bir yapi kullaniyorlar.

simdi adresi hatirlamiyorum ama visual studio ilk ciktigi zaman ilkdenemeyi browser uzerinden yapmistim. yani ms bu teknolojiyi browser uzerinden calisacak hale getirmis. ufak bir eklentiyle browser uzerinden test amacli bu bilgisayarin masaustune baglanip visual studioyu kurcalamistim.
"Sevmek, ne zaman vazgececegini bilmektir." dedi, bana.

---
http://sadettinpolat.blogspot.com/
Akin_Delphi
Üye
Mesajlar: 163
Kayıt: 06 Nis 2006 12:22

Mesaj gönderen Akin_Delphi »

bLue aLonE yazdı:Midas gibi paket paket almak ya da diğer bi deyişle peydel pey verilere ulaşmak için First ve Skip anahtar komutlarını inceleyebilirsin.Forumda konuşulduğunu da hatırlıyorum.Ancak bu noktada bu komutların yönetimi için de iyi bir organizasyon ve senaryo kurman gerekeceğini söyleyebilirim.

Kolay gele..
Sayın BLue aLonE,

Şimdi bu mesajı ilk gönderdiğinizde kendi kendime ne organizasyonu ve senaryosu demiştim. First and Skip komutlarını denemek için bir test yaptım. Gerçekten çok zormuş ve neden organizasyon ve senaryo kelimelerini kullandığınızı şimdi daha iyi anlıyorum. :oops:

Bu denemede şöyle bir sorunla karşılaştım. Seçimleri yapmak için parametreler kullanıyorum. Şöyle ki:

Kod: Tümünü seç

select first :BASLANGICKAYDI skip :ATLANACAKKAYITLAR * from TABLE
Şimdi bu SQL ifadesini parametrelerle oluşturdum. Ancak gördüm ki, bunları çalıştırmak için IBDataSet bileşeninin ilgili parametrelerini ayarladıktan sonra açıp kapamam gerekiyor. Bir şeyleri yanlış mı yapıyorum acaba? :?: :?: :?:

Yani demek istediğim şudur ki, normalde baktığımızda SQL ifadeleri bütün alanları vs.'leri hep parametrelerle oluşturuyor ancak first, prior, next, last, insert vs. komutlarını kullandığımızda açıp kapama yapmaya gerek yok. IBDataSet kolaylıkla bunları alabiliyor. Bir şeyleri yanlış yapıyorum ancak neyi emin değilim.

Saygılarımla,
Akin_Delphi
Üye
Mesajlar: 163
Kayıt: 06 Nis 2006 12:22

Mesaj gönderen Akin_Delphi »

Akin_Delphi yazdı:

Kod: Tümünü seç

select first :BASLANGICKAYDI skip :ATLANACAKKAYITLAR * from TABLE
.......
Bir şeyleri yanlış yapıyorum ancak neyi emin değilim.
Herkese merhabalar
First ve Skip yaklaşımından vazgeçtim. İşleri çok karmaşık hale getiriyor. Delphi içerisinde işin içinden çıkamadım açıkçası. OnAfterScroll'da yukarıdaki parametreleri ayarlıyorum ve açıp kapamam gerekiyor ancak hiç bir performans iyileşmesiyle karşılaşmadım. :?

Bunun yerine arama özelliğiyle yalnızca ilgili kayıtları döndüreceğim.

Bu arada bir konuda yardımınızı isteyeceğim.

SQL ifadesi içerisinde kayıtları filtrelemek için örneğin Where :ALINDIGITARIH = NULL olursa ne olur sıfır kayıt mı döndürülür acaba?

Yani filtrelemek için Where ifadesini sonradan mı eklemeliyim yoksa bu SQL ifadesi içerisinde bulunduğunda ilgili parametreye değer atamamam nedeniyle döndürülen veri seti boş mu olacaktır? Yoksa filtreleme yapmadığımda bu filtreleme ifadesini çıkartmalı mıyım?

Şimdiden teşekkürler.
Saygılarımla
Cevapla