Arkadaşlar diyelim stok veritabanında elma sütununda 5 değeri var. A kullanıcısı bunu bir arttırmak istiyor veritabanından 5 verisini çekiyor 1 ekliyor veritabanına gönderiyor. Ama aynı anda B kullanıcısı da veri çekmişti ve onun çektiği veri de 5, buna 1 ekliyor ve 6 sonucunu veritabanina gönderiyor. Sonuç olarak veritabanina 2 eklenmesi gerekirken stoğun 7 olması gerekirken 6 olduğunu görüyoruz bunu nasıl engelleriz?
Bu senin degil, veri tabaninin problemi ( Eger veritabani yazmiyorsan ). ACID prensiplerini inceleyebilirsin. https://en.wikipedia.org/wiki/ACID ---
Eger uygulaman bu durumun dogru calismasina bagimliysa , ki database'ler zaten bunun duzgun calismasi uzerine kurulu; bunu uygulama seviyesinde de forse edebilirsin. Eger tek makinede tek instance uzerinde calisiyorsa lock mekanizmasi kullanarak; tek makine cok instance ise memory share ile ; cok makine cok instance ise cluster cache kullanarak.
Bu senin degil, veri tabaninin problemi ( Eger veritabani yazmiyorsan ). ACID prensiplerini inceleyebilirsin. https://en.wikipedia.org/wiki/ACID ---
Eger uygulaman bu durumun dogru calismasina bagimliysa , ki database'ler zaten bunun duzgun calismasi uzerine kurulu; bunu uygulama seviyesinde de forse edebilirsin. Eger tek makinede tek instance uzerinde calisiyorsa lock mekanizmasi kullanarak; tek makine cok instance ise memory share ile ; cok makine cok instance ise cluster cache kullanarak.
Bir web uygulaması üzerinde çalışıyorum beğeni butonu yaparken aklıma takıldı. Beğen butonunda çok sorun olmaz ama daha farklı bir projede nasıl çözerim onu merak etmiştim.
Buradaki arkadaşlarda açıklamışlar, ilişkisel veritabanları ACID prensibine göre çalışır ve data tutarsızlığının önüne geçmek için bir lock mekanizması kullanır. Hatta bu lock mekanizması kayıt için değil tablo için çalışır. Aynı tablo üzerine gelen kullanıcılar birbirlerinin işlerinin bitmesini beklemek durumundadır.
Durumun önüne geçmek için tablo locklandığında aynı tablo üzerine işlem yapmak isteyen kullanıcıya exception fırlatmak olabilir uygulama katmanında :)
Kolay Gelsin, İyi Forumlar.
bu arkadaşın derdini çözmez. arkadaşın anlatmak istediği sanırım şu:
-a kaydı okudu -b kaydı okudu -a değişiklikler yaptı ve kaydetti -b değişiklikler yaptı ve kaydetti
işte b kaydedememeli. kayıt güncel değil hatası vermeli. optimistic concurrency, pessimistic concurrency konusu bu. temel mantığı şöyle; kaydı güncellemeden önce kayıt hala ilk okuduğun gibi mi kontrol edilir. eğer öyleyse sıkıntı yok. değişmişse hata patlatılır. aşağıda bununla ilgili bir yazı var:
Buradaki arkadaşlarda açıklamışlar, ilişkisel veritabanları ACID prensibine göre çalışır ve data tutarsızlığının önüne geçmek için bir lock mekanizması kullanır. Hatta bu lock mekanizması kayıt için değil tablo için çalışır. Aynı tablo üzerine gelen kullanıcılar birbirlerinin işlerinin bitmesini beklemek durumundadır.
Durumun önüne geçmek için tablo locklandığında aynı tablo üzerine işlem yapmak isteyen kullanıcıya exception fırlatmak olabilir uygulama katmanında :)
Kolay Gelsin, İyi Forumlar.
bu arkadaşın derdini çözmez. arkadaşın anlatmak istediği sanırım şu:
-a kaydı okudu -b kaydı okudu -a değişiklikler yaptı ve kaydetti -b değişiklikler yaptı ve kaydetti
işte b kaydedememeli. kayıt güncel değil hatası vermeli. optimistic concurrency, pessimistic concurrency konusu bu. temel mantığı şöyle; kaydı güncellemeden önce kayıt hala ilk okuduğun gibi mi kontrol edilir. eğer öyleyse sıkıntı yok. değişmişse hata patlatılır. aşağıda bununla ilgili bir yazı var:
Ama aynı anda B kullanıcısı da veri çekmişti ve onun çektiği veri de 5, buna 1 ekliyor ve 6 sonucunu veritabanina gönderiyor. Sonuç olarak veritabanina 2 eklenmesi gerekirken stoğun 7 olması gerekirken 6 olduğunu görüyoruz bunu nasıl engelleriz?
< Bu ileti mobil sürüm kullanılarak atıldı >