İçindekiler
işlenmesi fikir birliği Web uygulamalarında, uygulamanın doğası gereği, birkaç kullanıcının aynı öğeyle etkileşime girmesi gereken durumlarla karşılaşabileceğimiz için, biraz kaliteli zaman ayırmamız gereken konulardan biridir.kendi başına etkileşim Bu bir sorun değil, asıl sorun bu öğeyi değiştirdikten veya dokunduktan sonra veritabanına kaydetmeniz gerektiğinde ve daha sonra iki veya daha fazla kullanıcının aynı öğe üzerinde aynı anda bir işlem yapmak istediğinde ortaya çıkar, yani burada mantığımız, bununla başa çıkmanın doğru yolunun ne olduğunu bilmek için bir davranış tanımlamalıdır.
Başta da açıkladığımız gibi, fikir birliği Bu, uygulamamızdaki bir öğe üzerinde iki veya daha fazla aktörün çalışması ve veritabanına karşı bir eylem oluşturmasıdır.
eşzamanlılık durumuDeğişiklikler çelişkili olduğunda sorunlar ortaya çıkabilir, örneğin: A kullanıcısı bir değer kaydetti, ancak B kullanıcısı o sırada değişiklik yaptı ve farklı bir değer kaydetti, A kullanıcısının gözünde içeriği değiştirilmedi ve kullanıcının gözünde B kullanıcısı, değişikliğini yapmaktan alıkoyacak hiçbir şey yoktu.
Bu tür çakışmalar, uygulamamızın performansını kullanıcının gözünde zedeleyebilir, bu nedenle, sahip olduğumuz alanların buna değip değmeyeceğini, eşzamanlılık için programlamamız gerektiğini değerlendirmeliyiz.
biraz görelim eşzamanlılık türleri, bu şekilde uygulamalarımızda ne tür eylemler gerçekleştirebileceğimizi biraz daha anlayabiliriz:
kötümser eşzamanlılıkBu yaklaşım, veritabanını kullanırken bir önleyici engelleme kayıt defterinin kullanımda olması, bununla birden fazla kullanıcının değeri aynı anda değiştirmesini önleriz, sorun, web ortamında bunun tam olarak kullanılmasının mümkün olmamasına neden olur, çünkü kilit olup olmadığını gerçekten bilmediğimiz hiçbir durum yoktur. sunucuyla iletişim kurana kadar uygulandı veya kaldırıldı, bu da kullanımda kafa karışıklığına ve yavaşlığa neden oldu.
iyimser katılımBu diğer yaklaşım, bunun yerine web ile biraz daha uyumlu bir şey yapar, değiştirirken, veritabanına kaydetmeden önce, okumanın yapıldığı andan itibaren verilerin değiştirilmediğini doğrular, bunun için kayıt değerlerinin karşılaştırmasını yaparız ve daha fazla doğruluk için tarih, saat ve saniye içeren bir zaman damgası taşıyan ilişkili bir alan.
ASP.NET MVC'si Kötümser yaklaşımı desteklemiyor, bu yüzden iyimser olanla çalışmalıyız, bunun için yapılarımıza en son değiştirildiği zamanı kaydetmek için tarih alanları sağlamalıyız, böylece kaydı aldıktan sonra değerin değişip değişmediğini bilebiliriz. ve kaydetmeden önce bununla bir uyarı alabilir ve bu değerlerin üzerine yazıp yazmayacağımıza karar verebiliriz.
Bunu nasıl doğrulayabileceğimize dair küçük bir kod örneği görelim:
Daha sonra, okuma yaptıktan sonra alanın değiştirilip değiştirilmediğini veritabanında bir değişiklik yaparken doğruladığımızı fark ediyoruz, eğer öyleyse bir istisna oluşturuyoruz, bununla ilgili eylemleri yapabileceğiz, ayrıca üretilebilecek farklı istisnalar üzerinde çalışabilmek için boşluk bırakıyoruz.
Bu öğreticinin sonunda, veritabanlarında eşzamanlılık ve sorunun nasıl çalışılacağı hakkında biraz daha fazla şey biliyoruz. ASP.NET MVC'si.