Java Multithreading Database İşlemleri
-
Merhaba,
Javada tablodan verileri okuyup bir apiye göndermem gerekiyor. Tabloda 3 milyon kayıt var. Öncesinde dataları alıp işlemem gerekiyor. Nasıl ilerlemem gerektiği konusunda bir fikir arıyorum. Datayı listeye atıp ilerleyebilirim(memory sorunu oluşmaz ise)
ya da multithreading ile okumam gerekiyor ki bu yöntem daha sağlıklı olacak gibi. Multithreadde datayı nasıl okuyabilirim? Eğer bir satır okundu ise o satır atlanmalı. Bunu nasıl yapabilirim? (umarım anlatabildim :))
-
-
yolbulucu bunu yazdı
cevapta verdiği url açılmıyor :( sql worker mı çözüm diyorsun hocam?
-
Hocam Bir kuyruk oluştur datayı bu kuyruğa ekle. Her Thread o Kuyruktan bir data çeksin. Data kalmayınca Thread Durumlarını bir bir kontrol edersin. Veya Apiye gönderiyorsan bitmesinin bir önemi yoktur senin için.
Yapacağın işlemi kısaca anlatırsan belki güzel algoritma üretebiliriz multiThread'e bile ihtiyacın kalmaz. Yada MultiThread algoritmanın karmaşıklığını arttırır bunu bilemeyiz.
-
Tabloda 3 milyon kayıt var. Bunları tek seferde okumam isteniyor. Okuduktan sonra apiye göndericem fakat öncesinde datalar üzerinde işlemler yapıp bir yerde saklamam gerekiyor. ArrayList diye düşündüm. Fakat kayıt sayısı arttıkça memory hatası gelecektir. Datayı apiye gönderirken de 20000 kayıt aynı anda gönderiyorum. Kayıt gönderdikçe listeyi sıfırlayıp bu sorunu aşabilirim çalışır da uygulama. Ama yöntem olarak çok iyi gelmedi bana.
Daha önce bir .net projesinde görmüştüm. Her thread tablodan bir kayıt çekiyordu fakat aynı kayıtları almamayı nasıl sağlıyorlardı onu hatırlayamadım. İstediğim aslında birinci threat birinci satırı okuduysa o satır tekrar okunmasın. Böyle bir yöntem olabilir mi bunu bilemedim.
Senin söylediğin kuyruk kullanmakta mantıklı aslında
edit: Thread pool kullanıcam sanırım. @MhmdAlmz dediğin gibi kuyruktan çekse threadler böylece iş kolaca biter.
Peki task classlarına bu kuyruğu constructorda göndermeli miyim yoksa bir örnek var mı paylaşabileceğiniz?
kajmerpac tarafından 28/Eyl/18 10:54 tarihinde düzenlenmiştir