İçerikler :

Bucket CAS - Check and Set - Compare And Swap Cluster Couchbase Couchbase ile Transaction DefaultCouchbaseEnvironment Document get insert JsonDocument remove replace upsert View View Tutarlılığı (Consistency)

Bu Sayfayı Paylaş:

Kavram

Couchbase

Tanım: Key-value şekilde JSON tipinde veri saklayan bir NoSQL veritabanı

Kavram

Bucket

Tanım: Couchbase'de birbiriyle ilgili değerleri (key-value şeklinde saklanan bilgiler) içeren, bir bütün olarak yönetimi , organize edilmesi, analizi vb.. yapılabilen temel grup

Kavram

Document

Tanım: Couchbase'de saklanan ve geri alınabilen veri

Kavram

JsonDocument

Tanım: Couchbase'de içeriği JsonObject (JSON tipinde veri) olan document

Kavram

View

Tanım: Couchbase'de farklı dokümanlarının bazı alanları ve bilgileri ile oluşturulan, index'lenebilir ve sorgulama yapılabilir veri birimi. İlişkili veritabanlarındaki View'e benzerlik göstermektedir.

Kavram

CAS - Check and Set - Compare And Swap

Tanım: Bir doküman değiştirilirken ve kayıt edilirken, başka bir kullanıcı veya thread ile değiştirilip değiştirilmediği kontrol edilmesini sağlayan sistem. CAS değeri bir doküman get ile alındığında veya insert , upsert, replace ve remove yapıldığında değiştirilmektedir. Bir güncelleme işleminde CAS değeri kontrol edilmektedir

Kavram

get

Tanım: Bir bucket'ten bir dokümanı almak için kullanılan metot. Doküman bulunamaz ise null dönülmektedir

Kavram

insert

Tanım: Bir bucket'a yeni doküman eklemek için kullanılan metot. Eğer aynı key ile başka bir doküman var ise DocumentAlreadyExistsException oluşur

Kavram

replace

Tanım: Bir bucket'e bir dokümanı yeni doküman ile güncellemek için kullanılan metot. Eğer doküman yok ise DocumentDoesNotExistException oluşur

Kavram

upsert

Tanım: Bir bucket'ta bir doküman için, doküman var ise güncellemek yok ise yaratmak için kullanılan metot

Kavram

remove

Tanım: Bir bucket'tan bir dokümanı kaldırmak için kullanılan metot

Kavram

DefaultCouchbaseEnvironment

Tanım: Couchbase ile ilgili varsayılan konfigürasyon bilgileri ile (default environment) oluşturulan environment sınıfı

Kavram

Cluster

Tanım: Couchbase cluster sistemine bağlanmayı ve kullanmayı sağlayan ana sınıf. Bucket açma ve veri ile ilgili işlemleri (CRUD) bu sınıf üzerinden gerçekleştirilmektedir. CouchbaseCluster.create(..) metodu ile yaratılmaktadır.

Veri

View Tutarlılığı (Consistency)

Bu yazıda bir view sorgusu (view query) çalıştırırken kullanılan stale (bayatlık) özelliğinden bahsedilecektir
Couchbase'de bir view sorgusu yaptığınızda (bir view'i çağırdığınızda, view query) stale özelliği varsayılan olarak update_after olmaktadır. Bunun anlamı şu anda var olan indekse göre sorgu sonucu alınır ve daha sonra couchbase indekslemeyi kendi üzerinde yapar. Bu durumda varsayılan seçenekte bayat veri gelme olasılığı vardır. Çünkü indeksleme sonuç alındıktan sonra yapılmaktadır.
Eğer son değişiklikleri almak istiyorsanız stale (bayatlık) özelliğini false olarak vermeniz gerekir. Bu şekilde yapıldığında sorgu öncesi view indexlenir ve sonuç ondan sonra döndürülür. Bunun anlamı indeksleme yapılmasından dolayı sorgu sonucunun gecikmeli geleceğidir. Ancak veri en güncel hali olacaktır.
Eğer stale özelliği ok (veya true) seçilirse ne sorgu öncesinde ne de sorgu sonrasında herhangi bir indeksleme yapılmaz. Örneğin değişmeyen eski tarihli içeriklere bakan bir view için bu özellik kullanılabilir.

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.



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