Couchbase 101 — Couchbase Nedir?
Genel olarak bir uygulama geliştirmeye başladığımızda vermemiz gereken kararlardan biri de veritabanı seçimidir. Uygulama niteliklerini en iyi şekilde karşılayan veritabanına karar verir ve geliştirmeye başlarız. Bu yazımda veritabanı seçenekleri arasında karşımıza çıkan bir NoSQL veritabanı olan Couchbase’i incelemeye çalışacağız.
İlk akla gelen sorulardan biridir elbet, “İyi de neden bildiğimiz SQL varken Couchbase kullanalım?” Pek tabii bu sorunun cevabını değiştiren bir çok kırılım var. Öncelikli olarak uygulama ihtiyaçlarını belirlemeli ve veri modelinize göre bir karar vermelisiniz. Tabii ki bir veritabanının da ihtiyaçları nasıl çözeceği ve maliyeti de bir hayli önemli. O zaman biz yavaştan başlayalım.
Nedir bu Couchbase, yenilir mi, içilir mi?
Couchbase adını sıkça duymaya başladığımız ve gittikçe popülerleşen döküman ve key-value tabanlı çalışabilen bir NoSQL veritabanıdır. Cluster mimarisi üzerinde çalışır ve verileriniz bir çok node üzerine dağıtılabilir. Nodelar üzerinde ki veriler öncelikli olarak bellekte işlenir ve aynı zamanda bucket türlerine göre veri tutarlılığını sağlamak için diskede yazılır. Yaptığınız sorgulama ve güncelleme işlemler öncelikli olarak bellek üzerinde yapılır. Böylelikle hızlı bir şekilde verilerimize ulaşabilir ve bunlarla ilgili işlemlerimizi yapabiliriz.
Dilerseniz Couchbase’in ilk akla gelen ve farklı kılan özelliklerinden kısa kısa başlayalım;
Couchbase’de veriler Bucket adı verilen mantıksal yapılar içerisinde saklanır ve bucket özelliklerine göre veri saklama türleri farklılık gösterebilir. Couchbase 3 farklı bucket tipi sunar, bunlar; Couchbase, Ephemeral ve Memcached.
CAP(Consistency,Avaiability,Partition Tolerance) teoreminde ki Consistency ve Avaiability ilkelerini karşılar. Bkz: CAP Theorem
SQL veritabanlarında veri tutarlılığını sağlamak için sıkça kullandığımız lock mekanizmalarını bir çoğumuz kullanmıştır ve belkide sadece bu mekanizmalar için bir NoSQL veritabanı tercih etmiyor olabilirsiniz. Fakat Couchbase dökümanlar üzerinde tuttuğu CAS değeri ile Optimistic ve Pesimistic lock imkanı sunmakta.
Couchbase’de dökümanlarınız Json olarak tutulur. Bunları sorgulamak istediğinizde ise size full-text search arama yapmanıza imkan tanır. Sorgu dili olarak ise SQL’ e çok benzeyen N1QL’i kullanır.
{
"airportname": "Brienne Le Chateau",
"city": "Brienne-le Chateau",
"country": "France",
"faa": null,
"geo": {
"alt": 381,
"lat": 48.429764,
"lon": 4.482222
},
"icao": "LFFN",
"id": 1306,
"type": "airport",
"tz": "Europe/Paris"
}
Yukarıda örnek bir Couchbase dökümanı görebilirsiniz. Couchbase döküman içerisinde sub-document özelliğide sunmakta. Örneğin yukarıda ki döküman tipinde verilerimiz olsun ve sampleBucket adlı buckette barınıyor olsun. Bu veriler arasından geo.alt değeri 381 olan dökümanlara ulaşmak istediğimizde aşağıda ki gibi basit bir sorgu yeterli olacaktır.
select * from sampleBucket where geo.alt = 381
Yukarıdaki gibi basit bir veriyi çekmek istediğinizde SQL veritabanlarında ki inner joinleri hatırlayın 🤦♂️
NoSQL veritabanlarında genel olarak dökümanlar güncellendiğinde tüm döküman güncellenir. Bu da zaman zaman can sıkabilmekte. Fakat Couchbase’in sunduğu sub-document ile sadece döküman içerisinde ki bir alt dökümanı ya da döküman içerisinde ki bir değeri güncelleyebilirsiniz.
Couchbase içerisinde geçici dökümanlar oluşturmak için TTL özelliğini sunar. Örneğin bir şifre sıfırlama linki oluşturduğunuzu düşünün ve bunun geçerlilik süresinin 1 saat olması isteniyor. Bu linke ait döküman için vereceğiniz 1 saatlik TTL adeta bunun için biçilmiş bir kaftan
SQL veritabanlarında çok sık kullandığımız ID değerlerini hatırlıyorsunuzdur. Genellikler ID’leri auto increment olarak tanımlarız ve her yeni kayıtta değeri 1 artar. Couchbase’de bu yapı mevcut değil fakat bunun sağlayacak bir şey mevcut o da counter. Counter size atomik olarak belirttiğiniz değerlerde bir veri oluşturur. Böylelikle sürekli artan ve eşsiz bir değere sahip olmuş olursunuz bunu SQL’de ki sequence olarak düşünebilirsiniz.
>>> cb.counter('counter_id', delta=20, initial=100).value
100L
>>> cb.counter('counter_id', delta=1).value
101L
>>> cb.counter('counter_id', delta=-50).value
51L
Veritabanlarında yük arttığı zaman uygulanan ilk çözümlerden biride replicationdır.
“Replicayı oluşturalım sorgular ordan aksın” — Bir DBA atasözü.
Genellikle veritabanları kendi nodeları arasında replication yapabilmekte, hatta bazıları replication içinde ayrı lisans istemekte 🙄. Diğer veritabanlarına replication için ise farklı araçlar gerekmekte. Couchbase’de dilediğiniz bucketin replicationını kolaylıkla oluşturabilirsiniz, hatta XDCR ile farklı platformlar ile replicationda oluşturabilirsiniz. Aşağıda Couchbase’in kendi içinde sunduğu XDCR connectorleri görebilirsiniz.
Pek tabii indexler, indexler olmadan olmaz. Couchbase’de de sık sorguladığımız alanlar üzerinde index oluşturma imkanımız mevcut. Dökümanların dağıtımları oluşturulan indexlere göre belirlenir. Böylelikle sıkça sorguladığımız dökümanlar daha hızlı bir şekilde bulunur ve getirilir.
Bu yazımda sizlere Couchbase’ 101 seviyesinde anlatmaya çalıştım, ilerleyen yazılarda görüşmek üzere 🙋♂️