NoSQL Sistemler Nelerdir?

tarihinde yayınlandıSEO Paylaşımları içinde yayınlandı

NoSQL Sistemler Nelerdir

NoSQL Sistemlerin özelliklerine göre sınıflandırılması aşağıdaki gibidir:

 

WIDE COLUMN STORE: Big Table, Hbase, Cassandra

DOCUMENT STORE: Mongo DB, Couch DB, Raven DB

TUPLE STORE: Azure Table Storage, Memcache DB

EVENTUALLY CONSISTENT KEY VALUE STORE: Amazon Dynamo, Dynomite

GRAPH DATABASES: Big data, Neo4J

 

  1. Büyük Tablo (BIG TABLE-2006)

 

Google tarafından geliştirilen ve arama motoru tasarımında kullanılan yaklaşımdır. Amaç web sayfalarının daha başarılı bir şekilde bulunması, depolanması ve güncellenmesidir. Google’nin konuya yaklaşımı yüksek miktarda verinin ucuz bilgisayarlar tarafından işlenmesi yönündedir. Yani, bir mantıksal tablomuz var ve çok sayıda tabletlere bölünmüştür. Başka bir deyişle, tek bir bilgisayarda işlenecek olan mantıksal tablo, çok sayıda küçük parçalara bölünereke nispeten daha ucuz bilgisayarlar tarafından tutulmaktadır. Bu noktada BigTable dağıtık bir mimariye sahiptir diyebiliriz.

 

Avantajları:

  • Özel bir sorgulama diline (query language) ihtiyaç duyulmaz. Bu nedenle sorgulama dilinin optimizasyonu gibi özel adımlara da gerek kalmaz.
  • İşlemler satır seviyesinde gerçekleştirilir. Yani ilişkisel veritabanlarında olduğu gibi tablolar arasında birleştirme (join) işlemlerine gerek yoktur.
  • Tabletler yani küçük parçalar bütün büyük tablo sunucuları tarafından erişilebilir durumda tutulur.
  • Yapılan her işlem transaction log olarak tutulur ve bu kütüğe bütün sunucular erişebilir.
  • Sunuculardan birinin bozulması durumunda diğer sunuculardan birisi bu kütüğe erişerek bozulan sunucunun görevini üstlenebilir.

 

Aslında, büyük tablonun en önemli avantajı satır bazında bir limitinin olmamasıdır. Yani her

kayıt için sınırsız sayıda bağlantı tutulması gerekebilir. Bunu bir örnekle açıklayacak

olursak her sayfa başına yüz bağlantı tutma limiti gelmiş olsa daha az olanlar için

gereksiz yere hafıza tutulacak; daha fazla olanlarında yüz tanesinden sonrası

tutulamayacak diyebiliriz.

 

  1. HBase

 

HBASE Apache Software Foundation tarafından geliştirilmekte olan açık kaynak kodlu Apache hadoop projesinin bir alt projesidir. Çok büyük boyutlara sahip verilere gerçek zamanlı okuma ve yazma erişimi yapmak gerektiği zamanlarda kullanılır. HBASE, Google tarafından kullanılan BigTable den esinlenilerek geliştirilmiştir. Java kullanılarak yazılmıştır. Geleneksel veritabanından farklıdır. Aslında HBASE ve BigTable’nin temeli map lere dayanmaktadır. Map kavramını hash olarakta düşünebiliriz. Yani veriler keyvalue çifti şeklinde tutulmaktadır.HBASE de BigTable gibi büyük veriler için dağıtık mimari özelliği gösterirler. Yani veriler birden çok makineye dağıtılarak saklanabilir. Bu nedenle Distributed File System kullanılacaktır. Ek olarak, HBASE key-value çiftlerini alfabetik sıraya uyun olarak tutmaktadır. Özellikle seyrek veritabanları açısından daha verimlidir. Seyrek veri tabanından kastımız örneğin, bin satırdan oluşan bir tabloda yalnızca bir satır için belli bir sütunda veri tutulmasıdır. HBASE in başka bir güçlü yanı ise, her veri için timestamp bilgisi tutmasıdır. Bu bilgi bize verilerin zamanla nasıl değiştiğini inceleme fırsatı sunar.

 

  1. Cassandra

 

Facebook tarafından geliştirilmiştir; sonrasında Apache grubuna devredilmiştir. NoSQL veritabanları arasında çok popülerdir. Alt yapı olarak BigTable ve Amazon DynomoDB e

benzer.

 

Genel özelliklerini açıklayacak olursak,

  • Merkezi bir yönetimi yoktur.
  • Replikasyon özelliği bulunmaktadır.
  • Herhangi bir server çökmesinde sistem çalışmaya devam edebilir.
  • Bilgiler gelişmiş bir key-value mantığıyla tutulur.

 

  1. MongoDB

 

C++ ile geliştirilmiş açık kaynaklı, ölçeklendirilebilir NoSQL veritabanı uygulaması. 2007 yılında geliştirilmeye başlandı ve 2009 da açık kaynak oldu. MongoDB in hem kurumsal hem açık kaynak olarak desteklenmesi onu daha cazip hale getiriyor. Tek bir sunucu üzerinde çalışan birçok web uygulaması için mükemmeldir. Dinamik şemalar oluşturur. Böylece karmaşık verileri saklamak ve işlemek kolay bir hal alır. Cassandra ile MongoDb arasındaki temel farklılık verilerin saklanma biçimi ve cluster yapısıyla ilgilidir. MongoDB verileri json formatında döküman şeklinde tutarken Cassandra sütun tabanlı ve hash table yapısını kullanır. Cluster yapısında MongoDB proxy server ve shard yapısını kullanırken Cassandra da proxy server bulunmaz ve bütün sistem aynı birimlerden oluşur. Bu nedenle Cassandra ile bir sunucunun çökmesi diğerlerinin işlevlerini etkilemez. MongoDB de ise proxy server de çıkabilecek bir hata bütün sistemin durmasına neden olabilir.

 

  1. CouchDB

 

IBM Lotus Notes geliştiricisi olan Damien Katz tarafından 2005 yılında oluşturulan bir projedir. Katz ilk başta bu projeyi “Büyük ölçekli nesne veritabanı için bir depolama sistemi” olarak tanımladı. Hedefi, büyük bir internet veritabanı yaratmak ve bunu da web uygulamaları üzerinde dizayn etmekti. Projesini iki yıl boyunca genel kamu lisansı altında açık kaynak projesi olarak piyasaya sürdü. 2008’de lisansı Apache olarak değiştirildi. 2012’nin başlarında bir üst projesi olan Couchbase’i geliştirmeye devam etti.

CouchDB veri depolamak için en başta java script kullanmıştır. Daha sonra .NET, PHP, RUBY, C ve PHYTON dilleri de kullanılmıştır. Veri ve tablolar arasındaki ilişkileri saklamak yerine her veri tabanı bağımsız belgeler topluluğu oluşturur. Her döküman kendi verisini ve kendi şemasını tutar. Ayrıca CouchDB dosyaları yazdırırken veritabanı kilitlenmesi gibi durumlardan korunmak için MVCC (Multi-Version Concurrency Control) biçimini uygular.

 

MVCC: Aynı veriye eş zamanlı yapılan okuma/yazma işlemlerinde herhangi bir çakışma olmasını engelleyen bir tekniktir. Yazanlar okuyanları, okuyanlar yazanları etkilemesin mantığı vardır. Amaç veritabanı üzerindeki işlemlerin birbirini beklemesini engellemektir.

 

Genel özellikleri:

  • Belge Depolama: Verileri belgeler halinde saklar.
  • ACID garantisi: İçsel bir çatışma olmadan büyük hacimli okuma ve yazma yapabilir.
  • Map/ Reduce: Fonksiyon bir belge alır ve onu döndüren tek bir değere dönüştürür.
  • Çoğaltma (Replikasyon) ve dağıtık mimari: Aynı verilerin kopyalarını oluşturabilir ve daha sonra bu değişiklikleri sekronize edebilir.
  • Çevrimdışı tasarım: CouchDB cihazları (akıllı telefonlar) çoğaltılabilir.Cihaz çevrimdışı olabilir ve çevrimiçi olduğunda veriler sekronize edilebilir.
  • Esneklik: Şema gereksinimi duymaz. Böylece eklenmiş olan bir verinin formatı uygulama kesintisi olmaksızın herhangi bir zamanda değiştirilebilir. Bu da önemli bir iş esnekliği sağlar.

 

  1. CouchBase

 

Couchbase server basit, hızlı ve açık kaynak kodlu bir NoSQL veritabanıdır. Veriyi sunucular ya da sanal makinaler arasında otomatik olarak dağıtır. Veriyi hızlı bir şekilde okuyup yazabilir. Couchbase kolay ölçeklenebilir, key-value ya da döküman olarak erişilebilen bir veritabanıdır. Cisco, Zynga, Linkedln gibi şirketler ve diğer yüzlercesi etkileşimli web uygulamaları ve mobil uygulamalar için Couchbase’i kullanırlar.

 

Couchbase’i oluşturan iki temel yapı:

 

CouchOne (CouchDB): B+ ağaç yapısını kullanmaktadır. B+ çok büyük miktarda veri saklayabilmemizi ve bu verilere çok hızlı bir şekilde erişebilmemizi sağlar. CouchDB de B-tree uygulanması normalden biraz farklıdır. Yani B-tree’nin tüm özellikleri korunur ancak bu yapıya MVCC eklenir. B treeler ana veritabanı dosyalarını indexler şeklinde depolamak için kullanılır. MVCC eş zamanlı izin okumaya ve kilitleme sistemi olmadan yazmaya izin verir. Bu şekilde yazılar seri bir şekilde yazılır ve bir veritabanı için sadece bir yazı işlemine izin verilir. Yazı işlemleri okuru engellemez ve herhangi bir zamanda okuma işlemi yapılabilir.

 

Membase: Membase memcached projesinin birkaç lideri tarafından

geliştirildi. Membase verilerin ön belleğe alınması ve kümeleme teknolojileriyle

ilgilidir. Kolayca depolanabilir ve ek bir uygulama gerektirmeden çok sayıda veriyi

alabilir. Kolayca büyür ve membase kümelerini küçültür. Böylece bir uygulamanın veri

yönetimi değişimlerine kolay uyum sağlar.

 

***MEMBASE + COUCHONE = COUCHBASE

 

  1. RavenDB

 

RavenDB .NET ortamında C# dili kullanarak geliştirilmiş açık kaynak kodlu bir döküman veritabanıdır. Kişisel kullanım ve açık kaynak kodlu projeler için ücretsiz, ticari kullanımlar için ücretlidir. RavenDB içinde diğer döküman veritabanı sistemindekiler gibi şema tanımlamak gerekmez. Herhangi bir nesneyi direk saklayıp sorgulayabiliriz. Böylece sadece uygulama sürecine odaklanılmış olur.

 

  1. Azure Table Storage

 

Storage account, bir coğrafi bölgede bulunan Windows Azure Blob, Table ve Oueue

servislerine erişimimizi sağlar. Windows Azure Storage kullanmak için storage account

sahibi olmamız gerekmektedir. Microsoft un Windows Azure Platformu bir bulut platformu hizmetidir. Windows Azure Table Storage, yapılandırılmış büyük miktardaki verileri depolamada kullanılır. Azure Table Servisi, Windows Azure Cloud içinden veya dışından yetkilendirilmiş talepleri kabul eden bir NoSQL veri depodusur. Yapılandırılmış veya ilişkisel olmayan verileri saklamak için idealdir. Depolanan veri setleri join veya foreign key gerektirmez. Clustered index kullanarak hızlı bir şekilde veri sorgulama yapabilir.

 

  1. MemcacheDB

 

Açık kaynak kodlu, yüksek performanslı dağıtık bellekleme sistemidir. Genellikle, verileri ve nesneleri RAM e saklayıp bir veritabanından okunması gereken toplam sayıyı düşürerek, veritabanı güdümlü web sitelerini hızlandırmak amaçlı kullanılır. Başka bir deyişle, yüksek trafik alan dinamik web uygulamalarının veri tabanına gitme sayısını azaltarak performansı yükseltmeyi amaçlar. Unix, Linux, Windows ve MacOSX üzerinde çalışabilmekte ve serbest yazılım lisansı altında dağıtılmaktadır.

 

Sistem bir sunucu-istemci mimarisi kullanmaktır. Sunucular bir anahtar-değer ilişkisel dizisi (associative array) tutar. İstemciler ise, bu diziyi doldurur ve sorgularlar. Eğer sunucu RAM’i dolarsa, sunucu LRU mantığıyla en eski verileri atar. Burdanda anlaşılacağı gibi Memcached bir önbellek olarak düşünülmeli ve bir kez saklanan verinin ne zaman lazım olursa olsun sunucuda bulunacağı düşünülmemelidir. Memcached replikasyonu desteklemez. Verinin kopyalanması demek alanın daralması demektir. Bunun dezavantajını şöyle düşünebiliriz: On tane sunucu varsa biri çökerse yüzde onluk bir kayıp yaşanır. Kayıpsız bir ortam isteniyorsa, Membase veya diğer NoSQL veritabanlarından birisi kullanılabilir. Ayrıca Memcached kimlik doğrulamayı

desteklemez. Yani güvensiz bir ortamı vardır. Network üzerinden erişimi olan bütün istemciler atama (set) ve alma (get ) işlemlerini yapabilirler. SASL (Simple Authentication and Security Layer) protokolünün kurulmasıyla güvensiz bir ortamda güvenlik sağlayabiliriz.

  1. AMAZON DynamoDB

 

DynamoDB, internet ölçeğindeki uygulamalar için tasarlanmış hızlı, ölçeklenebilir ve düşük maliyetli bir NoSQL çözümüdür. Gereksinimlerin artması durumunda DynamoDB verileri ve trafiği yeterli sunucuya dağıtarak uygulamanın sorunsuz olarak çalışmaya devam etmesini sağlıyor.

 

  1. Neo4j

 

Neo4j yüksek performanslı, olgunlaşmış ve sağlam bir NoSQL grafik veritabanıdır. Transaction desteğiyle güçlü bir kurumsal veritabanından beklenen özellikleri sağlamaktadır.

 

Genel özellikleri:

  • Yüksek performanslı sorgulama,
  • Hızlı geliştirme,
  • Gerçek ACID uyumlu transaction desteği,
  • Java ve Python desteği.
  • Master veri yönetimi: Verilerinizi graph şekline dönüştürdükten sonra bazı sorulara daha kolay cevaplar verebilir ve daha başarılı sonuçlar çıkarabilirsiniz.
  • Network veri yönetimi: Bulut bilişimle veri ağlarının ilişkisi ve bu veri ilişkilerinin topolojisi üzerinden çok daha etkin bilgi ve karar destek sistemleri üretebilirsiniz.

 

NoSQL Sistemlerin Avantajları

 

İlişkisel veri tabanları, yoğun trafiği olan web sayfalarında ve yoğun very uygulamalarında çok sayıda belgeyi indexlemede yetersiz kalabilir. NoSQL bu konuda başarılı ve hızlıdır. NoSQL sistemin farklı sunucularda yedeklenmesini (Dağıtık mimari) sağlar. Bu saklamalar dağıtık hash çizgileriyle yapılır. Böylece sistem kolayca yeni sunucular eklenerek büyütülebilir veya bir sunucunun arızalanması durumu tolere edilebilir. Ayrıca,

 

+ Yüksek erişilebilirlik,

+ Yatay olarak genişletilebilirliği,

+ Binlerce sunucunun bir arada küme olarak çalışabilmesi,

+ Esnek yapısı sayesinde programlamada sağladığı kolaylık,

+ Çoğunun açık kaynaklı olması ve bulut bilişime uygunluğu

NoSQL’in avantajlarındandır.

 

NoSQL Sistemlerin Dezavantajları

 

– NoSQL, ACID garantisi vermez.

– RDBMS kullanan uygulamaların NoSQL sistemlere taşınmaları bazı zorluklar yaratabilir. Örneğin, Join kullanılar kodların değiştirilmesi gibi.

– Sorgu tabanlı veri erişimi yerine anahtarlı veri erişimi sağlanması gerekebilir.

– Transaction kavramı olmadığından veri kaybı yaşanabilir.

– RDBMS e kıyasla veri güvenliği konusunda gelişmiş değildir.

 

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir