• 11-05-2022, 10:23:13
    #10
    arvensan adlı üyeden alıntı: mesajı görüntüle
    Merhaba hocam burada excel convert derken biraz daha açar mısınız konuyu
    Netsis üzerinden 120.000 ürünü excel ile export edin. elinizdeki excel dosyasını sql dosyasına çevirin. edindiğiniz sql dosyasını tek seferde sunucuya import edin. Bu kadar.

    Problem yaşıyor olmanızın sebebi curl bağlantısı ile cpu ya yük bindirmeniz. her ne kadar sunucu önbelleğini ayarlasanızda siz curl bağlantısını açık tuttuğunuz sürece sağlıklı bir veri aktarımı olmayacak. Bu yüzden yüksek verilerde mutlaka network bağlantısından kaçının ve veriyi localden aktarın.

    şuda bir yöntem. -> curl bağlantısını yapıp tüm verileri tek seferde çekip mysql komutlarını çalıştırmadan localde bir excel yada xml yada json veri dosyası oluşturup daha sonra bu oluşturduğunuz dosya üzerinden ilerleyip mysql komutlarınızı çalıştırırsanız yine sorun ortadan kalkar.
  • 11-05-2022, 10:23:36
    #11
    dev
    Kurumsal Üye
    arvensan adlı üyeden alıntı: mesajı görüntüle
    Merhabalar arkadaşlar,

    PHP ile kendime bir e-ticaret sitesi oluşturuyorum. Netsis üzerinden veri çekiyorum json olarak ve gelen bu veriyi veritabanıma kaydettiriyorum. buraya kadar sorun yok. Kayıtlı 120 bin ürün var şimdi limit vererek 1000 tane çek tamamlayınca 2. sayfaya geç 1000 daha geç diye manuel yaptım 120 bin ürün bitmiyor bitmezde sürekli sürekli bununla kimse uğraşmaz. Var mıdır acaba farklı bir yolu alternatifi. limit alanına 120 bin girince zaman aşımı yapıyor zaten.

    $kac_veri_gelecek=1000;
    $kac_sayfa_gelecek = 1; //

    yukarıda mantık hangi sayfada kaç veri listeletsin.
    Örnek istek sorgum. $url2 = "http://netsis_sunucu_ipadresi_burada/api/v2/items?limit=".$kac_veri_gelecek."&offset=".$kac_sa yfa_gelecek;

    Bundan sonra gelen veriyi foreach alıp mysqli ile veritabanına kaydediyorum.

    Ben bu 120 bin ürünü sürekli yani en azından haftada bir kere güncellemem gerekecek fiyatlar değişiyor çünkü. ama bırak güncellemeyi daha ürünü ekleyemedim bile
    Stabil calismasi icin Queue kullanmanizi tavsiye ederim. " "http://netsis_sunucu_ipadresi_burada/api/v2/items?limit=".$kac_veri_gelecek."&offset=".$kac_sa yfa_gelecek;" seklinde kullandiginiz url'i hazirlayip queue'ya atin.
    Queue'daki verileri isleyecek bir tane php dosyani olsun. while(true) ile surekli queue'da bekleyen is var mi diye kontrol edin, eger var ise birer birer istek atip datalari islersenizi. Eger yok ise sleep atip beklersiniz. Bir de guzel bir loglama yaparsiniz patlayan islemleri kolay takip edersiniz.
    Dosyanin icinde while(true) kullanacaginiz icin sunucuya supervisor (http://supervisord.org/) kurarak gerekli dosyanin surekli calismasini saglayabilirsiniz.
  • 11-05-2022, 10:24:57
    #12
    Üyeliği durduruldu
    profweb adlı üyeden alıntı: mesajı görüntüle
    Offset - Sayfa demek değildir, burada bir sorun yaşıyor olabilirsiniz.
    Hocam adamlar offset belirlemiş bende şaşırdım ama malesef durum bu ama orada bir sıkıntım yok
  • 11-05-2022, 11:01:49
    #13
    Bir tablo olusturun, son cekilen data bilgileri diye

    endpoint: http://netsis_sunucu_ipadresi_burada/api/v2/items
    limit:
    offset:
    created_at

    Bu bilgileri her cronjob isteginde kaydedin. Her cronjob isteginde veritabanindan son veriyi cekip otomatik arttirip degerleri tekrar istek atarsiniz endpoint'e. Bu sayede her islem bitince php tarafindaki process de bitmis olur sunucu limitlerine takilmazsiniz eger sunucu size ait degilse.
  • 12-06-2022, 13:40:44
    #14
    Aradan 1 ay geçmiş ancak aklıma gelen yöntemi paylaşmak istedim. curl ve cronjob ile web sunucusu çok yorulur diye düşünüyorum
    Web sunucusu tarafında bir tane basit api oluşturun. api gelen post isteği veritabanında işleyecek kısım olarak kalsın.
    netsis 'in kurulu olduğu taraf windows server.
    netsis sunucusuna ya da windows server ile aynı ağda başka sıradan bir bilgisayarda olur. 1 adet masaüstü program netopenx ile netsis 'ten bilgileri alıp belirli aralıklarla sürekli api 'ye istek atsın.
    api gelen isteği direk site veritabanınıza işlesin. ben genelde böyle yapıyorum.
    önemli olan netsis 'ten en son hangi bilgiyi çektiğiniz ve nereye işlediğiniz bunu tabiki de kısım kısım yaptırabilirsiniz.
    windows programı tarafında stok kartı olarak 1000-2000 adeti order by update_date desc şeklinde limitli çekin ve web api ye gönderin.
    netopenx ile çekim yaparken her çektiğiniz 1000-2000 her neyse stok kartına update_date alanını güncelleyin. sonraki sorgu da aktarım yapılanlar tekrar karşınıza çıkmasın.
  • 12-06-2022, 16:49:39
    #15
    Üyeliği durduruldu
    Arkadaşlar sorunu şöyle çözdüm belki ihtiyacı olan arkadaşlar faydalanır diye yazıyorum.
    normalde mysqli kullanıyordum pdo bu konuda daha hızlı olduğunu öğrenmiş oldum. Pdo ile netsisten verileri çekiyorum aynı klasörde veri.sql diye dosya oluşturdum. Oraya insert komutu olarak yazdiriyorum. Böylelikle tüm veriler alt alta insert komutu oluyor 122 bin ürünün çekme işlemi ve o dosyaya yazdırmayı yaklaşık 12 saniye sürüyor. İşlem basariliysa bigdump var buyuk dosyaları yüklemek için bir eklenti tek bir PHP dosyası onu indirdim manuel olarak veri.sql dosyasını cagirmasini söyledim. Zaten otomatik yonlenince direkt onu baslatiyorum 3000 3000 veriyi yüklüyor. Ortalama 40 dakika sürüyor ama kopma vs yaşanmıyor güncelleme işlemi içinde aynı şekilde insert yerine updatr komutunu yazdırıp süreci devam ettiriyorum böylelikle tüm sorunlar çözülmüş oldu. Ne curl ile ne de diğer yöntemlerle sorun çözülmedi kopma yaşandı hep.

    Not veriyi guncellerken veritabanında güncelleme diye bir alan olusturdum. SQL alanına da güncelleme 1 ise yap diye seçenek ekledim 0 olanlara işlemi geçiyor biraz daha hızlandı

    Tüm arkadaşlara ilgilerinden dolayı teşekkür ederim