Jump to content

Thread içerisinden Veritabanı Değişiklik Kontrolü


İbrahim TELCİ

Recommended Posts

Merhabalar. Yeni bir UniGUI kullanıcısıyım. Trial sürümde gerekli denemelerimi yaptıktan sonra bugün lisanslı kullanıcılar arasında yerimi aldım. Birkaç sorum olacaktı?

MSSql veritabanı kullanıyorum. UniDAC veritabanı nesnelerini kullanıyorum. Nesneleri MainForm üzerine yerleştirdim. 1 Connection nesnem 1 adette Query nesnem var. Sayfa açıldığında ThreadTimer nesnesi içerisinden query ile vertabanını ayarlanan sürede (2 sn) kontrol ediyorum bir değişiklik var ise ekrandaki verileri yeniliyorum. 

  1. Bu çalışma mantığı doğumudur? Bağlantı nesnelerini ThreadTimer nesnesi içerisinde her sorguda oluşturmam daha mı doğru olur? 
  2. Birde forumda yaptığım araştırmalarda bağlantı nesnelerinin MainModule içerisine yerleştirmenin daha doğru olacağı söyleniyor ama MainModule içerisindeki nesnelere Threadtimer içerisinden erişmeye çalıştığımda hata alıyorum.
  3. Bu uygulama yaklaşık 200 ekran üzerinde aynı anda açık olacaktır. Bu durumda dikkat etmem gereken kritik noktalar varmıdır? SessionRestrict =srOnePerIP olarak ayarlı. Bunlar bilgilendirme ekranları olarak kullanılacak. Herhangi bir kullanıcı etkileşimi yok. Network koptuğunda bu 200 ekran yeniden bağlanmaya çalıştığında session hatası alırmıyım. HyperTerminal mi yoksa IIS mi kullanmalıyım hangisi daha hızlı ve sağlıklı olur?
Link to comment
Share on other sites

Merhaba,

Benim önerim her sessionda timer la db bağlantısı, server a aşırı ve gereksiz yük bindirecektir. heleki 2sn de bir.Bu linkteki örnekleri ve wensocket örneklerini incele. db tek ise, her bağlantı db kotrolü yapacağına, tek bir yer db kontrolünü yapıp, sessionlara mesaj göndermesi performas için daha mantıklı. Bu işlemler sırasında, sistem gecikmelerinide bertaraf edecek kotroller koyman yerinde olacaktır.

hyper terminal değilde hyperserver olabilir mi o :) sanırım 200 kullanıcıyı geçmiyeceksen, buna gerek kalmaz. ama IIS kullanman daha mantıklı.

Link to comment
Share on other sites

ServerModule üzerinde çalıştıracağım bir thread ile kontrol etsem ve değişiklik var ise bunu global bir değişkene aktarsam. diğer ekranlar bu değişkeni kontrol ederek güncelleme yapsalar bu doğru bir yaklaşım olur mu? Sever module üzerinde çalışacak bir thread sistemi çok yorar mı? Yoksa ayrıca bir uygulamamı hazırlamam gerekiyor. Winsocket uygulaması sadece bir değişikliği kontrol etmek için daha uğraşlı gibi geliyor bana. Birde sadece ilişkili sessiona özel bir mesaj

Link to comment
Share on other sites

Merhaba,

uniGUI ile başlarken, eğer daha önce göz atmadıysanız geliştirici klavuzunu tümü ile incelemenizi öneririm. Database bağlantıları ve farklı thread lerin çakışmaması için MainForm, MainModule, ServerModule gibi nesnelere nasıl erişileceği ve diğer konular çok iyi açıklanmış durumda.

Uygulamanızda birden çok form olacaksa veritabanı nesnesini MainModule üzerine yerleştirin. Query nesnesini form ya da MainModule üzerine yerleştirin.

Bu arada ServerModule üzerinde rahatça thread başlatabilirsiniz sıkıntı olmaz ben sürekli kullanıyorum.

procedure TUniServerModule.UniGUIServerModuleCreate(Sender: TObject);

içinden thread inizi başlatın

        FAPIRefreshThread := TAPIRefreshThread.Create(True);
        FAPIRefreshThread.FreeOnTerminate := True;
        FAPIRefreshThread.Start;

 

Kapanırlen de öldürün gitsin.

procedure TUniServerModule.UniGUIServerModuleBeforeShutdown(Sender: TObject);
begin
  if Assigned(FAPIRefreshThread) then
  begin
    FAPIRefreshThread.Terminate;
    Log.Debug('APIRefreshThread thread terminated', LOG_MAIN);
  end;

Kolay gelsin.

** Diğer sorunuza gelince 200 ekrana aynı data mı akacak yoksa hepsinin kendi sorgusu ayrı mı anlayamadığım için net bir cevap veremeyeceğim.

 

Link to comment
Share on other sites

13 hours ago, İbrahim TELCİ said:

Yönlendirmen için teşekkür ediyorum. Yalnız herhangi bir link göremedim cevabında. Unuttun galiba bağlantı koymayı :)

Rahmetli pederi dinlemedim, oğlum yaşlanmayın derdi :)

http://forums.unigui.com/index.php?/topic/14257-uniservermodulegetsession-new-powerfull-feature/

 

Link to comment
Share on other sites

11 hours ago, İbrahim TELCİ said:

ServerModule üzerinde çalıştıracağım bir thread ile kontrol etsem ve değişiklik var ise bunu global bir değişkene aktarsam. diğer ekranlar bu değişkeni kontrol ederek güncelleme yapsalar bu doğru bir yaklaşım olur mu? Sever module üzerinde çalışacak bir thread sistemi çok yorar mı? Yoksa ayrıca bir uygulamamı hazırlamam gerekiyor. Winsocket uygulaması sadece bir değişikliği kontrol etmek için daha uğraşlı gibi geliyor bana. Birde sadece ilişkili sessiona özel bir mesaj

Global değişkenle kontrol bana mantıklı gelmiyor. sence hangisi mantıklı? aynı makinada çalışan 200 thread mi? yoksa çalışan 1 thread mi? yukarıdaki unuttuğum :) linki incele, ana thread içinden sessionlar da bir değişkeni tetikletmek bana daha mantıklı geliyor. Tabi burada Mehmet inde belirttiği gibi sessionlarda yapıacak işlemlerde önemli, hepsi aynı query çalıştıracaksa, farklı işlemler yapacaksa vs vs. bu kısım programcılık kısmı, yani yoğurt yeme şekli :)

Link to comment
Share on other sites

Cevaplar için çok teşekkür ediyorum. Benim için gayet faydalı dönüşler oldu. Şu an ServerModule üzerinde çalışan tek bir UniThreadTimer ile yükü epeyce azaltmış oldum. Her oturumun veritabanından aldığı kendine ait bir ID si var. Oturumları tarayarak değişiklik olan oturumdaki yerel bir değişkene true değeri gönderiyorum. Böylelikle oturumlar sadece kendilerine ait bir değişiklik varsa veri tabanına bağlanıp güncel veriyi çekiyorlar. Sorgu sayısında epeyce bir azalma oldu. yaklaşık 200/1 oranında :)

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...