Couchbase Nedir? Temel Özellikleri, Örnek Sorgular ve Kurulumu
NoSQL; MSSQL, MySQL ve PostgreSQL gibi ilişkisel veritabanı sistemlerine (RDBMS) 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. Linkedin, eBay ve 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.
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.
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.
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 ise 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 ise 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
/* MongoDB */ db.CUSTOMER.find({customerId:"C123"}) /* Couchbase: N1QL */ SELECT * FROM CUSTOMER WHERE customerId = "C123"; /* MongoDB */ db.CUSTOMER.save({_id: "C123", {“id”: “C123”, “firstName”: “Şefik Can”, "lastName":"Kanber"}) /* Couchbase:N1QL */ INSERT INTO CUSTOMER(KEY, VALUE) VALUES (‘C123’, {“id”: “C123”, “firstName”: “Şefik Can”, “lastName”:"Kanber"}) /* MongoDB */ db.CUSTOMER.update({_id:"C123"},{"firstName":"Mehmet"}) /* Couchbase:N1QL */ UPDATE CUSTOMER SET "firstName" = "Mehmet" WHERE id = "C123" /* MongoDB */ db.CUSTOMER.remove({_id:"C123"}) /* Couchbase:N1QL */ DELETE FROM CUSTOMER WHERE id = "C123"; /* MongoDB */ $group : { [ { a:”$a”}, {b:”$b”}, {c: “$c”}, count: { $sum: 1 } ] } /* Couchbase: N1QL */ SELECT b, c, SUM(a) FROM t GROUP BY b, c /* MongoDB */ ORDER BY { $sort : { age : -1, posts: 1 } } /* Couchbase: N1QLL */ ORDER BY age DESC, posts ASC
Couchbase’i yakından tanıyıp MongoDB ile aralarındaki benzerlikleri ve farkları da inceledikten sonra bilgisayarımıza nasıl kurabileceğimizi ve yapılandırabileceğimize de bakalım.
Kurulum ve Konfigurasyon
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ğıda görüldüğü gibi Couchbase Server’ının Cluster Oluşturma ekranı açılacaktır.
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 (yazma-okuma) 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, bu başlığı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.)
Kaynakça:
https://www.couchbase.com/
https://dzone.com/articles/introduction-to-couchbase-for-mongodb-developers-a-1
https://db-engines.com/en/system/Couchbase