Arama butonu
Bu konudaki kullanıcılar: 1 misafir
11
Cevap
399
Tıklama
0
Öne Çıkarma
Birden fazla kullanıcı aynı satırda işlem yapmak isterse?
K
8 yıl
Yüzbaşı
Konu Sahibi

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?

DH forumlarında vakit geçirmekten keyif alıyor gibisin ancak giriş yapmadığını görüyoruz.

Üye olduğunda özel mesaj gönderebilir, beğendiğin konuları favorilerine ekleyip takibe alabilir ve daha önce gezdiğin konulara hızlıca erişebilirsin.

Üye Ol Şimdi Değil



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

M
8 yıl
Yarbay

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.

Eger bu bir odev ise , semafor falandir muhtemelen hocanin ogretmeye calistigi sey. Programlama diline gore nasil implemente edildigini ogrenip yapabilirsin.
https://en.wikipedia.org/wiki/Semaphore_(programming)





< Bu mesaj bu kişi tarafından değiştirildi Mephalay -- 20 Eylül 2017; 22:15:36 >

< Bu ileti tablet sürüm kullanılarak atıldı >
Bu mesaja 1 cevap geldi.
K
8 yıl
Yüzbaşı
Konu Sahibi

quote:

Orijinalden alıntı: Mephalay

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.

Eger bu bir odev ise , semafor falandir muhtemelen hocanin ogretmeye calistigi sey. Programlama diline gore nasil implemente edildigini ogrenip yapabilirsin.
https://en.wikipedia.org/wiki/Semaphore_(programming)

Teşekkür ederim hocam ödev değil.

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.



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

C
8 yıl
Yüzbaşı

Bildiğim kadarıyla databaseler her ne kadar aynı anda birçok isteğe cevap veriyor gibi dursa da aslında derinlerde sorgular bir sıraya dizilerek işlem yapılıyor. İki işlem aynı zamanda gibi görünse de çok çok çok kısa zaman farkı olacağı için önce gelen işlem önce sonuçlanıyor. Yani son yazılan değer geçerli kalıyor.



Pratik uygulamada Beğeni üzerinden gidelim. Beğeni sayıları genelde beğenen kişileri de içerdiği için aslın database de sayı olarak biriktirilmiyor. Onun yerine bağlı tablolar olarak işlem görüyor. Bu durumda toplam beğeniyi bulmak için tüm beğeniler sorgulanıp ilgili mesaj için olanlar filtreleriyor ve kalan sorgudaki satır sayısına bakılıyor. Bu durumda beğenen kişi sayısı değişse dahi yanlış hesaplama gibi bir durum söz konusu olmuyor.



Sayı olarak tutmak için bir sıralama(queue) oluşturup artırma bildirimlernizi bu sıralamaya eklemeniz gerekmekte. Sonrasında sıralama fonksiyonu her ek için sayıyı tek tek yükseltebilir. Böylelikle pekçok kaynaktan gelen sorgu isteği tek girişe yönlendirilerek olası hatalar giderilir.



< Bu ileti mini sürüm kullanılarak atıldı >
Bu mesaja 1 cevap geldi.
D
8 yıl
Yarbay

write lock ile o satırı kitlersin.

Transaction desteği olan veritabanı motorları destekler bunu.

MySQL de innodb gibi


Bu mesaja 1 cevap geldi.
K
8 yıl
Yüzbaşı
Konu Sahibi

quote:

Orijinalden alıntı: CarnageTR

Bildiğim kadarıyla databaseler her ne kadar aynı anda birçok isteğe cevap veriyor gibi dursa da aslında derinlerde sorgular bir sıraya dizilerek işlem yapılıyor. İki işlem aynı zamanda gibi görünse de çok çok çok kısa zaman farkı olacağı için önce gelen işlem önce sonuçlanıyor. Yani son yazılan değer geçerli kalıyor.



Pratik uygulamada Beğeni üzerinden gidelim. Beğeni sayıları genelde beğenen kişileri de içerdiği için aslın database de sayı olarak biriktirilmiyor. Onun yerine bağlı tablolar olarak işlem görüyor. Bu durumda toplam beğeniyi bulmak için tüm beğeniler sorgulanıp ilgili mesaj için olanlar filtreleriyor ve kalan sorgudaki satır sayısına bakılıyor. Bu durumda beğenen kişi sayısı değişse dahi yanlış hesaplama gibi bir durum söz konusu olmuyor.



Sayı olarak tutmak için bir sıralama(queue) oluşturup artırma bildirimlernizi bu sıralamaya eklemeniz gerekmekte. Sonrasında sıralama fonksiyonu her ek için sayıyı tek tek yükseltebilir. Böylelikle pekçok kaynaktan gelen sorgu isteği tek girişe yönlendirilerek olası hatalar giderilir.

Teşekkür ederim hocam beğeni özelliğini dediğiniz gibi yapmıştım zaten daha farklı projeler için merak etmiştim.



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

K
8 yıl
Yüzbaşı
Konu Sahibi

quote:

Orijinalden alıntı: Delifisek.Tux

write lock ile o satırı kitlersin.

Transaction desteği olan veritabanı motorları destekler bunu.

MySQL de innodb gibi

Write Lock buna nasıl engel olabilir hocam veriyi çeker çekmez mi kitlemek gerekecek bu nasıl bir çözüm olacak sonuçta stoğa 2 eklemek gerekirken yine 1 eklenmiş olmayacak mı?

A kişisi çekti 5 verisini bekliyor oyalanıyor bu sırada B kişisi de çekti aynı veriyi ikisi de bir ekledi ve yolladı ikisi de 6 yolladı yani.

hadi A kisisi veriyi çekince kilitledik diyelim satırı. 6 verisini yolladı kilidi kaldırdık. Ardından B kişisi de çektiği 5 verisini işledi 1 ekledi 6 olarak yolladı. Sonuçta o satır 7 olması gerekirken 6 kaldı. Bunu farklı bir sayfaya yollayıp artış miktarlarını bekletip birbirine ekleyip veritabanına yollamak mı gerekir.



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

D
8 yıl
Yarbay

Anlık olarak yaparsın.

yani satırı kilitersin

veri update edilene kadar başka kimse ne okur ne yazar.

senin işin bitince kilit açılır bir sonraki arkadaş devam eder.

bu esnada kilitleyen hariç herkes bekler.



H
8 yıl
Onbaşı

Hocam Selamlar,

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 mesaja 2 cevap geldi.
K
8 yıl
Yüzbaşı
Konu Sahibi

quote:

Orijinalden alıntı: hseyindemirr

Hocam Selamlar,

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.


Teşekkürler iyi forumlar :)



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

B
8 yıl
Yarbay

quote:

Orijinalden alıntı: hseyindemirr

Hocam Selamlar,

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:

https://docs.microsoft.com/en-us/aspnet/web-forms/overview/data-access/editing-inserting-and-deleting-data/implementing-optimistic-concurrency-cs





< Bu mesaj bu kişi tarafından değiştirildi beyinsis -- 26 Eylül 2017; 9:11:27 >
Bu mesaja 1 cevap geldi.
K
8 yıl
Yüzbaşı
Konu Sahibi

quote:

Orijinalden alıntı: beyinsis


quote:

Orijinalden alıntı: hseyindemirr

Hocam Selamlar,

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:

https://docs.microsoft.com/en-us/aspnet/web-forms/overview/data-access/editing-inserting-and-deleting-data/implementing-optimistic-concurrency-cs

İşte bu hocam çok teşekkürler



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

DH Mobil uygulaması ile devam edin. Mobil tarayıcınız ile mümkün olanların yanı sıra, birçok yeni ve faydalı özelliğe erişin. Gizle ve güncelleme çıkana kadar tekrar gösterme.