

Dinamik Siralama Ve Efektif Sekilde Veritabanina Kaydetme
-
unbalanced bunu yazdı
@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.
DELETE * from SiparisSiraTablo WHERE KuryeNumarasi=5
INSERT INTO SiparisSiraTablo (Sira, SiparisId ,KuryeNumarasi)
VALUES
(1,13,5),
(2,12,5),
(3,14,5),
(4,11,5)
2 sorgu çalıştırmış olmuyor muyuz :/
Tabi baktığımız zaman bulk insert ama tek sorgu.
-
Log tablosu gibi düşün. Mesela, şu sırada ilk kaydı girdik diyelim.
nesne5, sirano = 1 {farklisirano = 2000}
nesne6, sirano = 2 {farklisirano = 2000}
nesne1, sirano = 3 {farklisirano = 2000}
nesne3, sirano = 4 {farklisirano = 2000}
nesne4, sirano = 5 {farklisirano = 2000}
nesne2, sirano = 6 {farklisirano = 2000}
daha sonra bir tane yer değiştirdi. O zaman mevcut kayıtları delete yapıp, yeni sıranlamışları insert et. Ha bundaki "Önceki kayıtları delete yapmam performans sorunu çıkarır diyorsan", o zaman hiç eski kayıtları delete etme, yeni eklnenen kayıtlar için farklı bir sıra numarası ver, bu farklisirano ise diğer girilen değer öncekilerden büyük olsun {farklisirano = 2001} gibi. Böylece sen kayıtları çağıracağın zaman farklisirano en büyük olanı çağırmış olursun. -
MhmdAlmz bunu yazdı
DELETE * from SiparisSiraTablo WHERE KuryeNumarasi=5
INSERT INTO SiparisSiraTablo (Sira, SiparisId ,KuryeNumarasi)
VALUES
(1,13,5),
(2,12,5),
(3,14,5),
(4,11,5)
2 sorgu çalıştırmış olmuyor muyuz :/
Tabi baktığımız zaman bulk insert ama tek sorgu.
Anladim hocam dedigini simdi.. her ne kadar bulk desen de bu sorgunun yükü fazladir. cünkü bir sürü item siliyorsun ve ekliyorsun. Bulk insert yaptirsan da yine bir sürü kayit ekliyorsun ve her siralama degistiginde bu islemi yaptirmak mantikli degil hele ki yüzlerde kullanicin olursa ve her kullanici icin 100 tane kaydin silinip tekrar eklendigini düsünürsen DB ye ekstra yük..
ontedi bunu yazdıLog tablosu gibi düşün. Mesela, şu sırada ilk kaydı girdik diyelim.
nesne5, sirano = 1 {farklisirano = 2000}
nesne6, sirano = 2 {farklisirano = 2000}
nesne1, sirano = 3 {farklisirano = 2000}
nesne3, sirano = 4 {farklisirano = 2000}
nesne4, sirano = 5 {farklisirano = 2000}
nesne2, sirano = 6 {farklisirano = 2000}
daha sonra bir tane yer değiştirdi. O zaman mevcut kayıtları delete yapıp, yeni sıranlamışları insert et. Ha bundaki "Önceki kayıtları delete yapmam performans sorunu çıkarır diyorsan", o zaman hiç eski kayıtları delete etme, yeni eklnenen kayıtlar için farklı bir sıra numarası ver, bu farklisirano ise diğer girilen değer öncekilerden büyük olsun {farklisirano = 2001} gibi. Böylece sen kayıtları çağıracağın zaman farklisirano en büyük olanı çağırmış olursun.farklisirano mantigi ilgincmis ancak yine de 100 tane ögeyi sürekli insert etmek mantikli degil hocam. Hele silmezsen sürekli yeniler eklenecek ve tablo-db sisecek.. Düsün 1000 tane kullanicin var ve her birinin 100 er itemlik 5 listesi var, yani kullanici basina 500 item var ve 1'000 kullanici icin 500'000 item oluyor... 1 yil icinde bu adamlar kac kere tablo siralamasini degistirecek.. Ve her degistirdiginde ekstra 100 eleman artacak.. Ayrica tablo sistikce daha da yavaslayacak..
o yüzden bu siralama olayini ayri bir tabloda tek bir field de tutmak (yanyana yazili 100 numara) siralama degistiriginde icerigini okumadan yeni siralamayi yine virgülle ayirarak yazip update etmek daha az maliyetli olur