• 09-01-2016, 21:33:56
    #1
    Bir siteden 350bin veri çekip , kendi sitemize ekleyip her gün veya 2-3 günde bir güncelleme yapmaya çalışıyoruz,

    Bunu php ile yazdığımda timeout alıyor veya çok yavaş çekiyorum.Bu sorunları yaşamamak için c# ile veri çekip kendi pc imde mssql veritabanına kaydediyorum. Daha sonra bunu php ye üç yöntemle gönderiyorum.

    Yöntem 1: MSSQL den tek tek veri çekip PHP ye get form ile gönderiyorum
    Yöntem 2: MSSQL den tek tek veri çekip insert scripti generate ediyorum.Bunuda json ile gönderiyorum.
    Yöntem 3: MSSQL den veri çekip 5bin li veriler şeklinde JSON ile gönderiyorum.


    Karşılaştığım sorunlar, c# da kendi pc im üzerindeki mssql veritabanında 350bin veriyi select ile alırken çok yavaş çalışıyor, en az 1-2 saat sürüyor belki daha da fazla. Bunun haricinde JSON ile gönderdiğimde timeout bol bol alıyorum.Insert scripti oluşturup .sql dosyası generate ettiğimde dosya boyutu çok büyük oluyor.

    Yukarda yazdıklarımı hep deneme yanılma yoluyla bulmaya çalıştım ve çalışmaya devam ediyorum. Bu konuda tecrübeli olan arkadaşlardan destek almak istiyorum. Lokalime phpmyadmin kurup orada işlem yapmayı düşündüm daha hızlı olabilir belki diye ama bilemiyorum sonucu, Sizce nasıl bir yöntem kullanmalıyım _?
  • 09-01-2016, 21:43:48
    #2
    async & await olayını bir araştırın hocam ve databaseden verileri okurken aynı zamanda okunan veriyi anında post edin bu şekilde yaptığınızda işlemleriniz hem kasmayacaktır hemde C# tarafı çok akıcı bir şekilde işleyecektir
  • 09-01-2016, 22:29:58
    #3
    emrebeyoglu adlı üyeden alıntı: mesajı görüntüle
    async & await olayını bir araştırın hocam ve databaseden verileri okurken aynı zamanda okunan veriyi anında post edin bu şekilde yaptığınızda işlemleriniz hem kasmayacaktır hemde C# tarafı çok akıcı bir şekilde işleyecektir
    onu yazmayı unuttum , thread kullanıyorum 8 farklı metod yazdım her thread 1 metodu çağıracak şekilde yinede yavaşlık söz konusu

    --R10.NET; Flood Engellendi -->-> Yeni yazılan mesaj 22:29:58 -->-> Daha önceki mesaj 21:54:24 --

    emrebeyoglu adlı üyeden alıntı: mesajı görüntüle
    async & await olayını bir araştırın hocam ve databaseden verileri okurken aynı zamanda okunan veriyi anında post edin bu şekilde yaptığınızda işlemleriniz hem kasmayacaktır hemde C# tarafı çok akıcı bir şekilde işleyecektir
    sizin kullanmış olduğunuz hızlı database okuma kodu örneği varmıydı hocam
  • 10-01-2016, 00:21:42
    #4
    senin bilgisayarında sıkıntı olabilir hocam,

    şirketteki bilgisayara 200 bin veriyi ekliyorum 5 saniyede bitiyor, select sorgusu da bir kaç saniyede..

    mssql kullanıyoruz.. gerçi bahsettiğim süreler direk sql üzerinden sorgulama süreleri.. ama c#*üzerinden denesem de o kadar sürmez hocam.. belki paging tarzı bir şeyler yapılabilir multi-threading tabanlı..

    ama en basit yol, db yi taşı..

    ya da hız arıyorsan nosql çözümlerine bak.
  • 10-01-2016, 01:13:57
    #5
    Kimlik doğrulama veya yönetimden onay bekliyor.
    İşlemlerin yavaş olmasının bir çok nedeni olabilir kesin bir şey söylemek zor ama farklı bir yöntem olarak bulk insert işlemini araştırabilirsiniz.
  • 10-01-2016, 01:16:50
    #6
    İlk önce bu işlem için php, elini ayağını birbirine karıştırmaktan başka birşey yapmaz.
    Mutlaka ki birebir çalışabilecek bir aktarıma ihtiyacın var. İşlemler çok parçalanıyor arada ekstra veritabanı ve manuel işlemler sana her halükarda x2 vakit kaybettiriyor fakat bunları geçelim select olayında biryerlerde ciddi problemler olduğu aşikar. Bu problemi bulup çözmek ne kadar vaktini alır bilemiyorum ama nodejs+nosql ile asenkron çalışan iki kademeli bir web servis ile koşturmak, bu problemi çözmek için ideal duruyor.
  • 10-01-2016, 02:00:41
    #7
    ertan2002 adlı üyeden alıntı: mesajı görüntüle
    senin bilgisayarında sıkıntı olabilir hocam,

    şirketteki bilgisayara 200 bin veriyi ekliyorum 5 saniyede bitiyor, select sorgusu da bir kaç saniyede..

    mssql kullanıyoruz.. gerçi bahsettiğim süreler direk sql üzerinden sorgulama süreleri.. ama c#*üzerinden denesem de o kadar sürmez hocam.. belki paging tarzı bir şeyler yapılabilir multi-threading tabanlı..

    ama en basit yol, db yi taşı..

    ya da hız arıyorsan nosql çözümlerine bak.
    select i mssql de 6 sn de çekiyorum bende ama c# üzerinden çalıştırıp bir string değişkene attırıyorum, çok uzun sürüyor 1-2 saatte bile bitmiyor
    çalıştırdığım kod aşağıdaki;
    SqlConnection cnna = new SqlConnection("server=.;Database=data;Integrated Security=true"); // Bağlantı oluştur
    cnna.Open();
    
    SqlCommand sorgu = new SqlCommand();
    sorgu.Connection = cnna;
    sorgu.CommandType = CommandType.StoredProcedure;
    
    sorgu.CommandText = "sel_Request";
    
    SqlDataReader reader = sorgu.ExecuteReader();
    Int32 say = 0;
    while (reader.Read())
    {
      say++;
      sorgum += "INSERT INTO `Request` VALUES(null..)";
    }
    cnna.Close();
  • 10-01-2016, 12:06:37
    #8
    Anladım hocam,

    Büyük ihtimalle tablonun tasarımı ile ilgili problemler var + sorgunu tam bilmiyorum ama eğer kompleks bir sorgu ise bu da cost'u arttırır.

    http://stackoverflow.com/a/28271028/1022138

    burada bir kaç tane öneri var, denersen düşürür.


    Ayrıca test amaçlı olarak
    linq to sql
    ve entity framework (linq to entities)
    ile verileri çeker misin.

    ikisi de stored procedure ları destekliyor, hem o şekil hem de direk sorguyu linq üzerinden yaparak dener misin, performansı merak ediyorum
  • 13-01-2016, 16:35:31
    #9
    Verileri PHP tarafında MySql'e mi yazdırıyorsunuz?