Duyuruyu Kapat
Facebook Gözat
Twitter Gözat

Büyük post verisini database e bölüm bölüm atma

Konu, 'PHP' kısmında alivepro tarafından paylaşıldı.

  1. alivepro

    alivepro Yeni Üye

    Kayıt:
    24 Ağustos 2015
    Mesajlar:
    23
    Beğenilen Mesajlar:
    2
    Merhaba arkadaşlar,

    Yaklaşık 100.000 üyeye sms mesajı gönderilmesi için bir script yazdım, ancak veri büyük olduğu için post ederken sıkıntı yaşıyorum, yani post verisini mysqlde tek bir satıra yazdığı için sıkıntı oluyor,
    ben bu post verisini, post ederken 10.000 , 10.000 otomatik olarak bölebilirmiyim, yani 10.000 sms talebini 1 satıra 10.000 sms talebini 1 satıra gibi. Örnek mysql verisinin görüntüsünü ekliyorum.

    yardımlarınız için şimdiden teşekkürler.

    Bu arada cron job çalıştığı için satırları tek tek gönderiyor, bu yönden bir sıkıntı yok.
    test_message.JPG
     
    Son düzenleme: 28 Nisan 2018
  2. dinlex

    dinlex Aktif Üye

    Kayıt:
    23 Aralık 2016
    Mesajlar:
    341
    Beğenilen Mesajlar:
    88
    Şehir:
    Hatay
    Benim o kadar bilgim yok ama kendimce bir yorumda bulunayım madem cevap veren olmamış.
    Bu tür büyük işlemlerde sanırım GET yöntemiyle sayfa yönlendirmesi yapılıyor. Ya da javascript ile post ediyorlar parçalı olarak.

    Sadece PHP ile GET yoluyla yapılacaksa şu şekilde olabilir.
    sms.php?sayfa=1&mesaj=merhaba olarak çalıştırırsınız linkinizi.

    Bunu get olarak çağırdığınız sms.php sayfasında da
    $limit = 10000;
    $mesaj = $_GET["mesaj"];
    $sayfa = $_GET["sayfa"];
    $sonraki_sayfa = $sayfa + 1;
    $onceki_sayfa = $sayfa - 1;
    $gonderilenler = $onceki_sayfa * $limit;

    Mysqli ile sms atılacak kişileri çekerken de LIMIT $gonderilenler, $limit şeklinde çekip bu ilk 10bin taneyi veritabanına kaydedersiniz.

    Sonra da eğer insert edilirse yönlendirme ile sms.php?sayfa=$sonraki_sayfa&mesaj=$mesaj linkine yönlendirirsiniz 2 saniye sonra.
    Böylece her iki saniyede bir 10bin sms yollar. Tabi güvenlik işlemlerini hallerdersiniz. $mesaj değişkenini veritabanından da çekebilirseniz daha sağlıklı olur sanırım. Bir de kontrol olarak IF() ile gönderilecek toplam üye sayısını ve sms gönderilen üye sayısını kontrol etmek gerek. Yoksa gereksiz yere yüzlerce kez tekrarlar kendini.

    Tabi bu benim amatörce düşüncem. Lütfen yanınızda bi büyüğünüz olmadan evde denemeyiniz... :D

    Eğer bunları biliyorsanız ve ben konuyu yanlış/eksik anlayıp basite aldıysam da affola...
     
    alivepro bunu beğendi.
  3. alivepro

    alivepro Yeni Üye

    Kayıt:
    24 Ağustos 2015
    Mesajlar:
    23
    Beğenilen Mesajlar:
    2
    Benim post yolu ile yapmam gerek bunu, birde sayfalama değil 10000 adet kayıttan sonra yeni row a geçmesi gerek.
     
  4. dinlex

    dinlex Aktif Üye

    Kayıt:
    23 Aralık 2016
    Mesajlar:
    341
    Beğenilen Mesajlar:
    88
    Şehir:
    Hatay
    Anladım, post edince tek seferde sonuç almak istiyorsunuz. Ben şu açıdan düşündüm, 100bin taneyi tek seferde veritabanına kaydedince sunucu error verebilir diye. Daha önceden 20bin üyenin olduğu sunucuda (hosting de olabilir tam hatırlamıyorum) 20bin üyenin hepsine tek post ile mesaj atmaya çalıştık. Birkaç saniye bekledikten sonra error verdi sistem. Tek seferde okadar veriyi işleyemedi zaman aşımına uğradı. Veya buna ne isim veriliyorsa işte. O yüzden sayfa sayfa yapıp ayrı ayrı kaydetmek daha iyi olabilir dedim :)

    Eğer sunucunuz 100bin taneyi kaydedebilecekse bir döngüyle yapabilirsiniz o zaman.

    $parça_sayisi = ceil(100000/10000);
    for(i = 0; i==$parça_sayisi; i++){
    // işlemler
    }

    Benden bu kadar, başka bilgim yok. Artık bilen biri yardımcı olur inşallah ama burda pek üye kalmadı kapanıp açılamalardan dolayı.
     
    alivepro bunu beğendi.