Şimdi Ara

MSSQL İle CPU Arasındaki İlişki İle Alakalı İnce Bir Soru

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
15
Cevap
0
Favori
504
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • Merhaba arkadaşlar . Mobil uygulama geliştiriyorum . Mobil uygulamamda web service kullanıyorum. Web service ve veritabanı sunucusu aynı bilgisayarda. Soruma gelecek olursam. veritabanı kısmında bir tabloda yaklaşık günde 8600 adet kayıt oluyor . Yani 10 günün sonunda tablomda 86.000 kayıt oluyor. Mobil uygulama tarafında timer var ve her 10 saniyede bir bu kayıtlardan en yeni olanını ekrana yazdırıyorum . Ekrana sadece en son gelen kayıtı yazdırıyorum ama mantık olarak tablonun tamamını sorgulayıp en yeni olanını getiriyor. Durum böyle olunca 86.000 kayıtta da sorgulama yaptığı için cpu tarafında zorlama yapıyor. Ben günlük olarak kayıtları siliyorum fakat silmem gerekiyor. Çözüm olarak ne yapılabilir ?

    < Bu ileti mobil sürüm kullanılarak atıldı >



  • anladigim kadariyla en guncel olan disindaki tum kayitlarin bir onemi yok degil mi? egerr oyle ise mysql e bile gerek yok. direk overwrite ede ede file systemdeki bir dosyada bile tutabilirsin bu datayi.



    < Bu mesaj bu kişi tarafından değiştirildi Guest-E41040413 -- 3 Temmuz 2017; 3:44:18 >
  • Benimde aklima her yeni gunun verisini yeni bir json dosyasina kaydederek json da calisma geldi. Teknik olarak hangisi daha hizli bilemiyorum sql nosql veritabanlari konusunda daha uzman biri gelir sanirim ben de konuyu takipteyim.

    < Bu ileti mobil sürüm kullanılarak atıldı >
  • merhaba,

    web servislerinde bunu yapmak icin ideal yontem request header'a If-Modified-Since olarak en son sorgu zamanini gondermeniz ve veritabani sorgusunda da son kayit zamani > If-Modified-Since olacak sekilde degistirmek. tabi bu durumda tabloya koydugunuz timestamp alaninini indexlediginizi varsayiyorum ki butun tabloyu sorgulamayin.

    ideal cozum icin sisteminizin tam olarak nasil calistigini da bilmek gerekli. eger cok fazla mobil client var ise sorgu yapan, bu sorgularin buyuk cogunlugu hemen hemen ayni sonucu dondurecektir. bu yuzden cache mekanizmasi kurulabilir.
    butun kayitlar bir tabloda tutulurken son 20 saniyedeki kayitlari baska bir tabloda tutup buradan sorgu yaparsaniz daha kucuk bir dataset ile ugrasmis olursunuz.

    no sql icin ise isler biraz karisik, yine sql sistemdeki gibi timestamp alani ekleyip buna gore de sorgulayabilirsiniz. eger gercekten cok buyuk verilerle ugrasiyorsaniz ( sizin icin gerekli olmaz simdilik ) cozum lambda architecturehttp://lambda-architecture.net/

    bunun disinda nacizane tavsiyem bu tarz islemlerde web service yerine websocket tarzi push mekanizmalari kullanmak. Clientlarin hepsinin servera sorgu yapmasi yerine serverin butun clientlara veri gondermesi daha kolay olacaktir, clientlardaki 10 saniyelik gecikmeyi de ortadan kaldirir bu.




  • Dosyayla çalışmak daha mantıklı. Sunucudan sql server yükünü kaldırırsın. Çok çok gerekliyse dosyayı hafızada tutarsan okuma/yazma süresinden de yırtarsın.

    < Bu ileti mobil sürüm kullanılarak atıldı >
  • Yaptığın yol çok optimize bir yol değil. Çünkü her yeni client için sorgu x^2 grafiği gibi katlanacak. Bunu böyle yapmak yerine yukarıda önerilenler gibi, sunucu taraflı sorgu sağlayıp, biryere aktarabilirsin. Fast cache gibi sistemler de tavsiyedir. Tablo yük yapıyorsa, bu tabloyu başka bir sunucuya taşıyıp cluster yapı da kullanabilirsin.

    SQL, optimize bir tasarım yapıldığında yavaşlama yapmayacak bir sistemdir. Eğer uygunsa PostgreSQL 'e de geçiş yapabilirsin. Muazzam farkı hissedersin. :)
  • quote:

    Orijinalden alıntı: Dentrax

    Yaptığın yol çok optimize bir yol değil. Çünkü her yeni client için sorgu x^2 grafiği gibi katlanacak. Bunu böyle yapmak yerine yukarıda önerilenler gibi, sunucu taraflı sorgu sağlayıp, biryere aktarabilirsin. Fast cache gibi sistemler de tavsiyedir. Tablo yük yapıyorsa, bu tabloyu başka bir sunucuya taşıyıp cluster yapı da kullanabilirsin.

    SQL, optimize bir tasarım yapıldığında yavaşlama yapmayacak bir sistemdir. Eğer uygunsa PostgreSQL 'e de geçiş yapabilirsin. Muazzam farkı hissedersin. :)

    Şuan kullandığım yapı, weblogic web sunucusu kurdum http post metoduyla parametre yolluyorum bana jspn ile veri gonderiyor sonra onu parse edip ekrana yazdırıyorum

    Sanki bu http post biraz yavaş gibi geldi bana.

    Baska bir şekilde nasıl yapabilirim yukarıdaki yazıları okudum fakat pek anlamadım :)

    < Bu ileti mini sürüm kullanılarak atıldı >




  • Konuuyla alakasiz ancak arastirmissindir sorayim dedim. Web servise belli araliklarla request atma islemini nasil yaptiniz?

    < Bu ileti mobil sürüm kullanılarak atıldı >
  • quote:

    Orijinalden alıntı: Maroon On

    Konuuyla alakasiz ancak arastirmissindir sorayim dedim. Web servise belli araliklarla request atma islemini nasil yaptiniz?

    Timer ile yapıyorum ama stabil olmuyor o şekilde

    < Bu ileti mini sürüm kullanılarak atıldı >
  • quote:

    Orijinalden alıntı: flowerhorn


    quote:

    Orijinalden alıntı: Dentrax

    Yaptığın yol çok optimize bir yol değil. Çünkü her yeni client için sorgu x^2 grafiği gibi katlanacak. Bunu böyle yapmak yerine yukarıda önerilenler gibi, sunucu taraflı sorgu sağlayıp, biryere aktarabilirsin. Fast cache gibi sistemler de tavsiyedir. Tablo yük yapıyorsa, bu tabloyu başka bir sunucuya taşıyıp cluster yapı da kullanabilirsin.

    SQL, optimize bir tasarım yapıldığında yavaşlama yapmayacak bir sistemdir. Eğer uygunsa PostgreSQL 'e de geçiş yapabilirsin. Muazzam farkı hissedersin. :)

    Şuan kullandığım yapı, weblogic web sunucusu kurdum http post metoduyla parametre yolluyorum bana jspn ile veri gonderiyor sonra onu parse edip ekrana yazdırıyorum

    Sanki bu http post biraz yavaş gibi geldi bana.

    Baska bir şekilde nasıl yapabilirim yukarıdaki yazıları okudum fakat pek anlamadım :)

    Tekrar merhaba,

    POST methodu ile encoded form yolluyorsaniz teorik olarak biraz yavaslatabilir ama bunu hissedebileceginizi sanmiyorum.
    Genel kullanim da sorgu icin GET methodudur ( soap degil rest kullandiginizi varsayiyorum )

    Ayrica @dentrax onermis fakat diyebilirim ki mysql, postgresql arasinda muzzami birakin elle tutulur bir performans farki yok, ozellikle sizin senaryonuzda.

    Secenekleriniz tablonuzu, indexlerinizi uygun yaratip mumkun oldugunca az kayit sorgulamak ya da sicak veriyi ( sorguladiginiz ) arsiv verisinden ayiklamak.




  • Veritabani zamanla siser bu sekilde. Size onerim su..



    Sildiginiz verilerin tutuldugu sayfadan oncelikle kac adet gunluk kayit cekiyorsunuz diyelim 100.



    Farkli bir tablo acin ve orada ihtiyaciniz olacak olan gunluk verileri sildiginiz tablodan cekin ve sorgulamayi bu tablodan yapin. Bu tablo max gunluk veriyi ceksin ve diger 3. Tablo olusturun oraya atin ve direk oradan yazdirin. Performansa etki eder ve bu sekilde 3. Tabloda kisitli ve son guncel kayitlar gelecek.

    < Bu ileti mobil sürüm kullanılarak atıldı >
  • Basit bir yöntem olarak neden hep aynı satırı güncellemiyorsun ? Madem son eklenen senin için öndmli.

    < Bu ileti mobil sürüm kullanılarak atıldı >
  • Memcache veya benzer birşey varsa, güncel datayı orada tutup.Oradan çekebilirsin.

    Yinede 10 sn de bir fetch ettirmen 100 olduğunda sistemi elinde patlatır.

    Netice ?

    Websocket üzerinden push edeceksin. Yani ? sunucu bağlı olan client lere güncel datayı gönderecek.

    Diğer türlü her şekilde no no
  • quote:

    Orijinalden alıntı: L[A]hor

    Basit bir yöntem olarak neden hep aynı satırı güncellemiyorsun ? Madem son eklenen senin için öndmli.





    Bir gün içindeki en büyük kayıtı tutmam gerekiyor ayrıca araç kordinantını kaydettiğim için mobil uygulamada bir günde nereleri gezmiş onu gösteriyorum



    < Bu mesaj bu kişi tarafından değiştirildi flowerhorn -- 26 Temmuz 2017; 12:45:2 >
    < Bu ileti mini sürüm kullanılarak atıldı >
  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.