Konuyu Oyla:
  • Derecelendirme: 5/5 - 1 oy
  • 1
  • 2
  • 3
  • 4
  • 5
MSSQL eş zamanlı yazma ve okuma kontrolü (Çözüldü)
#1
Merhabalar 


Web ve Mobil üzerinden Servis aracılığı ile bir randevu sistemi olduğunu düşünelim.
Aynı saate ancak 1 kişinin randevu alması gerekiyor.
kişiler bilgilerini doldurup 1 milisanyelik bir farkla kayıt gönderdiğinde 
belirtilen saat için daha önceden rezervasyon alınmış ise bu saat kapatılmış demem lazım

Fakat Zaman aralığı çok düşük olduğunda bir kayıt içeri yazılırken diğeri hala bu saati boş görebiliyor.
Belirli zaman aralığını lock yaptığımda buda başka sorunları karşıma getiriyor.

Böyle bir senaryoda bunu nasıl engelleyebiliriz

Teşekkürler
Bu dünyada kendine sakladığın bilgi ahirette işine yaramaz. 
Cevapla
#2
(30-12-2021, Saat: 09:42)adelphiforumz Adlı Kullanıcıdan Alıntı: Merhabalar 


Web ve Mobil üzerinden Servis aracılığı ile bir randevu sistemi olduğunu düşünelim.
Aynı saate ancak 1 kişinin randevu alması gerekiyor.
kişiler bilgilerini doldurup 1 milisanyelik bir farkla kayıt gönderdiğinde 
belirtilen saat için daha önceden rezervasyon alınmış ise bu saat kapatılmış demem lazım

Fakat Zaman aralığı çok düşük olduğunda bir kayıt içeri yazılırken diğeri hala bu saati boş görebiliyor.
Belirli zaman aralığını lock yaptığımda buda başka sorunları karşıma getiriyor.

Böyle bir senaryoda bunu nasıl engelleyebiliriz

Teşekkürler

Merhaba,

Büyük sistemlerde kullanılan yapı genelde şu şekildedir;
randevu için gerekli bilgiler seçilir ve girilir. 
Onayla butonuna basıldığında ilk olarak ilgili saat tekrardan check edilir. 
Eğer dolu ise "Seçtiğiniz randevu saatinde güncelleme gerçekleşti. Lütfen tekrar deneyiniz" şeklinde uyarı verilir.
Getir, BanaBi, Yemeksepeti gibi sistemler buna benzer altyapı kullanmaktadır.

İyi çalışmalar.
kisisel_logo_dark.png
WWW
Cevapla
#3
@Halil Han BADEM hocamın tavsiyesi ile beraber aynı anda 
sql server da lock yönetimi yapabilirsin, bu makaleyi bi oku istersen. 
http://www.veritabani.gen.tr/2017/02/27/...cesitleri/
Exclusive (X) Locks senin içini çözer gibi. 
https://www.google.com/search?q=SQL+SERV...X%29+Locks
Sorsaydı Bilirdi Sormuyor ki Bilsin.
Bilseydi Sorardı Bilmiyor ki Sorsun. 
Cevapla
#4
@Halil Han BADEM ve @bydelphi
Açıklamalarınız için teşekkür ederim.

Bir X Tablosu düşünün ve içinde sadece sıra numarası olsun (Manuel arttırılan)
Bu tabloya saniyede 100 farklı lokasyondan insert için gelindiğini varsayın.
Her gelenin elindeki numara içerde varsa son numarayı bulup tekrar insert etmeye çalışacak.
Olay bu senaryo üzerine düşünülürse ortada Select edip LOCK edilen bir kayıt yok.
Bu dünyada kendine sakladığın bilgi ahirette işine yaramaz. 
Cevapla
#5
Merhaba,
Düşündüğünüz yapıyı SQL Server üzerinde function'lar ile kontrol edip güncelleme işlemlerini yapabilirsiniz.
Delphi'den de bu functionları çağırabilirsiniz.
Function'da hata kontrollerini yaparak client üzerinde buna göre işlemler yapabilirsiniz.
İyi çalışmalar.
Cevapla
#6
Merhaba Arkadaşlar

Bu konuyu araştırınca bu tür işlemlerin en kolay sağlanabildiği yolun Constraintler olduğunu gördüm.
Ve yaptığım testlerde insert işlmeleri Nano Saniyeler bazında hatasız olrak çalışıyor
Bilginize
Bu dünyada kendine sakladığın bilgi ahirette işine yaramaz. 
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Tek sorguda iki sonuç (Çözüldü) cinarbil 4 262 05-03-2024, Saat: 08:41
Son Yorum: cinarbil
  Tarihin ayın kaçıncı haftası olduğu nasıl bulunur (Çözüldü) adelphiforumz 3 539 19-10-2023, Saat: 12:27
Son Yorum: serdar
  CTE Sorgu sonucunu bir tabloya yazmak (Çözüldü) Bay_Y 0 360 28-08-2023, Saat: 12:47
Son Yorum: Bay_Y
  MSSQL Data downgrade (Alt sürüme veri aktarma) işlemleri adelphiforumz 0 484 23-03-2023, Saat: 11:13
Son Yorum: adelphiforumz
  MSSQL TableType tipinde parametre nasıl geçilir? adelphiforumz 28 7.306 29-12-2021, Saat: 11:37
Son Yorum: mrmarman



Konuyu Okuyanlar: 1 Ziyaretçi