NoSQL Veritabanları için Kesin Kılavuz

Yayınlanan: 2022-03-11

Web uygulamalarının verilerle uğraşma şeklinin son on yılda önemli ölçüde değiştiğine şüphe yoktur. Her zamankinden daha fazla veri toplanıyor ve daha fazla kullanıcı bu verilere aynı anda erişiyor. Bu, ölçeklenebilirlik ve performansın şema tabanlı ilişkisel veritabanları için her zamankinden daha fazla bir zorluk olduğu ve bu nedenle ölçeklendirilmesi daha zor olabileceği anlamına gelir.

NoSQL'in Evrimi

SQL ölçeklenebilirlik sorunu, Google, Amazon ve Facebook gibi devasa, büyüyen veri ve altyapı ihtiyaçları olan Web 2.0 şirketleri tarafından fark edildi. Soruna kendi çözümlerini buldular – BigTable, DynamoDB ve Cassandra gibi teknolojiler.

Bu artan ilgi, performans, güvenilirlik ve tutarlılığa odaklanan bir dizi NoSQL Veritabanı Yönetim Sistemi (DBMS) ile sonuçlandı. Bir dizi mevcut indeksleme yapısı, arama ve okuma performansını geliştirmek amacıyla yeniden kullanıldı ve geliştirildi.

İlk olarak, Google'ın ilk NoSQL sistemi olduğuna inanılan BigTable ve Amazon'un DynamoDB'si gibi büyük şirketler tarafından özel ihtiyaçlarını karşılamak için geliştirilen tescilli (kapalı kaynak) NoSQL veritabanları vardı.

Bu tescilli sistemlerin başarısı, en popülerleri Hypertable, Cassandra, MongoDB, DynamoDB, HBase ve Redis olan bir dizi benzer açık kaynaklı ve tescilli veritabanı sisteminin geliştirilmesini başlattı.

NoSQL'i Farklı Kılan Nedir?

NoSQL veritabanları ile geleneksel ilişkisel veritabanları arasındaki temel farklardan biri, NoSQL'in yapılandırılmamış bir depolama biçimi olmasıdır.

Bu, NoSQL veritabanlarının ilişkisel veritabanlarında bulunanlar gibi sabit bir tablo yapısına sahip olmadığı anlamına gelir.

NoSQL Veritabanlarının Avantajları ve Dezavantajları

Avantajlar

NoSQL veritabanlarının geleneksel, ilişkisel veritabanlarına kıyasla birçok avantajı vardır.

Temelde yatan önemli bir fark, NoSQL veritabanlarının basit ve esnek bir yapıya sahip olmasıdır. Şema içermezler.

İlişkisel veritabanlarından farklı olarak NoSQL veritabanları, anahtar/değer çiftlerine dayanır.

NoSQL veritabanlarının bazı depolama türleri, sütun deposu, belge deposu, anahtar değer deposu, grafik deposu, nesne deposu, XML deposu ve diğer veri deposu modlarını içerir.

Genellikle, veritabanındaki her değerin bir anahtarı vardır. Bazı NoSQL veritabanı depoları, geliştiricilerin yalnızca basit dize değerlerini değil, serileştirilmiş nesneleri veritabanında saklamasına da izin verir.

Açık kaynaklı NoSQL veritabanları, pahalı lisanslama ücretleri gerektirmez ve pahalı olmayan donanımlarda çalışarak dağıtımlarını uygun maliyetli hale getirir.

Ayrıca, ister açık kaynaklı ister tescilli olsunlar, NoSQL veritabanlarıyla çalışırken, genişletme, ilişkisel veritabanlarıyla çalışmaya göre daha kolay ve daha ucuzdur. Bunun nedeni, genellikle ilişkisel veritabanı sistemleriyle yapılan dikey ölçeklendirme türünden ziyade, yükün tüm düğümlere yatay olarak ölçeklenmesi ve dağıtılmasıyla yapılmasıdır, bu da ana ana bilgisayarı daha güçlü bir sunucuyla değiştirmektir.

Dezavantajları

Tabii ki, NoSQL veritabanları mükemmel değildir ve her zaman doğru seçim değildir.

Birincisi, çoğu NoSQL veritabanları, ilişkisel veri tabanı sistemleri tarafından yerel olarak desteklenen güvenilirlik özelliklerini desteklemez. Bu güvenilirlik özellikleri atomiklik, tutarlılık, izolasyon ve dayanıklılık olarak özetlenebilir. Bu aynı zamanda, bu özellikleri desteklemeyen NoSQL veritabanlarının performans ve ölçeklenebilirlik için tutarlılık ticareti yaptığı anlamına gelir.

Güvenilirlik ve tutarlılık özelliklerini desteklemek için geliştiricilerin, sisteme daha fazla karmaşıklık katan kendi özel kodlarını uygulamaları gerekir.

Bu, bankacılık sistemleri gibi güvenli ve güvenilir işlemler için NoSQL veritabanlarına güvenebilecek uygulamaların sayısını sınırlayabilir.

NoSQL veritabanlarının çoğunda bulunan diğer karmaşıklık biçimleri, SQL sorgularıyla uyumsuzluk içerir. Bu, daha fazla zaman ve karmaşıklık ekleyerek manuel veya tescilli bir sorgulama diline ihtiyaç duyulduğu anlamına gelir.

NoSQL ve İlişkisel Veritabanları

Bu tablo, NoSQL ve ilişkisel veritabanları arasında kısa bir özellik karşılaştırması sağlar:

Özellik NoSQL Veritabanları İlişkisel Veritabanları
Verim Yüksek Düşük
Güvenilirlik Yoksul İyi
kullanılabilirlik İyi İyi
Tutarlılık Yoksul İyi
Veri depolama Büyük veriler için optimize edildi Orta boydan büyüğe
ölçeklenebilirlik Yüksek Yüksek (ama daha pahalı)


Tablonun, her iki modeli uygulayan çeşitli veritabanı yönetim sistemlerini değil, veritabanı düzeyinde bir karşılaştırmayı gösterdiğine dikkat edilmelidir. Bu sistemler, her iki sistemdeki bazı sorunların ve eksikliklerin üstesinden gelmek için kendi özel tekniklerini sağlar ve bazı durumlarda performansı ve güvenilirliği önemli ölçüde artırır.

NoSQL Veri Deposu Türleri

Anahtar Değer Deposu

Anahtar Değeri deposu türünde, benzersiz bir anahtarın bir öğeye işaret ettiği bir karma tablosu kullanılır.

Anahtarlar, yalnızca anahtarların kendi grupları içinde benzersiz olmasını gerektiren mantıksal anahtar grupları halinde düzenlenebilir. Bu, farklı mantıksal gruplarda aynı anahtarlara izin verir. Aşağıdaki tabloda, anahtarın şehrin adı olduğu ve değerin o şehirdeki Ulster Üniversitesi'nin adresi olduğu bir anahtar/değer deposu örneği gösterilmektedir.

Anahtar Değer
"Belfast" {“Ulster Üniversitesi, Belfast kampüsü, York Street, Belfast, BT15 1ED”}
"Colerain" {“Ulster Üniversitesi, Coleraine kampüsü, Cromore Road, Co. Londonderry, BT52 1SA”}


Anahtar değer deposunun bazı uygulamaları, performanslarını büyük ölçüde artıran önbelleğe alma mekanizmaları sağlar.

Veritabanında depolanan öğelerle başa çıkmak için gereken tek şey anahtardır. Veriler bir dize, JSON veya BLOB (İkili Büyük Nesne) biçiminde depolanır.

Bu veritabanı biçimindeki en büyük kusurlardan biri, veritabanı düzeyinde tutarlılık eksikliğidir. Bu, geliştiriciler tarafından kendi kodlarıyla eklenebilir, ancak daha önce belirtildiği gibi bu, daha fazla çaba, karmaşıklık ve zaman ekler.

Bir anahtar değer deposu üzerine kurulmuş en ünlü NoSQL veritabanı, Amazon'un DynamoDB'sidir.

Belge Mağazası

Belge depoları, şemasız olmaları ve bir anahtar/değer modeline dayalı olmaları bakımından anahtar değer depolarına benzer. Bu nedenle her ikisi de aynı avantaj ve dezavantajların çoğunu paylaşır. Her ikisi de veritabanı düzeyinde tutarlılıktan yoksundur, bu da uygulamaların daha fazla güvenilirlik ve tutarlılık özellikleri sağlamasına yol açar.

Bununla birlikte, ikisi arasında temel farklılıklar vardır.

Belge Depolarında, değerler (belgeler), depolanan veriler için kodlama sağlar. Bu kodlamalar XML, JSON veya BSON (İkili kodlanmış JSON) olabilir.

Ayrıca verilere dayalı sorgulama yapılabilir.

Bir Belge Mağazasına dayanan en popüler veritabanı uygulaması MongoDB'dir.

Sütun Mağazası

Bir Sütun Deposu veritabanında veriler, çoğu ilişkisel veritabanı yönetim sisteminde yapıldığı gibi satırlarda depolanmak yerine sütunlarda depolanır.

Bir Sütun Deposu, veritabanındaki belirli sütunları mantıksal olarak gruplayan bir veya daha fazla Sütun Ailesinden oluşur. Bir anahtar, bu anahtarın kapsamını tanımlayan bir keyspace özniteliğiyle, veritabanındaki bir dizi sütunu tanımlamak ve işaret etmek için kullanılır. Her sütun, sıralı ve virgülle ayrılmış ad ve değer demetleri içerir.

Sütun Depoları, depolanan verilere hızlı okuma/yazma erişimine sahiptir. Bir sütun deposunda, tek bir sütuna karşılık gelen satırlar, tek bir disk girişi olarak depolanır. Bu, okuma/yazma işlemleri sırasında daha hızlı erişim sağlar.

Sütun deposunu kullanan en popüler veritabanları, Google'ın BigTable, HBase ve Cassandra'sını içerir.

Grafik Tabanı

Graph Base NoSQL Veritabanında, verileri temsil etmek için yönlendirilmiş bir grafik yapısı kullanılır. Grafik, kenarlardan ve düğümlerden oluşur.

Resmi olarak, bir grafik, bazı nesne çiftlerinin bağlantılarla bağlandığı bir dizi nesnenin temsilidir. Birbirine bağlı nesneler, köşeler adı verilen matematiksel soyutlamalarla temsil edilir ve bazı köşe çiftlerini birbirine bağlayan bağlantılara kenar denir. Bir dizi köşe ve bunları birbirine bağlayan kenarlara grafik denir.

Grafikler hakkında bir grafik. Üst merkezde, içinden iki ok çıkan "grafik" adlı bir kutu var. Her iki ok da "kayıt" olarak adlandırılır; biri "düğümler" kutusuna, diğeri ise "ilişkiler" kutusuna işaret ediyor. "İlişkiler" kutusunda, "düğümler" kutusunu işaret eden bir "düzenle" oku vardır. Hem "düğümler" hem de "ilişkiler", son bir kutuya, "özelliklere" işaret eden "sahip" adlı oklara sahiptir. Başka bir deyişle, bir grafik, her ikisi de özelliklere sahip olan ilişkileri ve düğümleri kaydeder ve ilişkiler düğümleri düzenler.

Bu, verileri temsil etmek ve depolamak için kenarları ve düğümleri kullanan bir grafik tabanlı veritabanının yapısını gösterir. Bu düğümler, düğümler arasındaki kenarlarla temsil edilen, birbirleriyle olan bazı ilişkilerle düzenlenir. Hem düğümler hem de ilişkiler bazı tanımlanmış özelliklere sahiptir.

Grafik veritabanları en tipik olarak sosyal ağ uygulamalarında kullanılır. Grafik veritabanları, geliştiricilerin nesnelerin kendilerinden ziyade nesneler arasındaki ilişkilere daha fazla odaklanmasına olanak tanır. Bu bağlamda, gerçekten de ölçeklenebilir ve kullanımı kolay bir ortam sağlarlar.

Şu anda InfoGrid ve InfiniteGraph en popüler grafik veritabanlarıdır.

NoSQL Veritabanı Yönetim Sistemleri

Veritabanlarının kısa bir karşılaştırması için aşağıdaki tablo, farklı NoSQL veri tabanı yönetim sistemleri arasında kısa bir karşılaştırma sağlar.

Depolama türü Sorgu Yöntemi Arayüz Programlama dili Açık kaynak çoğaltma
cassandra Sütun Mağazası Tasarruf API'sı tasarruf Java Evet zaman uyumsuz
MongoDB Belge Mağazası Moğol Sorgusu TCP/IP C++ Evet zaman uyumsuz
Hiper Tablo Sütun Mağazası HQL tasarruf Java Evet zaman uyumsuz
KanepeDB Belge Mağazası Harita indirgeme DİNLENMEK Erlang Evet zaman uyumsuz
Buyuk masa Sütun Mağazası Harita indirgeme TCP/IP C++ Numara zaman uyumsuz
HBase Sütun Mağazası Harita indirgeme DİNLENMEK Java Evet zaman uyumsuz


MongoDB esnek bir şema depolamaya sahiptir, bu da saklanan nesnelerin mutlaka aynı yapıya veya alanlara sahip olması gerekmediği anlamına gelir. MongoDB ayrıca veri koleksiyonlarını dağıtan ve genel performans iyileştirmesi ve daha dengeli bir sistem sağlayan bazı optimizasyon özelliklerine sahiptir.

Apache CouchDB gibi diğer NoSQL veritabanı sistemleri de belge deposu tipi veritabanıdır ve veritabanına RESTful API'ler kullanılarak erişilebilmesi dışında MongoDB ile birçok özelliği paylaşır.

REST, World Wide Web içinde bileşenlere, bağlayıcılara ve veri öğelerine uygulanan koordineli bir dizi mimari kısıtlamadan oluşan bir mimari stildir. Durum bilgisi olmayan, istemci-sunucu, önbelleğe alınabilir bir iletişim protokolüne (örneğin, HTTP protokolü) dayanır.

RESTful uygulamaları, verileri göndermek, okumak ve silmek için HTTP isteklerini kullanır.

Sütun tabanlı veritabanlarına gelince, Hypertable, C++ ile yazılmış bir NoSQL veritabanıdır ve Google'ın BigTable'ını temel alır.

Hypertable, tıpkı MongoDB ve CouchDB gibi, ölçeklenebilirliği en üst düzeye çıkarmak için veri depolarının düğümler arasında dağıtılmasını destekler.

En yaygın kullanılan NoSQL veritabanlarından biri, Facebook tarafından geliştirilen Cassandra'dır.

Cassandra, güvenilirlik ve hata toleransına yönelik birçok özellik içeren bir sütun deposu veritabanıdır.

Her bir NoSQL VTYS'ye derinlemesine bir bakış sağlamak yerine, en yaygın kullanılan NoSQL veritabanı yönetim sistemlerinden ikisi olan Cassandra ve MongoDB, sonraki alt bölümlerde incelenecektir.

cassandra

Cassandra, Facebook tarafından geliştirilen bir veritabanı yönetim sistemidir.

Cassandra'nın arkasındaki amaç, tek bir hata noktası olmayan ve maksimum kullanılabilirlik sağlayan bir VTYS oluşturmaktı.

Cassandra çoğunlukla bir sütun deposu veritabanıdır. Bazı araştırmalar Cassandra'yı, Google'ın bir sütun deposu veritabanı olan BigTable'ından ve Amazon'un bir anahtar-değer veritabanı olan DynamoDB'sinden esinlenerek hibrit bir sistem olarak adlandırdı.

Bu, bir anahtar/değer sistemi sağlayarak elde edilir, ancak Cassandra'daki anahtarlar, Google'ın BigTable dağıtılmış dosya sistemine ve Dynamo'nun kullanılabilirlik özelliklerine (dağıtılmış karma tablosu) güvenerek bir dizi sütun ailesine işaret eder.

Cassandra, farklı düğümler arasında dağıtılan büyük miktarda veriyi depolamak için tasarlanmıştır. Cassandra, Facebook gibi büyük bir hizmet için gerekli olan, tek bir hata noktası olmadan yüksek düzeyde kullanılabilir bir hizmet sunarken, birçok sunucuya yayılmış büyük miktarda veriyi işlemek üzere tasarlanmış bir DBMS'dir.

Cassandra'nın ana özellikleri şunları içerir:

  • Tek bir başarısızlık noktası yok. Bunun başarılabilmesi için Cassandra'nın tek bir makine yerine bir düğüm kümesi üzerinde çalışması gerekir. Bu, her kümedeki verilerin aynı olduğu anlamına gelmez, ancak yönetim yazılımı aynıdır. Düğümlerden birinde bir arıza meydana geldiğinde, o düğümdeki verilere erişilemez. Ancak, diğer düğümlere (ve verilere) yine erişilebilir olacaktır.
  • Dağıtılmış Karma , bir yuvanın eklenmesi veya çıkarılmasının anahtarların yuvalara eşlenmesini önemli ölçüde değiştirmeyecek şekilde karma tablo işlevselliği sağlayan bir şemadır. Bu, yükü sunuculara veya düğümlere kapasitelerine göre dağıtma ve buna bağlı olarak kesinti süresini en aza indirme yeteneği sağlar.
  • Göreceli olarak kullanımı kolay İstemci Arayüzü . Cassandra, istemci arabirimi için Apache Thrift'i kullanır. Apache Thrift, diller arası bir RPC istemcisi sağlar, ancak çoğu geliştirici, Hector gibi Apple Thrift'in üzerine kurulmuş açık kaynaklı alternatifleri tercih eder.
  • Diğer kullanılabilirlik özellikleri. Cassandra'nın özelliklerinden biri veri kopyalamadır. Temel olarak, verileri kümedeki diğer düğümlere yansıtır. Çoğaltma rastgele veya örneğin farklı bir veri merkezindeki bir düğüme yerleştirerek veri korumasını en üst düzeye çıkarmak için özel olabilir. Cassandra'da bulunan bir diğer özellik de bölümleme politikasıdır. Bölümleme ilkesi, anahtarın hangi düğüme yerleştirileceğine karar verir. Bu aynı zamanda rastgele veya sırayla olabilir. Her iki tür bölümleme ilkesini kullanırken Cassandra, yük dengeleme ile sorgu performansı optimizasyonu arasında bir denge kurabilir.
  • Tutarlılık. Çoğaltma gibi özellikler tutarlılığı zorlaştırır. Bunun nedeni, tüm düğümlerin herhangi bir zamanda en son değerlerle veya bir okuma işleminin tetiklendiği anda güncel olması gerektiğidir. Ancak nihayetinde Cassandra, geliştiriciye bu özelleştirilebilirliği sağlayarak çoğaltma eylemleri ile okuma/yazma eylemleri arasında bir denge sağlamaya çalışır.
  • Okuma/Yazma İşlemleri. İstemci, tek bir Cassandra düğümüne bir istek gönderir. Düğüm, çoğaltma ilkesine göre verileri kümeye depolar. Her düğüm, önce kesinleştirme günlüğündeki veri değişikliğini gerçekleştirir ve ardından her ikisi de eşzamanlı olarak yapılan değişiklikle tablo yapısını günceller. Okuma işlemi de çok benzerdir, tek bir düğüme bir okuma isteği gönderilir ve bu tek düğüm, bölümleme/yerleştirme politikasına göre hangi düğümün verileri tuttuğunu belirleyen düğümdür.

MongoDB

MongoDB, C++ ile yazılmış şema içermeyen, belge odaklı bir veritabanıdır. Veritabanı belge deposu tabanlıdır, yani değerleri (belgeler olarak anılır) kodlanmış veriler biçiminde depolar.

MongoDB'de kodlanmış format seçimi JSON'dur. Bu güçlüdür, çünkü veriler JSON belgelerinin içine yerleştirilmiş olsa bile yine de sorgulanabilir ve dizine alınabilir olacaktır.

Aşağıdaki alt bölümler, MongoDB'de bulunan bazı temel özellikleri açıklamaktadır.

kırıklar

Parçalama, verilerin birden çok makine (düğüm) arasında bölümlenmesi ve dağıtılmasıdır. Bir parça, düğümlerin simetrik olarak dağıtıldığı Cassandra'nın aksine, MongoDB düğümlerinin bir koleksiyonudur. Parçaları kullanmak aynı zamanda birden çok düğümde yatay olarak ölçekleme yeteneği anlamına gelir. Tek bir veritabanı sunucusu kullanan bir uygulama olması durumunda, parçalamanın MongoDB tarafından yapıldığı için orijinal uygulama kodunda çok az değişiklikle parçalı kümeye dönüştürülebilir. oftware, istemci tarafına maruz kalan genel API'lerden neredeyse tamamen ayrılmıştır.

Mongo Sorgu Dili

Daha önce tartışıldığı gibi, MongoDB bir RESTful API kullanır. Bir db koleksiyonundan belirli belgeleri almak için, istenen belgelerin eşleşmesi gereken alanları içeren bir sorgu belgesi oluşturulur.

Hareketler

MongoDB'de yönlendirici adı verilen bir sunucu grubu vardır. Her biri bir veya daha fazla istemci için sunucu görevi görür. Benzer şekilde, küme, yapılandırma sunucuları adı verilen bir grup sunucu içerir. Her biri, hangi parçanın hangi verileri içerdiğini gösteren meta verilerin bir kopyasını tutar. İstemcilerden kümedeki yönlendirici sunuculardan birine okuma veya yazma eylemleri gönderilir ve bu sunucu tarafından yapılandırma sunucularının yardımıyla verileri içeren uygun parçalara otomatik olarak yönlendirilir.

Cassandra'ya benzer şekilde, MongoDB'deki bir parça, tam olarak aynı verileri tutan her parçanın bir çoğaltma kümesini oluşturan bir veri çoğaltma şemasına sahiptir. MongoDB'de iki tür replika şeması vardır: Master-Slave replikasyonu ve Replica-Set replikasyonu. Replica-Set, arızalar için daha fazla otomasyon ve daha iyi işlem sağlarken, Master-Slave bazen yönetici müdahalesini gerektirir. Çoğaltma şemasından bağımsız olarak, bir çoğaltma kümesindeki herhangi bir zamanda, yalnızca bir parça birincil parça olarak işlev görür, diğer tüm çoğaltma parçaları ikincil parçalardır. Tüm yazma ve okuma işlemleri birincil parçaya gider ve ardından (gerekirse) kümedeki diğer ikincil parçalara eşit olarak dağıtılır.

Aşağıdaki grafikte, yönlendirici sunucuları yeşil, yapılandırma sunucularını mavi ve MongoDB düğümlerini içeren parçaları gösteren yukarıda açıklanan MongoDB mimarisini görüyoruz.

Dört numaralı parçanın her birinde 3 "mondgod" düğümü vardır. Shard4 gri renklidir ve "replika seti" olarak etiketlenmiştir. Shard1, "config sunucuları" etiketli üç mavi "C1 mongod" düğüm grubuna bağlıdır; grup ve parçaların her biri bir dizi yeşil "mongo" düğümüne bağlıdır. Bu seri, sırayla, bir dizi müşteriye bağlıdır.

Unutulmamalıdır ki MongoDB'de parçalama (veya parçalar arasında veri paylaşımı) tamamen otomatiktir, bu da hata oranını azaltır ve MongoDB'yi oldukça ölçeklenebilir bir veritabanı yönetim sistemi yapar.

NoSQL Veritabanları için İndeksleme Yapıları

İndeksleme, bir VTYS'de karşılık gelen bir veri kaydının konumu ile bir anahtarı ilişkilendirme işlemidir. NoSQL veritabanlarında kullanılan birçok indeksleme veri yapısı vardır. Aşağıdaki bölümlerde daha yaygın yöntemlerden bazıları kısaca tartışılacaktır; yani, B-Tree indeksleme, T-Tree indeksleme ve O2-Tree indeksleme.

B-Ağacı İndeksleme

B-Tree, DBMS'lerde en yaygın indeks yapılarından biridir.

B ağaçlarında, dahili düğümler, önceden tanımlanmış bir aralıkta değişken sayıda alt düğüme sahip olabilir.

AVL gibi diğer ağaç yapılarından önemli bir fark, B-Tree'nin düğümlerin değişken sayıda alt düğüme sahip olmasına izin vermesidir, bu da daha az ağaç dengelemesi ancak daha fazla boşa harcanan alan anlamına gelir.

B+-Tree, B-Trees'in en popüler türlerinden biridir. B+-Tree, tüm anahtarların yapraklarda bulunmasını gerektiren B-Tree'ye göre bir gelişmedir.

T-Ağacı İndeksleme

T-Trees'in veri yapısı, AVL-Trees ve B-Trees'den gelen özelliklerin birleştirilmesiyle tasarlanmıştır.

AVL-Ağaçları, kendi kendini dengeleyen bir ikili arama ağacı türüdür, B-Ağaçları ise dengesizdir ve her düğümün farklı sayıda çocuğu olabilir.

Bir T-Ağacında yapı, AVL-Tree ve B-Tree'ye çok benzer.

Her düğüm birden fazla {anahtar-değer, işaretçi} tanımlama grubu depolar. Ayrıca, daha iyi depolama ve performans sağlamak için ikili arama, çoklu demet düğümleriyle birlikte kullanılır.

Bir T-Ağacının üç tür düğümü vardır: Sağ ve sol çocuğu olan bir T-Düğümü, çocuğu olmayan yaprak düğümü ve yalnızca bir çocuğu olan yarım yaprak düğümü.

T-Ağaçlarının AVL-Ağaçlarından daha iyi genel performansa sahip olduğuna inanılmaktadır.

O2-Ağacı İndeksleme

O2-Tree, temel olarak, yaprak düğümlerinin {key value, pointer} demetlerini içerdiği bir İkili Arama ağacının bir formu olan Kırmızı-Siyah ağaçlar üzerinde bir gelişmedir.

O2-Tree, mevcut indeksleme yöntemlerinin performansını artırmak için önerildi. m'nin ağacın minimum derecesi olduğu m (m ≥ 2) mertebesindeki bir O2 Ağacı, aşağıdaki özellikleri sağlar:

  • Her düğüm ya kırmızı ya da siyahtır. Kök siyahtır.
  • Her yaprak düğümü siyah renklidir ve “anahtar değeri, kayıt işaretçisi” çiftlerini tutan bir blok veya sayfadan oluşur.
  • Bir düğüm kırmızıysa, her iki çocuğu da siyahtır.
  • Her dahili düğüm için, düğümden alt yaprak düğümlere kadar olan tüm basit yollar aynı sayıda siyah düğüm içerir. Her dahili düğüm, tek bir anahtar değeri tutar.
  • Yaprak düğümler, ⌈m/2⌉ ile m arasında “anahtar-değer, kayıt-işaretçi” çifti olan bloklardır.
  • Bir ağacın tek bir düğümü varsa, bu ağacın kökü olan bir yaprak olmalıdır ve 1 ila m arasında anahtar veri öğesine sahip olabilir.
  • Yaprak düğümleri ileri ve geri yönlerde çift bağlantılıdır.

Burada, O2-Tree, T-Tree, B+-Tree, AVL-Tree ve Red-Black Tree arasında basit bir performans karşılaştırması görüyoruz:

Y eksenindeki "Saniye cinsinden Toplam Süre"yi (0-250) X eksenindeki "Güncelleme Oranı" (0-100) ile karşılaştıran bir grafik. Beş ağaç türünün tümü, solda toplam süre 100'ün altındayken başlar, ardından sağda artar. O2-Tree, T-Tree ve AVL-Tree sağa doğru diğer ikisinden daha yavaş artar, AVL-Tree 125 civarında, O2-Tree 75 civarında ve T-Tree arada bir yerde biter. Kırmızı-Siyah Ağaç ve B+-Ağaç daha fazla iniş ve çıkışa sahiptir ve her ikisi de sağ üstte birbirine yakın biter, Kırmızı-Siyah Ağaç orada biraz daha yüksek bir değere sahiptir.

T-Ağacı, B+-Ağacı ve kullanılan O2-Ağacının sırası m = 512 idi.

Arama, ekleme ve silme işlemleri için süre, 50M kayıtlık bir indeks için %0-100 arasında değişen güncelleme oranları ile kaydedilir ve işlemler, indekse 50M kayıt daha eklenmesiyle sonuçlanır.

%0-10 güncelleme oranıyla B-Tree ve T-Tree'nin O2-Tree'den daha iyi performans gösterdiği açıktır. Bununla birlikte, güncelleme oranı arttıkça, O2-Tree indeksi, en çok acı çeken B-Tree ve Red-Black Tree yapıları ile diğer veri yapılarının çoğundan önemli ölçüde daha iyi performans gösterir.

NoSQL Davası?

Geleneksel ilişkisel veritabanlarının yetersiz kaldığı temel alanları vurgulayan NoSQL veritabanlarına hızlı bir giriş, ilk paket servise götürür:

İlişkisel veritabanları tutarlılık sunarken, büyük verilerin sıklıkla depolandığı ve işlendiği uygulamalarda yüksek performans için optimize edilmemiştir.

NoSQL veritabanları, yüksek performans, yüksek ölçeklenebilirlik ve erişim kolaylığı nedeniyle çok popülerlik kazandı; ancak yine de tutarlılık ve güvenilirlik sağlayan özelliklerden yoksundurlar.

Neyse ki, bir dizi NoSQL VTYS, ölçeklenebilirliği ve güvenilirliği artırmak için yeni özellikler sunarak bu zorlukların üstesinden gelir.

NoSQL veritabanı sistemlerinin tümü ilişkisel veritabanlarından daha iyi performans göstermez.

MongoDB ve Cassandra, yazma ve silme işlemlerinde ilişkisel veritabanlarından benzer ve çoğu durumda daha iyi performansa sahiptir.

Mağaza türü ile NoSQL VTYS'nin performansı arasında doğrudan bir ilişki yoktur. NoSQL uygulamaları değişikliklere uğrar, bu nedenle performans değişebilir.

Bu nedenle, farklı çalışmalarda veritabanı türleri arasındaki performans ölçümleri, bu sayıların doğru olması için her zaman veritabanı yazılımının en son sürümleriyle güncellenmelidir.

Performans konusunda kesin bir hüküm veremesem de akılda tutulması gereken birkaç nokta var:

  • Geleneksel B-Tree ve T-Tree indeksleme, geleneksel veritabanlarında yaygın olarak kullanılır.
  • Bir çalışma, O2-Tree'yi ortaya çıkarmak için çoklu indeksleme yapılarının özelliklerini birleştirerek iyileştirmeler ve iyileştirmeler sundu.
  • O2-Tree, özellikle büyük veri kümeleri ve yüksek güncelleme oranları ile çoğu testte diğer yapılardan daha iyi performans gösterdi.
  • B-Tree yapısı, bu makalede ele alınan tüm dizin oluşturma yapıları arasında en kötü performansı sağladı.

NoSQL VTYS'lerinin tutarlılığını geliştirmek için daha fazla çalışma yapılabilir ve yapılmalıdır. Her iki sistemin, NoSQL'in ve ilişkisel veritabanlarının entegrasyonu, daha fazla araştırılması gereken bir alandır.

Son olarak, NoSQL'in mevcut veritabanı standartlarına iyi bir ek olduğunu, ancak birkaç önemli uyarının bulunduğunu belirtmek önemlidir. NoSQL, sırf performans ve ölçeklenebilirlik için güvenilirlik ve tutarlılık özelliklerini takas eder. Bu, NoSQL veritabanlarına güvenebilecek uygulamaların sayısı sınırlı kaldığından, onu özel bir çözüm haline getirir.

Üst taraf? Uzmanlık, esneklik açısından pek bir şey sunmayabilir, ancak özel bir işi olabildiğince hızlı ve verimli bir şekilde yapmak istediğinizde, bir İsviçre Çakısı'na ihtiyacınız yoktur. NoSQL'e ihtiyacınız var.

İlgili: İş Zekası Platformu: MongoDB Toplama İşlem Hattını Kullanma Eğitimi