Bir NoSQL Çözümü olarak Couchbase

Sefik Can Kanber
5 min readNov 23, 2020

NoSQL; MsSQL, MySQL, PostgreSQL gibi ilişkisel veritabanı sistemlerine (RDMBS) alternatif olarak üretilmiş bir veritabanı sistemidir. Bu veritabanı çözümü, bize ilişkisel olmayan, esnek yapılı, büyük verili ve çok sayıda aktif kullanıcılı sistemlerde yüksek performans ve yönetim kolaylığı sunar.

Couchbase, document ve key-value tabanlı, memory-first yapısına sahip bir NoSQL veritabanı çözümüdür. Verileri JSON olarak tutar ve N1QL sorgulama diline sahiptir.

Couchbase Linkedin, EBay, Paypal gibi şirketler tarafından kullanılır. Couchbase dışında MongoDB, Cassandra, HBase gibi farklı NoSQL veritabanları da günümüzde sıkça kullanılmaktadır.

Kurulum ve Konfigurasyon (Installation & Configuration)

Couchbase’i Docker üzerinden ayağa kaldırarak başlayalım. İlk olarak

docker pull couchbase komutu ile Couchbase Server Image’imizi çekelim ve

docker run -d --name db -p 8091-8094:8091-8094 -p 11210:11210 couchbase

komutu ile Couchbase Server Container’ımızı çalıştıralım. İlgili işlemler tamamlandıktan sonra http://localhost:8091 adresine gittiğimizde aşağıdaki gibi Couchbase Server’ının Cluster Oluşturma ekranı açılacaktır.

Couchbase Server

Setup New Cluster butonuna tıklayarak Cluster’ımızı oluşturalım:

Burada ilgili alanları açıklamak gerekirse;

Cluster Name: Oluşturulacak cluster’ımıza isim vermemizi sağlar. (Daha detaylı bilgi almak isterseniz: Naming Cluster and Nodes)

Create Admin Username: Oluşturacağımız kullanıcı Full Administrator rolünde oluşturulacaktır. Tüm Couchbase sunucularına write-read (okuma-yazma) erişiminiz olacaktır. Ayrıca, oluşturulan rollere göre yeni kullanıcı oluşturma gibi yetkilere de sahip olacaksınız.

Create Password: Full-Administrator rolündeki kullanıcımıza şifre vermek için kullanılır. Varsayılan olarak 6 karakter uzunluğunda bir şifre belirlemeniz gerekmektedir. Couchbase Cli üzerinden varsayılan şifre politikasını değiştirebilirsiniz.

İlgili bilgileri girdikten sonra Next diyerek bir sonraki aşamaya geçelim:

Bu ekranda Couchbase’in kullanımına ilişkin hüküm ve koşullar, hüküm ve koşullar başlığının hemen altındaki panelde görüntülenir. Panelin hemen altında bulunan hüküm ve koşulları kabul ediyorum onay kutusu işaretlenir (I accept the terms & conditions).

Daha sonra, Configure Disk, Memory ve Services butonuna tıklayarak ilgili ayarlamalarımızı tamamladığımız ekrana geçelim. Ekrandaki alanlar ile ilgili detaylı bilgi almak isterseniz.(Bknz.)

Son olarak, Save & Finish butonuna tıklayarak kurulum işlemini tamamlayalım. (Bu adımda yapacağımız değişiklikleri daha sonra Couchbase Server dashboard’u üzerinde değiştirebiliyoruz.)

Couchbase Dashboard

Couchbase’in Temel Özellikleri

Couchbase’deki veriler Bucket adı verilen mantıksal yapılarda saklanır. Veriler, ilişkisel veritabanlarında tablolarda tutulurken, Couchbase’de ise Bucket içerisinde tutulur.

Bucket’da veriler 3 farklı şekilde depolanır;

  • Couchbase Bucket: Verileri hem belleğe hem de diske yazar.
  • Memcached Bucket: Verileri yalnızca belleğe yazar.
  • Ephemeral Bucket: Verileri geçici olarak bellekte tutar.
Bkz: Yukarıda ilişkisel veritabanındaki bilgilerin MongoDB ve Couchbase’deki karşılıkları yer almaktadır.

Couchbase’in temel özelliklerinden bahsetmek gerekirse;

  • Couchbase, document-oriented, memory-first mimari yapısına sahip bir NoSQL veritabanıdır.
  • N1QL adı verilen bir sorgulama dili vardır. (Sorgulama dili olarak T-SQL’e fazlasıyla benzemektedir.)
  • Verilerimiz JSON olarak tutulur.
  • Kolay kurulum ve schemaless yapısı olması veri tipi tutma zorunluluğunu ortadan kaldırmaktadır.
  • Memory first mimarisine sahip olduğu için oldukça hızlıdır. (Veriler öncelikle memory’de tutulur, daha sonra işlenir).
  • MongoDB’deki gibi Document index’lemesi ile sorgularımızda büyük avantajlar sağlayabilir.
  • Cluster mimarisi üzerinde çalışabilen Couchbase, verileri farklı node’lar üzerine dağıtabilir.
  • Full-Text Search özelliğine sahiptir.
  • Geçiçi dokümanlar oluşturmak için TTL (Time-to-Live) özelliği vardır. Örnek vermek gerekirse; geçerliliği belirli bir süre olacak şekilde sms veya şifre sıfırlama linki vb. (Detaylı bilgi için bknz.)
  • SQL veritabanlarında çok sık kullandığımız Id’leri auto increment olarak tanımlarız ve her yeni kayıtta değeri 1 artar. Couchbase’de bu yapı yerine counter yapısı mevcut. Counter bize belirttiğiniz değerlerde bir veri oluşturur. Böylelikle, sürekli artan ve eşsiz bir değere sahip olmuş oluruz.
  • Replication desteği mevcuttur. (Replication veritabanlarında yük arttığı zaman uygulanır.)
  • CAP (Consistency, Avaiability, Partition Tolerance) ilkesinin Consistency (Tutarlılık) ve Avaiability (Erişilebilirlik) şartlarını sağlar. (CAP ilkesi ile ilgili detaylı bilgi için bknz.)
  • Verilerimizi tutarlı bir şekilde veritabanında barındırmak istersek Couchbase’in Durability özelliğini kullanmalıyız. Bu özelliği kullandığımızda veriler disk üzerine yazılarak tutarlılık sağlanır.
Couchbase Architecture

Yukarıdaki resimde de görüldüğü gibi Couchbase’in her biri farklı node’larda yer alan 6 servisi vardır. Farklı node’larda yer almasının sebebi kaynak kullanımını arttırmak ve iş yükünü dengelemektir.

Kısaca, bu servislerden bahsetmek gerekirse;

  • Data Service: Veriye ulaşmak için kullanılır.
  • Query Service: N1QL sorgulama dilinde belirtilen sorguları ayrıştırır, çalıştırır ve sonuçları döndürür. Query servisi, hem Data hem de Index servisleri ile etkileşimli bir şekilde çalışır.
  • Index Service: Index oluşturmak için kullanılan servistir. Query ve Analytics servisleri ile tutarlı bir şekilde çalışır.
  • Search Service: Full Text Search için özel olarak dizin oluşturmak için kullanılır.
  • Analytics Service: Cpu ve memory gibi kaynak kullanımını yükseltecek Join, Set, Aggregation ve Group operasyonlarını desteklemek için kullanılır.
  • Eventing Service: Trigger veya rapor oluşturmada kullanılan servistir.

Couchbase Rebalance ile Up-Down Yönetimi

Couchbase’de bucket’lar Active ve Replica olmak üzere ikiye ayrılır. Replica’lar bucket’ların yedeğini tutar. Active ve replica’lar veri kaybı olmaması adına farklı node’larda tutulur. Eğer, active bucket’a sahip node erişilemez olursa, down olan active bucket’ın replica’sı otomatik olarak up statüsüne geçer ve veritabanında herhangi bir işlem yapılmadan ve zaman kaybı olmadan verilere erişimi kusursuz bir şekilde sağlar. Down durumuna düşen node yeniden ayağa kalktığında, bucket’ın replica’sı yeniden farklı bir node üzerinde çalışmaya başlar. Bu işleme, Rebalance denir ve Couchbase tarafından otomatik olarak yapılır.

Bucket’ın replica sayısını;

  • Bucket’ı oluştururken veya
  • Oluşturduktan sonra Couchbase web UI’ı üzerinden ayarlayabiliriz.

MongoDB vs. Couchbase

  • Yükleme ve Yapılandırma İşlemleri

Couchbase sağladığı admin ui’ı sayesinde tek bir yerden tüm yapılandırma işlemlerini yönetmemize olanak sağlamaktadır.

MongoDB’de ise yapılandırma işlemleri için tüm yapılandırma ayarlarını manuel olarak ayrı ayrı şekilde yapmamız gerekmektedir.

  • Memory Kullanımı

Couchbase yüksek performanslı MemCached protokolünü kullanarak herhangi bir Cache mekanizması ihtiyacını ortadan kaldırır.

MongoDB’de yüksek performans ve scale işlemlerini yönetebilmek için third-party Cache tool’larına ihtiyaç vardır.

  • Maintenance (Bakım) İşlemleri

Couchbase’de maintenance işlemlerini web ui, Couchbase Cli veya Rest Api’lar üzerinden gerçekleştirebilmemize olanak sağlamaktadır.

MongoDB’de maintenance işlemleri için sadece Cli araçlarını kullanabilmekteyiz. Third-party araçlarını kullanarak bir ui yardımı ile de maintenance işlemlerini gerçekleştirebiliriz.

  • Desteklenen Programlama Dilleri

Couchbase, MongoDB kadar geniş dil desteği vermese de C#, Go, Java ve Python gibi popüler dillere desteği ile muadilinden çok geride kalmamıştır.

Couchbase vs. MongoDB Query Örnekleri

Bkz: Couchbase N1QL ile T-SQL benzeri çok basit ve anlaşılır bir yapı sunmakta.

Couchbase veritabanı konusunda temel düzeyde bilgi vermeye çalıştım.

Faydalı olması dileğiyle.

İyi çalışmalar.

Kaynaklar:

--

--