7/15/2005

Veri Cakismalari (Data Concurrency)

Sanırım "2 kullanıcı aynı anda bir bilgi üzerinde değişiklik yapmaya kalkarsa ne olur?" sorusunu en az bir kaç kez duymuşsunuzdur. 2 kullanıcı aynı anda bir bilgi üzerinde değişiklik yapmak istediğinde önceden belirlenmiş bazı kurallarla bir kullanıcının değiştirdiği bilgilerin diğer bir kullanıcıyı olumsuz yönde etkilemesi, önlenmesi gereken bir durumdur.

Örneğin 2 emlakçı bir dairenin fiyatını ve bazı diğer özelliklerini aynı anda web applikasyonları aracılığıyla değiştirmek istiyor olsun. A emlakçısının değiştirdiği bilgiler B emlakçısı tarafından henüz bilinmiyor olduğundan B emlakçısı istikrarsız veriler üzerinde değişiklik yapıyor olacaktir. Bu tip sorunlara getirilecek olan çözüm, veriler üzerine kilit(Lock) koymaktır. Bu şekilde 2 aplikasyonun veya kullanıcının aynı anda aynı verileri değiştirmesi engellenebilir.

3 çeşit değişik yöntemle veri çakışmaları engellenebilir;

Pesimist Çakışma Kontrolü (Optimistic Concurrency Control):
Bu yöntemde, üzerinde değişiklik yapılmak istenen bir veri dizisi, bu diziye ulaşılıp veritabanında gerekli değişiklik tamamlanana kadar geçen süreçte diğer kullanıcılara bu veri dizisine erişemez.

Optimist çakışma kontrolu (Optimistic concurrency control):
Bu yöntemde, üzerinde değişiklik yapılan veri dizisi sadece değişiklik yapıldığı anda diğer kullanıcılara erişilmez olarak gözükür. Değişiklik yapılmak istendiğinde veritabanındaki veriler kontrol edilerek bundan önce herhangi bir değişiklik yapılıp yapılmadığına bakılır. O verinin üzerinde zaten değişiklik yapılmışsa değişiklik işlemi çakışma kurallarını ihlal etmiş sayılıp engellenir.

Son Gülen İyi Güler Metodu (Last in wins!):
Son giren diyemedim, kulağa garip geliyordu, böyle bi uydurma yapıym bari dedim :). Bu metod'da, bir veri dizisi diğer kullanıcılara yine sadece değişiklik esnasında erişilmez olur. Ancak, bu yöntemde veritabanındaki en son girilen verilerle sizinkinin kıyaslanması gibi bir durum yoktur. Bu yüzden başka bir kullanıcın girdiği veriler siz en son gelmiş iseniz sizin verilerinizle değiştirilecektir.

ADO.Net ve Visual Studio.Net, optimist çakışma kontrol yöntemini kullanır.
Bu konu bence gayet önemli bi konu ve devamı gelecek...