folder Tahribat.com Forumları
linefolder Database - Veritabanı
linefolder Dinamik Siralama Ve Efektif Sekilde Veritabanina Kaydetme



Dinamik Siralama Ve Efektif Sekilde Veritabanina Kaydetme

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Fatih54
    Fatih54's avatar
    Kayıt Tarihi: 16/Ağustos/2012
    Erkek
    unbalanced bunu yazdı

    tek güncelleme ile olmasi güzel hocam buradaki sikinti su olur. bir eleman listeden silindiginde onun indexini de db'de silinmesi gerek ya da yeni eleman eklendiginde onun da listeye eklenmesi gerek. Ancak yine de cözülür bir sey. Cünkü kolonun icindeki degerlerle ilgilenmeden direk tüm field'i güncelleyecegim icin id varmis yokmus önem arzetmiyor.

    Mantikli bu cözüm sagol hocam :)

    baska alternatifler var mi? Belki daha efektif yollar olabilir? :) Ve üstteki sistemin hangi olasi sorunlari olabilir?

    Eğer DB deki girdilerin de bu array e göre update edilmesi gerekiyorsa;

    "Levenshtein Distance": Bir string den başka bir string elde edebilmek için en az yapılacak değişimi ifade eder.

    Levenshtein algoritmasını uyguladığında olan step lere göre index ler değiştirilebilir. Eğer son durumda boşluklar olursa db ye dummy girdiler eklenebilir (db ye dummy girdi eklenmesi ile diğer elemanların indexlerinin otomatik olarak değişmesi ile teker teker elemanların indexlerini değiştirmek arasında SQL seviyesinde bir performans farkı olur mu bilmiyorum. seçim senin)

     
     

     

     

  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    unbalanced
    unbalanced's avatar
    Kayıt Tarihi: 14/Haziran/2006
    Erkek
    Fatih54 bunu yazdı
    unbalanced bunu yazdı

    tek güncelleme ile olmasi güzel hocam buradaki sikinti su olur. bir eleman listeden silindiginde onun indexini de db'de silinmesi gerek ya da yeni eleman eklendiginde onun da listeye eklenmesi gerek. Ancak yine de cözülür bir sey. Cünkü kolonun icindeki degerlerle ilgilenmeden direk tüm field'i güncelleyecegim icin id varmis yokmus önem arzetmiyor.

    Mantikli bu cözüm sagol hocam :)

    baska alternatifler var mi? Belki daha efektif yollar olabilir? :) Ve üstteki sistemin hangi olasi sorunlari olabilir?

    Eğer DB deki girdilerin de bu array e göre update edilmesi gerekiyorsa;

    "Levenshtein Distance": Bir string den başka bir string elde edebilmek için en az yapılacak değişimi ifade eder.

    Levenshtein algoritmasını uyguladığında olan step lere göre index ler değiştirilebilir. Eğer son durumda boşluklar olursa db ye dummy girdiler eklenebilir (db ye dummy girdi eklenmesi ile diğer elemanların indexlerinin otomatik olarak değişmesi ile teker teker elemanların indexlerini değiştirmek arasında SQL seviyesinde bir performans farkı olur mu bilmiyorum. seçim senin)

    hocam bu kadar neden karistirmaya gerek var yoksa ben mi kaciriyorum bir seyleri... Ben clienta listeyi yollayacagim + string seklinde siralamasini (1,2,3,4,5,6,7)

    user bu listeyle oynasin ve güncelle butonuna bastiginda ben client tarafinda yeni siralamayi alacagim bakacagim ki 1,2,3,4,5,6,7 degil artik demek ki degismis.. O halde yeni siralamayi direk 1,2,3,4,5,6,7 nin oldugu field ile degisecegim.. Tablo söyle olacak. (iki tablo olacak)

    1- tablo

    Id     Name    CustomerId

     1     Item1     1

    2      Item2    1

     

    2- tablo

    Id      CustomerId     Order

    1           1                1,2,3,4,5,6,7

    eger customer1 siralamasini degistirdiye

    update -> order='6,5,4,3' where customerID=1

    gibi..

    clientta göstermek istedigimde

    select * from tablo1 where customerID = 1

    ve ikinci sorgu

    select order from tablo2 where customerId=1

    daha sonra for döngüsüyle

    var orders = tablo2Columnstr.split(',');

    for(i=0; i< orders.length;i++)

    yaz (tablo1Items[order[i]]);

     

    bu sekilde bir sorun gözükmüyor

     

     

     

     


    Ülkesini Seven Her Türk Vatandasi, Ülkesinin Sessiz Istilasi'na karsi durmak zorunda.
  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    manyaki
    manyaki's avatar
    Kayıt Tarihi: 27/Temmuz/2005
    Erkek

    Normalde yaptığım yöntem;

    table_positions diye bir tablo açıp, sıralama bittikten sonra o tabloyu komple temizleyip, tüm veriyi tekrar insert etmek.

    Bendeki veri sıralaması 100'ler 1000'leri bulmadığı için pek de sorun olmuyordu. 

     

    Diğer önerim; tabloda ayrı ayrı pozisyonları row şeklinde tutmak yerine json formatında tek row'da saklayabilirsin. Sadece o row'u update edersin. mysql 5.7'de gelmişti sanırım json data tipi.

    Yani veriyi array object şeklinde (id, pos) store edeceksin mysql'de. Bunun da en iyi yolu bildiğim kadarıyla json.


    since 2005 // tbt
  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    unbalanced
    unbalanced's avatar
    Kayıt Tarihi: 14/Haziran/2006
    Erkek
    manyaki bunu yazdı

    Normalde yaptığım yöntem;

    table_positions diye bir tablo açıp, sıralama bittikten sonra o tabloyu komple temizleyip, tüm veriyi tekrar insert etmek.

    Bendeki veri sıralaması 100'ler 1000'leri bulmadığı için pek de sorun olmuyordu. 

     

    Diğer önerim; tabloda ayrı ayrı pozisyonları row şeklinde tutmak yerine json formatında tek row'da saklayabilirsin. Sadece o row'u update edersin. mysql 5.7'de gelmişti sanırım json data tipi.

    Yani veriyi array object şeklinde (id, pos) store edeceksin mysql'de. Bunun da en iyi yolu bildiğim kadarıyla json.

    hocam her kullanicinin birden fazla listesi olacak ve her listede 100 e yakin eleman olacak. O yüzden ekle-sil mantikli degil.. Evet json sekilde tutacagim ama mysql degil de nosql'de yapacagim. Cünkü bir sürü verinin sürekli gidip gelmesi olacak (kullanicinin müsterileri vs de oradan veriyi cekecek). O yüzden nosql mantikli. Siralamalayi tek bir kolonda indexleri yanyana yazarak cözebilecegim gibi görünüyor. Tek bir kolon güncellenecek..


    Ülkesini Seven Her Türk Vatandasi, Ülkesinin Sessiz Istilasi'na karsi durmak zorunda.
  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    wert
    wert's avatar
    Kayıt Tarihi: 19/Eylül/2005
    Erkek

    sıra gibi ayrı bir tablo olsa 

    sonra kaydet dediğinde mevcuttakileri silip yeni listeyi sırayla yeniden kaydetsen olmazmı

     

    Büdüt: dediğim konuşulmuş zaten 

    wert tarafından 04/May/20 04:37 tarihinde düzenlenmiştir

    |sadece aptalların başarısı ders notu ile ölçülür|
  6. KısayolKısayol reportŞikayet pmÖzel Mesaj
    unbalanced
    unbalanced's avatar
    Kayıt Tarihi: 14/Haziran/2006
    Erkek
    wert bunu yazdı

    sıra gibi ayrı bir tablo olsa 

    sonra kaydet dediğinde mevcuttakileri silip yeni listeyi sırayla yeniden kaydetsen olmazmı

    Evet hocam onu konuştuk zaten ve bu sıra olayı tek Field de olacak. Virgülle ayrılmış şekilde. Yaklaşık 250-300 karakterlik bir string veri türü olacak. Sıralama buradan gelecek ve o indeksler de aslında diğer tablodaki idler olacak biraz düşündüğümde 

    benim tablom daha karışık aslında parent child olayı var ama o kısma girmiyorum, onu hallettim. sadece en efektif nasıl bu sıralamayı tutarım diye düşünüyordum. Sağolsun @bonanzi güzel fikir verdi :) 


    Ülkesini Seven Her Türk Vatandasi, Ülkesinin Sessiz Istilasi'na karsi durmak zorunda.
  7. KısayolKısayol reportŞikayet pmÖzel Mesaj
    herlocksholmes
    herlocksholmes's avatar
    Kayıt Tarihi: 16/Şubat/2014
    Erkek

    edit:

    herlocksholmes tarafından 04/May/20 05:13 tarihinde düzenlenmiştir

  8. KısayolKısayol reportŞikayet pmÖzel Mesaj
    MhmdAlmz
    MhmdAlmz's avatar
    Kayıt Tarihi: 09/Ağustos/2015
    Erkek

    Benim de projemde bu tür bir şey var. Siparişlerin sırasını operasyon belirliyor.

    Bunun için şu yöntemi izliyorum.

    Siparişler

    SiparisId KuryeNumarasi

    11             5

    12             5

    13             5

    14             5

     

    SiparisSiraTablo diyelim

    Sira SiparisId KuryeNumarasi

    1         13                5

    2         12                5

    3         14                5

    4         11                5

    Şeklinde. Sıra değişince değil de benim başka bir tetikleyicim var. Adam sırayı kople değiştirip tamam yeni sıra bu dediğinde başka kuryenin üstüne muhakkak tıklıyor. Tam o arada bende güncelliyorum.

    Sıra tablosuna delete atıp (Kurye Numarasıyla) daha sonra yeni sırayı insert ediyorum. 

    Select sorgusu atarken de bunu joinleyip Sıraya göre OrderBy çekiyorum.

     

    Bunun avantajı şu oluyor. Update sorgusundan daha performanslı oluyor. 1 Delete 1 de Insert methodu çalıştırıyorum. Bunu da Transaction ile yaptığım için bir problem olsa bile sıkıntı eski halini alıyor hemde hızlı oluyor.

    1,2,3,4,5,6,7 bu olay kafama yatmıyor DB katmanında bunu sıralamak için garip gurup sorgular yazman gerekecek.

    Evet Client da bunu sıralarsın ve sıralama yükünü Client'a taşırsın ama yarın öbürgün DB için de böyle bir şeye ihtiyaç duyar mısın bilemiyorum.

    MhmdAlmz tarafından 04/May/20 09:46 tarihinde düzenlenmiştir

    Andolsun kuşluk vaktine ve dindiği zaman o geceye ki, Rabbin sana veda etmedi ve darılmadı! Ve kesinlikle senin için sonu önünden (ahiret dünyadan) daha hayırlıdır. ileride Rabbin sana verecek de hoşnut olacaksın! O, seni bir yetim iken barındırmadı mı? Seni, yol bilmez iken (doğru) yola koymadı mı? Seni bir yoksul iken zengin etmedi mi? Öyle ise, sakın yetime kahretme (onu horlama)! El açıp isteyeni de azarlama! Fakat Rabbinin nimetini anlat da anlat!
  9. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Gizem
    sLeymN
    sLeymN's avatar
    Kayıt Tarihi: 31/Mart/2008
    Erkek

    jquery ile ilgili tablonun listenin neyse boksa işte elemanlarına select attığında zaten sana yukarıdan aşşağıya doğru sıralı son halini verecektir abi neden bu kadar kasıyorsun ki?


    Cehennemin dibine kadar yolum var daha.. || Nasılsa her yalnız kendine sürgündür Asmera unutma.
  10. KısayolKısayol reportŞikayet pmÖzel Mesaj
    unbalanced
    unbalanced's avatar
    Kayıt Tarihi: 14/Haziran/2006
    Erkek

    @MhmdAlmz hocam nasil 1 delete 1 insert oluyor onu anlamadim? Birden fazla elemanin varsa sira degistiginde hepsini silip sonra tekrar eklemen gerekiyor. Tek delete ve insert ile olacak is degil. Benim düsündügüm her ne kadar tehlikeli görünse de (benim hosuma gitmiyor) suan en efektif yol bu görünüyor. Tek bir update ile is cözülecek. siralama string seklinde gelecek client'a, client bu stringi array yapip yeni siralamayi ayarlayacak

    @sLeymN  hocam olay belli bir düzene göre siralama degil, kullanici kafasina göre siralayabilir bu listeyi. Siraladiginda da ben o sekilde kaydedip, tekrar kullanici actiginda o sekilde göstermem gerek. Yani jquery ile yapilacak bir siralama yok, bu siralama kullaniciya bagli. Ister 1. ögeyi ortaya alir, ister 2. ögeyi en sona alir.. Buradaki siralama da önem arzediyor.

     


    Ülkesini Seven Her Türk Vatandasi, Ülkesinin Sessiz Istilasi'na karsi durmak zorunda.
Toplam Hit: 5471 Toplam Mesaj: 24
dinamik siralama