Cassandra ile MongoDB arasındaki fark nedir?
Apache Cassandra ve MongoDB, verileri tablo olmayan bir biçimde depolayan iki NoSQL veritabanıdır. Cassandra, tablo ve anahtar-değer deposu arasında hibrit bir tasarıma sahip eski bir NoSQL veritabanıdır. Hızlı okuma ve yazma performansı gerektiren uygulamalar için veri depolamak üzere tasarlanmıştır. Buna karşın MongoDB, genel amaçlı kullanım için oluşturulmuş bir belge veritabanıdır. Yapılandırılmamış verileri İkili JSON veya BSON adı verilen optimize edilmiş bir JSON biçiminde depolamanıza olanak tanıyan esnek bir veri modeline sahiptir. MongoDB veritabanı, zengin ve kolay kullanılabilen API'lerle tam dizine ekleme desteği ve çoğaltma sağlar.
Cassandra ile MongoDB arasındaki benzerlikler nelerdir?
Hem Apache Cassandra hem de MongoDB, NoSQL veritabanı grubuna aittir. NoSQL veritabanları, veritabanı şeması olmadan yapılandırılmış, yapılandırılmamış ve yarı yapılandırılmış verileri depolayabilir.
NoSQL veritabanlarında veri depolama alanı, geleneksel ilişkisel veritabanı yönetim sisteminden farklı olarak tablo biçimi ve tablolar arasındaki ilişkiler tarafından kısıtlanmaz. Verimli bir şekilde ölçeklendirmek için verileri birden çok düğüm arasında serbestçe bölümleyebilir ve çoğaltabilirsiniz.
Ek olarak, Cassandra ve MongoDB'nin ilk sürümleri açık kaynaklıdır. Bu, bu NoSQL veritabanlarının kaynak kodunu indirebileceğiniz ve bunları istediğiniz gibi yapılandırabileceğiniz anlamına gelir.
Facebook, Cassandra'yı geliştirdi ve ardından Apache ile açık kaynaklı bir proje olarak yayınladı. MongoDB; MongoDB, Inc. altında küçük bir geliştirici grubu tarafından geliştirilmiştir. MongoDB'nin 16 Ekim 2018'den önce yayınlanan tüm sürümleri GNU Affero Genel Kamu Lisansı altında mevcuttur.
Veri modeli farklılıkları: Cassandra ve MongoDB
Hem MongoDB hem de Apache Cassandra NoSQL veritabanları olsa da verileri farklı şekilde depolar ve yönetirler.
Cassandra
Cassandra, verileri anahtar-değer depoları olarak depolar. Tabloları satır ve sütunlarla tanımlamanıza olanak tanır ancak tablo yapısı gerçek depolamada kullanılmaz. Bunun yerine, geniş sütun odaklı veritabanı modelini kullanır ve böylece tablodaki her satırın farklı bir sütun kümesi olabilir.
Sütunları, veri türlerine veya kullanımlarına göre sütun aileleri halinde gruplandırabilirsiniz. Her satırda, Cassandra'dan gelen verileri hızlı bir şekilde okumak için kullanabileceğiniz bir birincil anahtar vardır.
Apache Cassandra tablo yapısı aşağıdaki örnekte görselleştirilebilir.
Müşteri kimliği 1 | Sütun - Ad |
Sütun - Ülke |
|
Değer - John Doe |
Value - Amerika Birleşik Devletleri |
||
Müşteri kimliği 2 | Sütun - Ad |
Sütun - Yaş |
Sütun - E-posta |
Değer - Jane Doe |
Değer - 35 |
Değer - jane_doe@example.com |
MongoDB
Buna karşılık MongoDB, optimize edilmiş bir İkili JSON (BSON) biçimi kullanarak verileri şema olmadan depolar. Birkaç veri türünü JSON nesnelerine benzer şekilde tek bir belgede depolayabilir ve ardından BSON ile serileştirebilir.
MongoDB, belgeleri farklı yapılara sahip verileri içerebilen koleksiyonlar halinde düzenler. Veri modeli esnektir ve büyük hacimli yapılandırılmamış verileri işleyebilir.
Aşağıda MongoDB'deki müşteri verilerine bir örnek verilmiştir.
customers:[ { customer_id: "1", name: "John Doe", country: "United States" }, { customer_id: "2", age: "35" email: "jane_doe@example.com" }] |
Mimari farklılıkları: Cassandra ve MongoDB
Veri modellerindeki farklılıklar nedeniyle, Cassandra ve MongoDB çeşitli veritabanı özelliklerini farklı şekilde uygular.
Temel depolama birimi
Cassandra'da, Sıralanmış Dize Tabloları (SSTables) diskteki verileri sürdürmek için kullanılan temel depolama birimidir. SSTable, belirli bir sütun ailesi (tablo) ve bölüm için sıralanmış anahtar-değer çiftleri kümesini içeren bir dosyadır. SSTables değişmez, bu da bir kez yazıldıktan sonra değiştirilemeyecekleri anlamına gelir.
MongoDB'de temel depolama birimi bir belgedir. Belge, anahtarların dizeler olduğu ve değerlerin çeşitli türlerde olabileceği bir anahtar-değer çiftleri kümesidir. Örneğin, değerler diğer belgeler, diziler, dizeler, sayılar, tarihler ve Boole değerleri olabilir. Belgeler koleksiyonlarda saklanır.
Sorgu dili
Sorgu dili, verileri veritabanına eklemek ve veritabanından almak için kullandığınız ifadelerdir.
Cassandra Sorgu Dili (CQL), Cassandra'da kullandığınız sorgu dilidir. SQL ile benzer bir söz dizimi ve yapısı olsa da Apache, sütun ailesi veri modeliyle çalışması için CQL'yi geliştirmiştir.
Diğer yandan MongoDB, Node.js ile benzer komutlara sahip olan MongoDB Sorgu Dili (MQL) kullanır. MQL; oluşturma, okuma, güncelleme ve silme (CRUD) işlemlerini destekler. MongoDB Kabuğu'nda MQL komutları yazabilirsiniz.
Dizine ekleme
Dizine ekleme, veri alma işlemlerinin hızını ve verimliliğini artırmak için veritabanlarında kullanılan bir tekniktir. Bir veritabanı tablosundaki bir veya daha fazla sütunun değerlerini diskteki ilgili verilerin fiziksel konumuna eşleyen bir veri yapısı oluşturmayı içerir.
Cassandra iki tür dizini destekler:
- Ayrı sütunlarda ikincil dizinler
- Birden çok sütunda SSTable Ekli İkincil Dizinler (SASI)
SASI dizinleri, dizin verilerini doğrudan SSTables'a depolar. Çok sayıda benzersiz değere sahip sütunlarda aralık, ön ek ve tam metin arama gibi karmaşık sorguları destekler.
Buna karşılık MongoDB, koleksiyon düzeyinde ve alan düzeyinde dizine eklemeyi destekler. Tek alan, birleşik ve çok anahtarlı gibi birden çok dizin türü sağlar. Ayrıca şu dizinleri sunar:
- coğrafi olarak dağıtılmış veriler için özel jeo-uzamsal dizin
- büyük hacimli metin verileri için bir metin arama dizini
- sayısal veriler için karma ve kümelenmiş dizinler
Eş Zamanlılık
Veritabanlarında eş zamanlılık, birden fazla kullanıcının veya işlemin veritabanı işlemlerine birbirine müdahale etmeden aynı anda erişebileceği ve gerçekleştirebileceği anlamına gelir.
Cassandra, döner platform tutarlılığı ve satır düzeyinde bölünmezlik yoluyla eş zamanlılık elde eder. Aynı anda bir satırda yalnızca tek bir kullanıcı çalışabilir.
Döner platform tutarlılığında, her replika düğüm, ilişkili verilerin sürüm geçmişini izleyen veri yapısı olan bir vektör saatini korur. Bir yazma işlemi gerçekleştirildiğinde, vektör saati yeni sürümü yansıtacak şekilde güncellenir. Bir okuma işlemi gerçekleştirildiğinde, Cassandra tüm replikalar arasında en yüksek zaman damgasına sahip sürümü döndürür. Bu da her zaman verilerin en son sürümünün döndürülmesini sağlar.
Buna karşılık, MongoDB çok sürümlü eş zamanlılık denetimine (MVCC) yönelik mekanizmaları destekler. MVCC, aynı veri belgesinin birden çok sürümünün aynı anda var olmasına izin verir. Her belgede, her güncellemede artırılan benzersiz bir revizyon kimliği vardır. Belge düzeyinde kilitleme ve MVCC, daha sağlam bir eş zamanlılık stratejisi sağlar.
Erişilebilirlik
Erişilebilirlik, sunucu kesintisi sırasında bile veri kesintisi olmadığından emin olmanız anlamına gelir. Hem Cassandra hem de MongoDB, verileri birden çok sunucu düğümünde çoğaltarak erişilebilirliği garanti eder.
Apache Cassandra'da, kümedeki her düğüm diğer düğümler için veri replikaları tutar. Her düğüm, veri yazmak veya çekmek için okuma işlemlerinin doğru düğümde olmasını koordine eder. Aynı zamanda, düğümler arasında tutarlılığını kaybeden verileri de onarır. Bu, performansı büyük ölçekte etkileyebilir.
Buna karşılık, MongoDB yüksek veri erişilebilirliği sunmak için tek birincil düğüm çoğaltması kullanır. MongoDB, verileri replika kümelerine çoğaltır. Yazma işlemlerini yalnızca bir birincil düğüm alır ve diğer düğümler birincil düğümdeki verileri çoğaltır. Ancak birincil düğüm tek bir hata noktası oluşturur.
Ölçeklenebilirlik
Hem Cassandra hem de MongoDB, verileri bir kümedeki birden çok düğüm arasında yatay olarak bölümleme tekniği olan parçalamaya olanak sağlar. Örneğin, binlerce müşteriniz varsa verileri her düğümde yalnızca birkaç yüz müşterinin bilgisi bulunacak şekilde bölümlersiniz. Bu şekilde veritabanınızı darboğazlara yol açmadan ölçeklendirebilirsiniz.
Cassandra, belirli bir veri değerinden hangi düğümün sorumlu olduğunu belirlemek için tutarlı karma olarak adlandırılan dağıtılmış bir karma algoritması kullanır. Cassandra ayrıca tek bir fiziksel düğümün birden çok veri aralığına sahip olmasını sağlayan sanal düğümleri (vnodes) destekler.
Buna karşılık MongoDB, veri değerinin nereye gidebileceğini belirlemek için parçalama anahtarları kullanır. Veritabanı yöneticileri, verileri bölümlemek için parçalama anahtarlarını tanımlayabilir. Verileri coğrafi konum, alfabetik sıra veya veri kümeniz için en verimli olan başka herhangi bir sistem gibi faktörlere göre bölebilirsiniz.
Kullanım zamanı: Cassandra ve MongoDB
Cassandra, yüksek çalışma süresi ve dağıtılmış mimarisi sayesinde yüksek erişilebilirlik gereksinimleri için iyi bir seçimdir. Yapılandırılmamış verileri belge odaklı bir yaklaşımla işleyebilen MongoDB, verilerin sürekli değiştiği sistemler için yararlıdır.
İkisi arasında seçim yaparken göz önünde bulundurmanız gereken bazı faktörler.
Veri biçimi
Apache Cassandra, MongoDB'den daha yapılandırılmış bir veri depolama alanı sistemine sahiptir. Çalıştığınız veriler sabit bir biçimdeyse Cassandra daha uygundur.
Veriler daha dinamikse ve tutarlı bir yapıya sahip değilse MongoDB daha iyi çalışır.
Erişilebilirlik
MongoDB'nin birincil düğümü ve ardından bir dizi kopya vardır. Birincil düğüm arızalanırsa MongoDB yerine geçecek bir çoğaltma düğümü seçmek için birkaç dakika harcar. Bu, biraz kesinti süresine neden olabilir.
Cassandra, birçok ana düğüm içeren dağıtılmış bir düğüm sistemi sayesinde %100 çalışma süresi kullanılabilirliği sunar.
Ölçeklenebilirlik
MongoDB, ölçeklendirme yaptıkça size daha fazla kontrol sağlar. Gereksinimlerinize göre verilerin düğümler arasında nasıl bölümleneceğine karar verebilir ve geniş ölçüde dağıtılmış veritabanlarını büyük ölçekte yönetebilirsiniz.
Cassandra'nın performansı, veri değerlerine bağlı olarak geniş ölçekte biraz düşebilir.
Sorgu dili
Hem Cassandra Sorgu Dili (CQL) hem de MongoDB Sorgu Dili (MQL) son derece etkili sorgu dilleridir. Bununla birlikte CQL, SQL'ye çok daha benzer, bu da SQL konusunda zaten yetkinseniz CQL'yi kolayca kullanmanıza olanak tanır.
MQL'nin farklı uygulamaları ve söz dizimi vardır, ayrıca daha dik bir öğrenme eğrisine sahip olabilir.
Programlama dillerine yönelik destek
MongoDB on iki programlama dilini destekler: C, C++, C#, Go, Java, Node.js, PHP, Python, Ruby, Rust, Scala ve Swift.
Cassandra; Java, JavaScript, Perl, Ruby, Scala, C#, Erlang, PHP, Python gibi daha az sayıda dili destekler.
Farklılıkların özeti: Cassandra ve MongoDB
Apache Cassandra |
MongoDB |
|
Veri modeli |
Cassandra, ilişkisel veritabanlarıyla daha yakından ilişkili geniş sütunlu bir veri modeli kullanır. |
MongoDB, verileri belgeler şeklinde depolayarak ilişkisel modelden tamamen uzaklaşır. |
Temel depolama birimi |
Sıralanmış dize tabloları. |
Serileştirilmiş JSON belgeleri. |
Dizine ekleme |
Cassandra, sütuna veya sütunlara göre dizine eklemek için ikincil dizinleri ve SASI'yi destekler. |
MongoDB, koleksiyon düzeyinde ve alan düzeyinde dizine ekler ve birden çok dizine ekleme seçeneği sunar. |
Sorgu dili |
Cassandra, CQL kullanır. |
MongoDB, MQL kullanır. |
Eş Zamanlılık |
Cassandra, satır düzeyinde bölünmezlik ve döner platform tutarlılığı ile eş zamanlılık elde eder. |
MongoDB, eş zamanlılık sağlamak için MVCC ve belge düzeyinde kilitleme kullanır. |
Erişilebilirlik |
Cassandra, yüksek kullanılabilirlik sunmak için birden fazla ana düğüm, düğüm bölümleme ve anahtar çoğaltma özelliğine sahiptir. |
MongoDB tek bir birincil düğüm ve birden çok replika düğüm kullanır. Parçalama ile birlikte MongoDB, yüksek kullanılabilirlik ve ölçeklenebilirlik sağlar. |
Bölümleme |
Tutarlı karma algoritması, kullanıcılar için daha az kontrol. |
Kullanıcılar, parçalama anahtarlarını tanımlar ve bölümleme üzerinde daha fazla kontrole sahip olur. |
AWS, Cassandra ve MongoDB gereksinimlerinizi nasıl destekleyebilir?
Amazon Web Services (AWS), yaygın Apache Cassandra ve MongoDB gereksinimlerini destekleyen iki hizmet sunar.
Amazon Keyspaces (Apache Cassandra İçin), Cassandra iş yüklerinizi buluta taşımanıza olanak tanıyan, yüksek oranda erişilebilir, yönetilen bir veritabanıdır. Amazon Keyspaces, sunucusuz bir hizmettir. Bu nedenle, yalnızca kullandığınız kaynaklar için ödeme yaparsınız ve hizmet, uygulama trafiğine bağlı olarak tabloların ölçeklerini otomatik bir şekilde artırıp azaltabilir. Neredeyse sınırsız bir aktarım hızı ve depolama ile saniye başına binlerce istek sunan uygulamalar oluşturabilirsiniz.
Amazon DocumentDB (MongoDB uyumlu), tam olarak yönetilen bir yerel JSON belge veritabanıdır. Kritik belge iş yüklerini, altyapıyı yönetmeden ve neredeyse her ölçekte çalıştırmayı kolay ve uygun maliyetli hale getirir. Amazon DocumentDB; yerleşik en iyi güvenlik uygulamaları, sürekli yedeklemeler ve diğer AWS hizmetleriyle yerel entegrasyonlar sağlayarak mimarinizi basitleştirir.
Hemen bir AWS hesabı oluşturarak AWS'de yönetilen Apache Cassandra ve MongoDB veritabanı hizmetlerini kullanmaya başlayın.