
Apache Cassandra Nedir, Nasıl Kullanılır?
Apache Cassandra, NoSQL veri tabanı olarak bilinen bir veri tabanı türüdür; bu, çoğu veri tabanında bulunan geleneksel ilişkisel yapıyı kullanmadığı anlamına gelir. Bunun yerine, özellikle ilişkisel olmayan verileri depolamak için çok uygun olan daha esnek bir veri modeli sunar. Bununla birlikte, Apache Cassandra'nın öne çıkan özelliği, onu diğer veri tabanlarından ayıran dağıtılmış yapısıdır. Bu benzersiz yapıda, veriler bir küme içindeki birden çok bileşende depolanır ve her bileşen belirli kriterlere göre belirlenir. Bu dağıtılmış yaklaşım, artan ölçeklenebilirlik, hata toleransı ve yüksek düzeyde veri kullanılabilirliği sağlayarak Apache Cassandra'yı büyük miktarda veriyi dağıtılmış ve güvenilir bir şekilde işlemek için tercih edilen bir seçenek haline getirmektedir. Cassandra'nın kökeni, Facebook'un olağanüstü performansla arama ve indeksleme görevlerini yerine getirebilecek bir veri kaynağı arayışına kadar uzanıyor. Bu amaçla bir ekip, Facebook'un altyapısındaki bu süreçleri optimize etmeyi amaçlayan Java tabanlı bir tasarıma girişmişti. Proje ilerledikçe, daha geniş teknoloji topluluğunun dikkatini ve ilgisini çekerek 2008'de açık kaynak girişimine dönüşmesine yol açmıştır. Potansiyelinin farkına varan Apache, Mart 2009'da Cassandra'yı kuluçka merkezine getirmek için girişimde bulunmuştur ve o zamandan beri gelişmeye ve gelişmeye devam etmiştir.
Cassandra Veri Modeli
Apache Cassandra, veri tabanında öncelikle satırlar ve sütunlardan oluşan bir tablo yapısı kullanır. Özellikle, ilişkisel veri tabanlarına benzer bir yapı izler. Bununla birlikte, geleneksel veri tabanlarının aksine Cassandra, veri modelleme açısından üstün esnekliğini vurgulayarak her satırda değişen sütunlara izin verir. Cassandra veri modeli, tablolar, satırlar, sütunlar, anahtar alanı ve kümeler gibi çeşitli bileşenleri kapsar. Tablolar, bilgileri depolamak ve almak için yapılandırılmış bir biçim sağlayarak satırlar ve sütunlar halinde verileri düzenlemek için kullanılır. Öte yandan keyspace, tabloların birden çok node’a dağıtıldığı genel yapıyı temsil eder. Ayrıca kümeler, bir veya daha fazla keyspace’den oluştukları için Cassandra veri modelinin ayrılmaz bir parçasıdır. Kümeler, ilgili keyspace’leri bir arada gruplandırmak için kullanılır, bu da veri tabanındaki verilerin daha kolay yönetimini ve organizasyonunu kolaylaştırır. Bu nedenle, Cassandra veri modeli, verileri verimli bir şekilde yönetmek ve yapılandırmak için kapsamlı bir çerçeve sağlamak üzere bu öğeleri birleştirir.
Cassandra Veri Tipleri
Cassandra veri tabanında toplamda üç veri tipi bulunmaktadır. Bunlar yerleşik, koleksiyon ve kullanıcı tanımlı olarak adlandırılır. Sizler için Cassandra veri tiplerini ayrıntılarıyla inceledik.
Yerleşik Veri
Cassandra veri tabanının temel üç veri tipinden birisi olan Cassandra yerleşik veri tiplerini ve amaçlarını sizler için inceledik.
>boolean: Yalnızca iki değer içeren değişkenler için kullanılır ve true ya da false olmak üzere iki değeri temsil eder.
>blob: Multimedya, ses, görüntü gibi içerikleri temsil etmek için kullanılır ve rastgele dizilmiş byte dizilerinden oluşur.
>ascii: Kelimeler ve harfler gibi karakter dizilerini temsil eder yani dizeler için kullanılır.
>bigint: Bu veriler int ile karşılaştırıldığında 64 bit işaretli uzun tamsayılar için kullanılır.
>Counter: Tamsayılar için kullanılır ve sayaç sütununu temsil eder.
>decimal: Neredeyse her dilde kullanılan bu veriler örnek tamsayılar için kullanılır.
>double: Tamsayılar için kullanılır ve 64 bitlik gerçel sayıları temsil eder.
>float: Sayılar için kullanılır ve 64 bitlik gerçel sayıları temsil eder.
>inet: Dizeler ya da karakterler için kullanılır ve bir IP adresini temsil eder.
>int: Big int veri türünün düşük aralıklı bir sürümüdür ve 32 bit işaretli negatif ve pozitif sayıları temsil eder.
>text: Dizeleri temsil etmek için kullanılan bu veri türü UTF 8 kodlu dizeleri simgeler.
>varchar: UTF 8‘i karşılamak için de kullanılan bu veri türü rastgele bir karakteri veya bir değişkeni tanımlamak için kullanılır.
>timestamp: Tarih, yıl, saat gibi biçimlerle zamanı göstermek için kullanılan bu veri türü tarih bilgisini temsil eder.
Koleksiyon Veri
Cassandra veri tabanında bulunan üç temel veri tipinden birisi olan Cassandra koleksiyon veri tipini ve neleri temsil ettiklerini sizler için inceledik.
>list: Bir tabloda bulunan bir veya birden fazla koleksiyonu temsil eder.
>map: Anahtar-değer çiftleri koleksiyonlarını temsil etmek için kullanılır.
>set: Bir veya birden fazla birimin tabloda sıralanmış koleksiyonunu temsil etmek için kullanılılır.
Kullanıcı Tanımlı Veri
Cassandra veri tabanında bulunan üç temel veri tipinden birisi olan Cassandra kullanıcı tanımlı veri tipi, bireylerin kendi özel gereksinimlerine göre kendi veri türlerini özelleştirmesine ve tasarlamasına olanak tanır. Kullanıcı, istenen veri tipini ve ilgili alanları oluşturduktan sonra hem alanları hem de tüm veri tipini değiştirme, doğrulama veya silme olanağına sahip olur.
Cassandra Çalışma Prensibi
Cassandra, modern araçlarda yaygın olarak bulunan çeşitli donanım ve cihazlara dağıtılan çok sayıda node’lardan oluşan bir cluster mimarisi içinde çalışır. Node sayısının önemli olduğu senaryolarda, cluster genelinde daha küçük ve daha yerelleştirilmiş Data Center grupları oluşturmak mümkün hale gelir. Genellikle "Cassandra Ring" olarak adlandırılan bir cluster yapısı şeklinde 4 node’dan oluşan bir grup gözlemlenebilir. Cluster’a her yeni bilgi eklendiğinde, benzersiz tanımlama amaçları için tek bir token atanır. Her bir node’daki verilerin tahsisi, mevcut toplam token ve node sayısı kullanılarak bir "Token Range" hesaplanarak belirlenir. Yeni veri geldiğinde, Cassandra'daki bir hash algoritma aracılığıyla benzersiz bir hash (token)(emp_id) atanır ve bu hash’in bulunduğu token aralığındaki uygun node’da depolanır. Belirli aralıklarla, cluster’daki her node, değişen sayıda rasgele seçilen node’larla (maksimum 3 node’a kadar) peer-peer mantığıyla iletişim kurar. Bu iletişim sayesinde node’lar, önceki aralıkta diğer node’lardan aldıkları durum bilgilerinin yanı sıra mevcut durumlarını (active/failure/error gibi) değiştirirler. Temel olarak, node’lar kendi durumlarıyla birlikte diğer node’lar hakkındaki en son bilgileri iletir. Bu nedenle, node’lar arasındaki iletişim protokolüne "Gossip Protocol" veya basitçe dedikodu denir. Cluster’da, verileri olan node’lar, belirtilen yapılandırmaya bağlı olarak bu verilerin diğer node’lardaki yedeklerini de tutar. Genellikle sistem yöneticisi olan kullanıcı, veri çoğaltma işlemleri için bu ayarları özelleştirebilir.
Cassandra Avantajları
Oldukça popüler bir NoSQL veri tabanı olan Apache Cassandra, kapsamlı özellik yelpazesi sayesinde çeşitli alanlardaki işletmelere sayısız fayda sağlar. Aşağıda Cassandra avantajlarını daha ayrıntılı olarak inceleyelim. Cassandra, veri hacmindeki ani artışları veya dalgalanmaları, önemli ayarlamalar veya değişiklikler gerektirmeden kolayca karşılama esnekliğine sahiptir. Bu, verilerde ani bir artış olduğunda bile hizmetin uyum sağlayabileceği ve herhangi bir kesinti olmadan en iyi şekilde çalışmaya devam edebileceği anlamına gelir. Cassandra, çok sayıda sunucuda önemli miktarda veriyi etkin ve verimli bir şekilde yönetme yeteneğine sahiptir. Bu, büyük miktarda bilgiyle uğraşırken bile işleme ve depolama gereksinimlerini sorunsuz bir şekilde karşılayabileceği anlamına gelir. Ayrıca, kapsamlı verileri okuma veya depolanan bilgilere erişme verimliliğini olumsuz etkilemeden hızlı bir şekilde yazma görevini gerçekleştirebilir. Cassandra, birden fazla veri merkezi arasında kolayca veri dağıtma kolaylığı sağlar. Bu, kullanıcıların verilerini farklı konumlar arasında kolayca paylaşabileceği ve aktarabileceği, böylece çeşitli coğrafi bölgelerde erişilebilirlik ve kullanılabilirlik sağlayabileceği anlamına gelir. Ek olarak, herhangi bir veri kaybını önleme, bilgilerin güvenli bir şekilde saklanmasını ve korunmasını sağlama yeteneğine sahiptir. Cassandra, yapılandırılmış verileri işleme kapasitesine ek olarak, yarı yapılandırılmış ve yapılandırılmamış verileri de yönetebilir. Veriler ister belirli bir biçimde organize edilmiş, ister kısmen organize edilmiş veya tamamen organize edilmemiş olsun, Cassandra onu etkili bir şekilde işleyebilir.
Cassandra Dezavantajları
Elbette bu kadar avantajın yanında Cassandra’nın dezavantajları da bulunmaktadır. Cassandra'nın bir NoSQL veritabanı olaması bu eksikliklerin çoğu temel nedeni olarak gösterilebilir. Cassandra, ilişkisel veri tabanlarının aksine yabancı anahtar yapısına sahip değildir. Basitçe gerekirse bir objenin veya verinin bir diğer tablodaki birincil key'ini gösteren foreign key yapısını Cassandra'da bulunamaz. Bu kararın değerlendirmesi olarak foreign key yapının sebep olabileceği potansiyel performans kaybı gösteriliyor. Foreign key yapılandırmasını geride bırakmak Cassandra kurallarının içinde bir nesnenin ikinci bir tablosu var olsa dahi aynı nesnenin kanıtlanamadığı anlamına gelmektedir. Yani iki farklı tablodaki objeler aynı olsa dahi bu iki objeyi eşleştirmek mümkün değildir. Bu durum bize iki önemli dezavantaj sunmaktadır: İlk olarak bir CQL sorgusunda aradığımız bir nesnenin bir field’ini farklı bir tablo içinde tutuluyorsa, o değer ulaşılamaz anlamına gelmektedir. Bulunan CQL sorguları veriye hızlı ve kolay erişim sağlayacak olsa bile sınırlı bir şekilde (tasarımımızın ulaştığı yer) bir veriye erişim imkânı tanımaktadır. İkinci olarak, tablolar aynı nesneleri tutsa dahi veri eşleştirmesini yapmak için gerekli foreign key'ler olmadığı için tablolar arasında birleştirme işlemini yapmak mümkün değildir. Cassandra içinde saklanacak bilgiler için tablolar ve veri ölçümleri sistemi yukarı kaldırılmadan önce planlanmalıdır. Aksi takdirde, verilerin ilerleyen aşamalarında bu planlamaları değiştirmek için hatırı sayılır bir ek efor harcamak gerekir.
Apache Cassandra Hakkında Sık Sorulan Sorular
NoSQL Veri Tabanı Nedir?
NoSQL veri tabanları ilişkisel olmayan veri tabanlarıdır, yarı yapılandırılmış ve yarı yapılandırılmamış verileri bir arada depolayabilir.
Cassandra Cluster Nedir?
Cassandra cluster verilerin dağıtımını desteklemek için tasarlanmış büyük veri kümeleridir.
Cassandra Keyspace Nedir?
Cassandra keyspace, node’lar üzerine yazılmış verileri tanımlamak için kullanılan bir terimdir.
Cassandra Partition Key Nedir?
Cassandra partition key, verilerin verimli ve eşit bir şekilde bir cluster’a dağılmasını sağlar.