Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
MySQL verileri yenilerken kasması ?
#11
(13-10-2018, Saat: 19:46)Fesih ARSLAN Adlı Kullanıcıdan Alıntı: Merhaba,
Veri tabanı işlemlerinde tek bir asenkron metod ile işi çözmek çok zor.
Sorgu ile bağlantılı Query, Connection ve hatta DataModule' ün bile bu thread halkasına dahil edilmesi gerekiyor.

Artık Zamanla öğreneceğim(z) hocam  Shy 
o kadar yabancı geliyor ki şuanda Smile)))
Cevapla
#12
Merhaba
Önerim thread'e alternatif değildi, yanlışnanlaşılmayı ortadan kaldırmak için yazma gereği duydum; thread içerisinde veritabanı çağrısını minimize etmek şeklinde ek önlem demek istemiştim. 

Thread yazılımı, thread içindeki veriyi azaltmak ağ bağlantınızı rahatlatacaktır.
Saygılarımla
Muharrem ARMAN

guplouajuixjzfm15eqb.gif
Cevapla
#13
(13-10-2018, Saat: 19:46)Fesih ARSLAN Adlı Kullanıcıdan Alıntı: Merhaba,
Veri tabanı işlemlerinde tek bir asenkron metod ile işi çözmek çok zor.
Sorgu ile bağlantılı Query, Connection ve hatta DataModule' ün bile bu thread halkasına dahil edilmesi gerekiyor.

Evet öyle maalesef benim kullandığım mydac komponetleri thread safe değil, bu sebebten çok dikkatli olmak gerekiyor. Her threadin kendi connectionunu oluşturması en sağlıklısı

(13-10-2018, Saat: 19:53)BY-HAYALET Adlı Kullanıcıdan Alıntı:
(13-10-2018, Saat: 19:46)Fesih ARSLAN Adlı Kullanıcıdan Alıntı: Merhaba,
Veri tabanı işlemlerinde tek bir asenkron metod ile işi çözmek çok zor.
Sorgu ile bağlantılı Query, Connection ve hatta DataModule' ün bile bu thread halkasına dahil edilmesi gerekiyor.

Artık Zamanla öğreneceğim(z) hocam  Shy 
o kadar yabancı geliyor ki şuanda Smile)))

Öyle zaman ve emek gerekiyor ben yıllardır Tuğrul abinin thread makalesini okuyorum yeni yeni anlamaya başladım, ilk aralar okuyup yarıda bırakıyorum hiç bir şey anlamadığım için Smile
WWW
Cevapla
#14
(12-10-2018, Saat: 21:49)mrmarman Adlı Kullanıcıdan Alıntı: Merhaba.

- Veritabanı sorgusu için 100 milisaniye interval çok sık olduğunu değerlendiriyorum. 

- Değerlendirirseniz bir önerim olacak 

- Thread güzel fikir, bu sizin yazılımınızın çalıştığı katmanda rahatlama olarak işe yarayacaktır. Ancak sunucunuza / ağınıza da nefes aldırmak için bir önerim olacak.

- Sık sorgu yaptığınız (A) aşamasındaki sorguda Select satırında tüm talebinizi değil en fazla (1) veya (2) alan çekecek küçük çaplı sorgular ile önce güncel veri olup olmadığını öğrenip, eğer güncel veri varsa  ancak o zaman ikinci atımda (B) aşamasına geçip asıl geniş sorguyu yapın. Bu size performans olarak geri dönecektir.

Ustadîma katılıyorum. 100 ms veritabanı için çok hızlı. Android sistem zaten çıt kırıldım onun için daha çok hızlı saat aralığında yenileme uygun olacaktır Smile
kisisel_logo_dark.png
WWW
Cevapla
#15
(13-10-2018, Saat: 21:19)yhackup Adlı Kullanıcıdan Alıntı:
(13-10-2018, Saat: 19:46)Fesih ARSLAN Adlı Kullanıcıdan Alıntı: Merhaba,
Veri tabanı işlemlerinde tek bir asenkron metod ile işi çözmek çok zor.
Sorgu ile bağlantılı Query, Connection ve hatta DataModule' ün bile bu thread halkasına dahil edilmesi gerekiyor.

Evet öyle maalesef benim kullandığım mydac komponetleri thread safe değil,  bu sebebten çok dikkatli olmak gerekiyor. Her threadin kendi connectionunu oluşturması en sağlıklısı

(13-10-2018, Saat: 19:53)BY-HAYALET Adlı Kullanıcıdan Alıntı: Artık Zamanla öğreneceğim(z) hocam  Shy 
o kadar yabancı geliyor ki şuanda Smile)))

Öyle zaman ve emek gerekiyor ben yıllardır Tuğrul abinin thread makalesini okuyorum yeni yeni anlamaya başladım,  ilk aralar okuyup yarıda bırakıyorum hiç bir şey anlamadığım için Smile


birde sadece 1 yıldır uğraşan beni düşündüğümüzde bu "yıllardır" kavramı "asırlar"a dönüşebilir Big Grin Big Grin
tuğrul hocanın makalelerine defalarca baktım fakat şuanlık nafile.
artık zaman ve emek dediğiniz gibi Angel

(14-10-2018, Saat: 01:51)Halil Han Badem Adlı Kullanıcıdan Alıntı:
(12-10-2018, Saat: 21:49)mrmarman Adlı Kullanıcıdan Alıntı: Merhaba.

- Veritabanı sorgusu için 100 milisaniye interval çok sık olduğunu değerlendiriyorum. 

- Değerlendirirseniz bir önerim olacak 

- Thread güzel fikir, bu sizin yazılımınızın çalıştığı katmanda rahatlama olarak işe yarayacaktır. Ancak sunucunuza / ağınıza da nefes aldırmak için bir önerim olacak.

- Sık sorgu yaptığınız (A) aşamasındaki sorguda Select satırında tüm talebinizi değil en fazla (1) veya (2) alan çekecek küçük çaplı sorgular ile önce güncel veri olup olmadığını öğrenip, eğer güncel veri varsa  ancak o zaman ikinci atımda (B) aşamasına geçip asıl geniş sorguyu yapın. Bu size performans olarak geri dönecektir.

Ustadîma katılıyorum. 100 ms veritabanı için çok hızlı. Android sistem zaten çıt kırıldım onun için daha çok hızlı saat aralığında yenileme uygun olacaktır Smile


bende o zaman napayım süreyi uzatacağım  Smile Angel ( yani şimdilik Idea taa ki Thread öğrenene kadar...)
Cevapla
#16
yukarıda üstad mrarman kardeşimiz en önemli noktalardan birini söylemiş. güncel verilerin özel olarak denetlenmesi gerekiyor.

bunun için genelde "timestamp" türünde veri alanları var. tablodaki değişen her satırda bu alanı artan şekilde yeniliyor. böylece son değişim numarasını alıp bundan büyük olanları getirdiğinizde hem değişenleri hem de yenileri alıyorsunuz.

ben sql serverda bu alanı kullanmıştım ve çok işime yaramıştı. bunun veritabanı bazında damga üretenleri de olabiliyor.

diğer yandan hemen her işte farklı optimizasyon kuralları uygulamak lazım.

milyonluk tablodan sürekli sorgu çekmek işimize gelmeyebilir. belki de her yeni zaman damgasını ayrı bir "ayar" tablosunda tek satırda tutmak da farklı bir çözüm olabilir. hatta tablo yerine vt sunucunun global bir değişkeni de olabilir.
Cevapla
#17
iyi günler,

Thread kullanımını işimi görecek şekilde çözdüm ve benim gibi bir başkasına yardımı olur diye paylaşmak istiyorum ;

Bir video vasıtası ile çözdüm ve oradaki kodlar ;

Type kısmına ; 

type


Thread1 = class(TThread)
   protected
   procedure Execute ; override;
 end;


Public kısmına ;

public

 workerthread : Thread1 ;


ve oluşturduğumuz procedure'ün koduna yenileme kodunu ekliyoruz ;

procedure Thread1.execute ;
begin
Form1.UniQuery1.Refresh ;
end;

( dikkat edilmesi gereken nokta ; procedure bir forma bağlı olmadığındanmıdır bilmem ama kod Query'nin bulunduğu formName'i ile yazılması gerektıği. )

Thread'ın işlemleri başlatması için gerekli kodu ben formshow ve durdurmak için onshow event'ına yazdım ;

Onshow kısmına ;

workerthread := Thread1.create(false);

OnClose kısmına ;

workerthread := Thread1.create(true);


gerisi sizin ne amaçla kullanacağınıza kalmış  Shy

ben buldum denedim uyguladım işime yaradı ve paylaşıyorum Blush

Ne nedir ? gibisinden sorulara cevap verebilecek bilgim olmadığını belirteyim.

Ve ek olarak merak ettiğim husus ;

Thread çalışmaya başladığında ne kadar sürede bu işlemleri gerçekleştiriyor ?

bilen birisinin cevaplamasını isterim.
Cevapla
#18
Hatalı bir kullanım. Ana thread haricindeki bir thread içinden ana thread üyelerine erişim sıkıntılıdır. Çok kanallılık zor değildir, ancak tahmin edildiği kadar kolay da değildir. Senkronizasyon bu işin en dikkat edilmesi gereken can damarıdır.
Mal sahibi, mülk sahibi
Hani bunun ilk sahibi ?
Mal da yalan mülk de yalan
Var biraz da sen oyalan...
WWW
Cevapla
#19
(31-10-2018, Saat: 15:14)Mr.Developer Adlı Kullanıcıdan Alıntı: iyi günler,

Thread kullanımını işimi görecek şekilde çözdüm ve benim gibi bir başkasına yardımı olur diye paylaşmak istiyorum ;

Bir video vasıtası ile çözdüm ve oradaki kodlar ;

Type kısmına ; 

type
You

Thread1 = class(TThread)
   protected
   procedure Execute ; override;
 end;


Public kısmına ;

public

 workerthread : Thread1 ;


ve oluşturduğumuz procedure'ün koduna yenileme kodunu ekliyoruz ;

procedure Thread1.execute ;
begin
Form1.UniQuery1.Refresh ;
end;

( dikkat edilmesi gereken nokta ; procedure bir forma bağlı olmadığındanmıdır bilmem ama kod Query'nin bulunduğu formName'i ile yazılması gerektıği. )

Thread'ın işlemleri başlatması için gerekli kodu ben formshow ve durdurmak için onshow event'ına yazdım ;

Onshow kısmına ;

workerthread := Thread1.create(false);

OnClose kısmına ;

workerthread := Thread1.create(true);


gerisi sizin ne amaçla kullanacağınıza kalmış  Shy

ben buldum denedim uyguladım işime yaradı ve paylaşıyorum Blush

Ne nedir ? gibisinden sorulara cevap verebilecek bilgim olmadığını belirteyim.

Ve ek olarak merak ettiğim husus ;

Thread çalışmaya başladığında ne kadar sürede bu işlemleri gerçekleştiriyor ?

bilen birisinin cevaplamasını isterim.

Thread işlemleri hızlandırmaz. Sadece ana thread uzerindeki yükü alır. Normal işlem süresi bittiğinde thread o zaman sonucu sana verir.

Daha açıklayıcı olmak gerekir ise thread ile normal bir işlemin süresini azaltmasın. Sadece bilgisayar bir kanaldan birçok işi yaparak yavaşlamak yerine başka ek bir kanaldan yaparak işlemleri kendi işlem süresince tamamlar. Belli bir tanımı yoktur.
kisisel_logo_dark.png
WWW
Cevapla
#20
(31-10-2018, Saat: 17:49)Halil Han Badem Adlı Kullanıcıdan Alıntı:
(31-10-2018, Saat: 15:14)Mr.Developer Adlı Kullanıcıdan Alıntı: iyi günler,

Thread kullanımını işimi görecek şekilde çözdüm ve benim gibi bir başkasına yardımı olur diye paylaşmak istiyorum ;

Bir video vasıtası ile çözdüm ve oradaki kodlar ;

Type kısmına ; 

type
You

Thread1 = class(TThread)
   protected
   procedure Execute ; override;
 end;


Public kısmına ;

public

 workerthread : Thread1 ;


ve oluşturduğumuz procedure'ün koduna yenileme kodunu ekliyoruz ;

procedure Thread1.execute ;
begin
Form1.UniQuery1.Refresh ;
end;

( dikkat edilmesi gereken nokta ; procedure bir forma bağlı olmadığındanmıdır bilmem ama kod Query'nin bulunduğu formName'i ile yazılması gerektıği. )

Thread'ın işlemleri başlatması için gerekli kodu ben formshow ve durdurmak için onshow event'ına yazdım ;

Onshow kısmına ;

workerthread := Thread1.create(false);

OnClose kısmına ;

workerthread := Thread1.create(true);


gerisi sizin ne amaçla kullanacağınıza kalmış  Shy

ben buldum denedim uyguladım işime yaradı ve paylaşıyorum Blush

Ne nedir ? gibisinden sorulara cevap verebilecek bilgim olmadığını belirteyim.

Ve ek olarak merak ettiğim husus ;

Thread çalışmaya başladığında ne kadar sürede bu işlemleri gerçekleştiriyor ?

bilen birisinin cevaplamasını isterim.

Thread işlemleri hızlandırmaz. Sadece ana thread uzerindeki yükü alır. Normal işlem süresi bittiğinde thread o zaman sonucu sana verir.

Daha açıklayıcı olmak gerekir ise thread ile normal bir işlemin süresini azaltmasın. Sadece bilgisayar bir kanaldan birçok işi yaparak yavaşlamak yerine başka ek bir kanaldan yaparak işlemleri kendi işlem süresince tamamlar. Belli bir tanımı yoktur.

PPL, hariç. (İşi hızlandırmak amacıyla kullanılan bir yöntemdir.)
DelphiCan'dır!
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Delphi 12 Kod yazarken kasması Mr.X 8 1.881 09-12-2023, Saat: 09:24
Son Yorum: engerex
  Amazondan verileri çekerken filtreleme vedat33 2 1.592 10-03-2023, Saat: 09:44
Son Yorum: vedat33
  Android için derlememede MySQL hatası ferhatcelik 1 1.180 16-03-2021, Saat: 22:06
Son Yorum: ferhatcelik
  [ÇÖZÜLDÜ] delphi 10.4 uzak mysql bağlantı shooterman 8 4.820 19-11-2020, Saat: 13:56
Son Yorum: Abdullah ILGAZ
  IDE kasması ? Mr.Developer 7 4.270 29-04-2020, Saat: 21:27
Son Yorum: Mr.Developer



Konuyu Okuyanlar: 1 Ziyaretçi