NoSQL Veritabanı: nedir? ne değildir?

NoSQL Veritabanı: nedir? ne değildir?

NoSQL veritabanı nedir? Ne amaçla kullanılır?

NoSQL uzun süredir kullanımda olan MSSQL ve MYSQL gibi ilişkisel veri tabanı sistemlerine alternatif olarak yapılmış bir veri tabanı sistemidir. NoSQL sistemlerinde isminden anlaşıldığı üzere sql dili kullanılmadığı için NoSQL olarak adlandırılmıştır. Halihazırda teknolojik bir standart olmadığı için bazı kişiler tarafından “Not Only SQL” olarak da adlandırılmaktadır. Kimine göre yeni, performanslı ve esnek olan bu sistem bazılarına göre de tatmin edici değildir. Fakat bunun üzerine düşünmek yerine şöyle bir şey düşünelim, BigData… Son yıllarda duyduğumuz bu isim uzun süredir biriktirdiğimiz verilerin anlamlı hale getirilme çabasıdır. Bu veri o kadar devasa boyuta gelir ki ilişkisel veri tabanı sistemlerinde barınamaz. Burada barınamadığı içinde veriler anlamlandırılamaz ve çöplüğü olarak kalır. Fakat bu bilgi çöplüğü olarak adlandırdığımız aslında çok önemli ve yararlı verileri barındırır. Bu durumda kullanılan sistem NOSQL çözümleridir.

NOSQL’in önemini şu şekilde vurgulayabiliriz. Google yıllardır indekslediği sitelerin verilerini RDBMS’de değil Big Table üzerinde tutmaktadır. Bu şekil RDBMS gibi büyük verileri performanslı bir şekilde işleyemeyen yüksek ücretli sistemler yerine açık kaynaklı ucuz ve performanslı sistemleri tercih ediyor.

NoSQL veritabanlarının avantajları ve dezavantajları nelerdir?

Avantajları:

  • İlişkisel veritabanlarına göre yüksek erişilebilirlik imkanı sunarlar.
  • Okuma ve yazma performansları olarak ilişkisel veritabanı sistemlerine göre daha performanslı olabilirler.
  • Yatay olarak genişletilebilmektedir. Binlerce sunucunu hepsi birarada küme olarak çalışabilir ve çok büyük veri üzerinde işlem yapabilirler.
  • Esnek yapılarından dolayı programlama ve bakım anlamında aşırı kolaylık sağlamaktadırlar.
  • Farklı özelliklerdeki birçok implementasyon arasından seçim yapma şansınız vardır.
  • Birçok açık kaynak kodlu projelere ve bulut teknolojilerine uygun olduğu için maddi bakımdan olarak ilişkisel veritabanı yönetim sistemlerine göre daha avantajlıdır.

Dezavantajları:

  • İlişkisel veritabanı yönetim sistemi uygulamalarının NoSQL sistemlere taşınması başlangıçta zor olacaktır. Veri başarılı bir şekilde taşınsa bile bağlantıyı kullanan kodlarda düzenlemelerin yapılması gerekecektir.
  • İlişkisel veritabanı sistemlerindeki sorgu tabanlı veri erişimi yerine NoSQL sistemlerdeki anahtar tabanlı veri erişimi sağlamak gerekmektedir. Buna uygun olacak bir yapılandırmaya gidilmesi zaman alabilmektedir.
  • İlişkisel veritabanı sistemlerindeki işlem hareketleri, NoSQL veritabanı sistemlerinde bulunmadığından dolayı veri kaybı söz konusu olabilmektedir.
  • NoSQL veritabanı sistemleri veri güvenliği konusunda ilişkisel veritabanı yönetim sistemleri kadar gelişmiş özelliklere şimdilik sahip değillerdir. Birtakım NoSQL projelerin dökümantasyon ve profesyonel destek konusunda eksik yönleri vardır.

NoSQL veritabanlarının ilişkisel veritabanlarından farklı yönleri nelerdir?

NoSQL,  İlişkisel Veritabanı Yönetim Sistemleri (Realtional Database Management Systems, RDBMS) gibi işlem tabanlı çalışmamaktadır. Bunun yerine yatay büyüme yaparak, performans konusunda kazanç sağlar. Verileri bölerek kopyalarını dağınık sistemin farklı parçalarına ekler böylelikle tutarlılık sağlamış olur ve her parça için harcanan yük azaltılmış olur.

RDBMS önceden tasarlanıp sütunları belirlenip satır satır eklenir. Ancak NOSQL de bu tip bir tanıma gerek olmamaktadır. Bunun yerine çok daha esnek bir yapısı bulunmaktadır. Bu durum kafanızda soru işareti bırakıyorsa şöyle düşünebilirsiniz. 2 adet kolonu olan bir tablonuzda int verileri tutuyorsunuz yeni satırınızda da bunların yerine varchar eklemeniz gerekiyor. Hiçbir değişikliğe gerek kalmaksızın verilerinizi ekleyebilirsiniz. A kolonu B kolonu varken C ve D’ye gerek olmamaktadır.

NOSQL birincil indeks değerine ihtiyaç duyar ve bunun üzerinden erişimini yapar. RDBMS de bu zorunlu değildir. Oluşan indeks üzerinden belirli aralığa hızlıca ulaşılabilir.

Aralarındaki en önemli fark bence veri tabanı tasarımında ortaya çıkıyor. RDBMS bir sistem için kullanacağınız veriyi ne şekilde depolayacağım diye düşünürken, NOSQL için depoladığım veriyi nasıl kullanacağım şeklinde soru işaretine neden oluyor. Bu da proje yazarken sadece projenizi yazmanızı sağlıyor.

Popüler NoSQL veritabanı sistemleri nelerdir?

Anahtar / Değer (Key / Value) tabanlı: Bu sistemlerde anahtara karşılık gelen tek bir bilgi bulunmaktadır. Kısacası kolon kavramı yoktur. Örneğin; Redis, MemcacheDB

Redis;
Redis bir veri yapısı sunucusudur. Açık kaynak, bellek kullanımlı, anahtar-değer deposudur. Redis “Uzak Sözlük Sunucusu” anlamına gelmektedir. Çeşitli kaynaklara göre en çok kullanılan anahtar-değer veritabanıdır. Haziran 2015 yılından beri Redis Labs şirketi tarafından geliştirilmesine destek sağlanmaktadır.
MemcacheDB;
Memcached, genel amaçlı dağıtılmış bir bellek önbellekleme sistemidir. Genellikle, harici bir veri kaynağının kaç kez okunması gerektiğini azaltmak için verileri ve nesneleri RAM’de önbelleğe alarak dinamik veritabanı güdümlü web sitelerini hızlandırmak için kullanılır.

Sütun (Column) tabanlı: Sütun mantığındaki veritabanları genellikle belli sütunların mevcut bütün değerlerini disk üzerinde bir araya getirmektedir ve bu işlem büyük miktarlarda belirli bir özniteliğin kısa zamanda alınmasını sağlamaktadır. Örneğin; Cassandra ve HBase

Casandra;
Birçok emtia sunucusunda büyük verileri işlemek için yapılmıştır, hiç bir hata olmaksızın yüksek kullanılabilirlik sağlayan bedava ve açık kaynak kodlu, dağıtılmış, geniş bir sütun deposu, NoSQL veritabanı yönetim sistemidir.
HBase;
Google’ın Bigtable’dan sonra modellenen ve Java ile yazılmış açık kaynaklı ilişkisel olmayan bir dağıtılmış veritabanıdır. Apache Software Foundation’ın Apache Hadoop projesinin bir parçası olarak geliştirilmiştir ve Hadoop için Bigtable benzeri özellikler sağlayan HDFS veya Alluxio üzerinde çalışır.

Doküman (Document) tabanlı: Bu sistemlerde bir kayıt doküman olarak isimlendirilmektedir. Dökümanlar genellikle JSON formatında tutulur. Bu dökümanların içerisinde sınırsız alan oluşturulabilir. Örneğin; MongoDB, CouchDB

MongoDB;
Ölçeklenebilir, doküman tabanlı, C++ ile geliştirilmiş açık kaynak kodlu, NoSQL veritabanı uygulamasıdır. MongoDB, verileri JSON veri tipinde dokümanlarda saklamaktadır, anlamsal alanları dokümandan dokümana değişiklik gösterir ve veri yapısı zaman içinde değiştirilebilir.
CouchDB;
CouchDB, Erlang’da uygulanan açık kaynaklı, belge odaklı NoSQL veritabanıdır. CouchDB, verilerini depolamak, aktarmak ve işlemek için birden fazla format ve protokol kullanır; verileri depolamada JSON, MapReduce kullanarak sorgu dili de JavaScript ve API’de HTTP kullanır.

Grafik (Graph) tabanlı: Grafik veritabanları, düğümler arasındaki bağıntılardan veya kenarlardan oluşmaktadır. Örneğin; Neo4J, OrientDB

Neo4j;
Neo4J Technology firması tarafından açık kaynak olarak sunulan ve geliştirilen graph veritabanıdır. Verileri ve verilerin arasındaki ilişkileri saklamak amacından dolayı graf yapısı kullanan, açık kaynak kodlu bir NoSql veritabanı altyapısıdır.
OrientDB;
Java ile yazılmış açık kaynaklı bir NoSQL veritabanı yönetim sistemidir. Grafik, belge, anahtar / değer ve nesne modellerini destekleyen çok modelli bir veritabanıdır, ancak ilişkiler kayıtlar arasında doğrudan bağlantıları olan grafik veritabanlarında olduğu gibi yönetilir.


Barbaros Öztürk / SÜ-İnternet ve Ağ Teknolojileri

Gülay Ekren

Sinop Üniversitesi İnternet Kulübü

Bir cevap yazın