Merhaba Arkadaslar,
Bu yazimda Transaction kavramindan bahsedecegim. Bir kac yazi boyunca Spring ‘de Transaction yapisini inceleyecegiz ve uygulamalar yapacagiz. Bu yazimizda Spring uygulamiz olmayacak. Oncelikle Transaction kelimesinin turkce karsiligini ve basit bir sinema bileti senaryosu ile kavramsal olarak anlamaya calisalim.
Transaction kelime anlami olarak islem anlamina gelmektedir. Fakat turkce karsilik olarak islem diyerek gecmemiz biraz kafa karisikligina neden olabilir. Cunku daha cok Process kelimesinin karsiligi olarak islem kelimesini kullaniriz.
Dusunelim ki tek basimiza ya da arkadaslarimizla sinemaya gittik ve guzel bir film var ve izlemeye karar verdik. Filmimizi sectikten sonra su adimlar gerceklesecektir;
- Oturacagimiz yeri seceriz ve onaylariz.
- Bu yer bize ayrilir. Artik burasi baskasina ayrilamaz.
- Odemeyi yapariz.
- Biletimizi aliriz.
Biletimizi aldiktan sonra filmimizi seyredebiliriz. Burada ya hep ya hic kurali gecerlidir , yani bu islemlerin herhangi birinde sorun olmasi ( mesela bilet alacak paramiz olmayabilir ) , islemin yani Transaction ‘in basarisiz olmasina neden olacaktir. Odeme asamasinda sorun olmasi film izleme keyfimizi tamamen iptal ettirir. Sectiginiz yer artik size ait degildir , her sey mahvolmus ve iptal olmustur. Tum islemler geri alinmistir , bu islemleri geri almanin karsiligi roll-back‘tir
Bu resmi gozumuzun onune getirip , bilet alma islemini aklimizin bir kosesinde tutarsak Transaction ve Roll-Back kavramlarini aklimiza kolayca gelecektir.
Transaction kavraminin ozelliklerini(properties) tanimlamak icin kullanilan su kelimeyi anlamaya calisalim; ACID
Peki bu ACID kelimesi ne anlam ifade etmektedir;
Atomic
Transaction , tekil bir is/islem/birimde bir veya birden fazla aktiviteyi icerebilir. Yukarida ornegimizde 4 madde ile aktiviteleri ifade ettik. Atomic kurali; ancak tum aktiviteler basarili oldugunda Transaction’in basarili olmasini ya da iclerinden bir aktivitenin bile basarisiz olmasi sonucu Transaction’in basarisiz olmasini ve tum aktivitelerin iptal edilmesini ve hic olmamis gibi eski haline getirilmesini (Roll-Back) ifade eder. Ya hep Ya hic kurali olarak dusunebiliriz.
Consistent
Consistent , turkce karsilik olarak tutarli/istikrarli/uygun gibi anlamlara gelmektedir. Ornek olarak bir veritabani(Database) sistemi dusunelim. Bir veritabanini(database) etkileyen Transaction gerceklestirildiginde(kayitlar ekleme, guncelleme , silme vb) , veritabanindaki tutarliligi saglamak “Consistent” ozelligine bir ornektir. Veritabaninin hali hazirdaki “Consistent State(Uygun/Tutarli Durum)” ‘ini bozmadan , Transaction’in sonlanmasi ve bu Consistent State’in korunmasi gerekmektedir.
Isolated
Isolate ,ayirmak yalitmak gibi anlamlara gelmektedir.
Ayni “data” uzerinde ayni anda birden fazla Transaction Process(islem)’i olabilir. Bu nedenle transaction ayni anda ayni “data” uzerinde okuma ya da yazma islemine engel olmalidir. Ornegimizi dusunecek olursak, yerimizi secip onayladiktan sonra bizim transaction’inimiz devam ederken ,baska biri gelip bizim sectigimiz yeri secememeli. Yoksa kavga cikar 🙂
Bu izolasyon yapisi veritabanlarinda ise locking yapisi ile saglanmaktadir. row veya tablo kilitleme islemi gibi.
Durable
Durable dayanikli/saglam/kalici gibi anlamlara gelmektedir.
Bir transaction sonlandiginda, bu transaction’in sonucu kalici hale (permanent) gelmelidir. Kalici hale gelmesine ornek; veritabanina yazilmasi ve commit isleminin basarili olmasidir. Transaction sonucu, sistem cokmelerine (System Failure) karsi verinin silinmesine karsi koruma altina alinmalidir. (commit)
Yazimi burada sonlandiriyorum.
Herkese Bol Javali Gunler dilerim.
Be an oracle man , import java.*;
Levent Erguder
OCP, Java SE 6 Programmer
injavawetrust