Veri

Couchbase ile Transaction

Couchbase bir çok NoSQL ürünü gibi transaction'ı desteklemez. Transaction kavramı hakkında bilgi için bu sayfaya bakabilirsiniz. Couchbase desteklemese de iş katmanında (business logic) transaction'a ihtiyacınız olabilir.
Couchbase'da iki tane yöntem kullanılabilir:
  • Lease-out pattern (Kiralama deseni) : Döküman üzerindeki bir bilgiyi korumak için kullanılır. Bu şekilde aynı anda başka süreçler bir süreç işini bitirmediği durumda bu bilgi üzerinde bir değişiklik yapamaz. Örneğin online bilet satan bir sistemde bir bilet sadece tek bir kere satılabilmesi gerekir.
  • Two-phase commits (İki fazlı işleme) : Tüm dökümanlarda değişiklike tamamlanır. Eğer değişiklikle başarılı ise commit işlemi yapılır. Eğer bir tane başarısız durum varsa tüm dökümanlarda işlemler geri alınır

Lease-out Pattern - Kiralama Deseni

Örneğin online bir bilet satan sistem düşünelim.
  • Tek koltuk bir kere satılır. Aynı koltuk iki kere satılamaz
  • Bir koltuk boşta ise kullanıcı o koltuk için bilet alabilir
  • Bir kullanıcı bilet alma işlemini sonlandırmayabilir
  • Bir kullanıcı bilet alma işleminde vazgeçtiğinde o bilet tekrar satılabilir olmalıdır
Bu ihtiyaçları sağlamak için aşağıdaki gibi bir yöntem kullanabiliriz:
  • Her bilet için bir döküman olmalıdır
  • Her döküman için bir Lease/Reserve (Kirala/Rezerv) belirli bir süre rezerv sistemi kurulmalıdır
  • Her koltuk için tekrar boşalacağı bir durum oluşabilmelidir
Örneğin , ayırmak için uygun olan bir biletin durumu aşağıdaki gibi olabilir:
{ 
"ticket_id" : "ticket1", 
"seat_no" : 100,
"state" : "AVAILABLE"
} 
Görüldüğü gibi state (durum) özelliği AVAILABLE (uygun) şeklindedir. Bir bilet ayırtıldığında aşağıdaki şekle çevrilebilir:
{
"ticket_id" : "ticket1",,
 "seat_no" : 100,
"state" : "INCART",
"expiry" : <timestamp> 
} 
INCART, şu anda alınma sürecine girildiğini, expiry dönemine kadar bu şekilde kalacağı belirtilmiş olunur. Eğer expire zamanı için satın alma işlemi tamamlanırsa satıldı durumuna getirilebilir:
{
"ticket_id" : "ticket1",
"seat_no" : 100,
"state" : "SOLD",
"expiry" : 0
}

Two-phase Commits - İki Fazlı İşleme

Bu süreçte işlem yapılması gereken tüm dökümanlara transaction'un durumu ile ilgili bilgi eklenir. Transaction süreci içinde üçüncü bir döküman yaratılır. Asıl dökümanlarda sırasıyla gerçekli güncelleme işlemleri yapılır ve hangi transaction içinde ise o bilgi dökümana eklenir. Sırasıyla işlemler yapılır. Eğer işlemler başarılı ise transaction dökümanı tamamlandıya çekilir ve dökümanlardan transaction bilgisi kaldırılır. Eğer bir hata olursa, transaction işleminde geçirilen dökümanlarda (transction özelliği set edilmiş olanlar işlemden geçirilmiş demek) işlemlerin geri alınması sağlanır.
Örneğin iki kişi arasında puan transferi yapan bir örnek couchbase'in developer sitesinde aşağıdaki gibi gösterilmiştir: karen'den dipti'ye 100 puan transfer edilmektedir. Önce dipti 100 puan artırılır ve trans değeri set edilir. Ardından karen'den 100 puan azaltılır ve trans değeri set edilir. Artık tüm içerikler bitti ise transaction durumu commit'e çekilir.
Hata oluştuğu durumlarda da nasıl davranılacağı aşağıdaki gibi gösterilmiştir: Hata olan aşamada trans değeri dolu olanlarda işlem geri alınır.
zafer.teker , 30.05.2018

Bu Sayfayı Paylaş:

Fibiler Üyelerinin Yorumları


Tüm üyeler içeriklere yorum ekleyerek katkıda bulunabilir : Yorum Gir



Bu Sayfayı Paylaş:

İletişim Bilgileri

Takip Et

Her Hakkı Saklıdır. Bu sitede yayınlanan tüm bilgi ve fikirlerin kullanımından fibiler.com sorumlu değildir. Bu sitede üretilmiş , derlenmiş içerikleri, fibiler.com'u kaynak göstermek koşuluyla kendi sitenizde kullanılabilirsiniz. Ancak telif hakkı olan içeriklerin hakları sahiplerine aittir