Büyük veride: NoSQL mi? SQL mi?


Son yıllarda bir çok işin internet üzerinden yapılıyor olması (alışveriş, bankacılık, finans, e-okul, e-devlet işleri, vergi ödemeleri, e-bys gibi) internet üzerinden girilen verilerin önceden tahmin edilemeyecek kadar dağınık ve düzensiz yapılarda olmasını beraberinde getirmiştir. Oysa yıllardır kullanıldığımız veritabanları yapısal verileri düzenli bir şekilde tutuyor ve bizim kullanımımıza sunuyordu. İnternete sayısız kullanıcı veri girmekte ve arama motorları, sosyal ağlar bu verilere ulaşmaya çalışmaktadır. Bu kadar büyük miktarlarda düzensiz veriyi, ilişkisel veritabanlarının kurallarına uygun şekilde merkezi bir yerde tutmak, yedeklemek, güvenliğini sağlamak ve bunların üzerinde SQL sorguları çalıştırmak mümkün değildi. NoSQL veritabanları bu ihtiyaçtan doğmuştur. Çoğunlukla internet üzerinde üretilen ve depolanan, veriler arasındaki ilişkinin bütünlüğünün önemsenmediği büyük verilere odaklanır. Bu veritabanları henüz endüstri standartı haline gelmemiştir, ancak Google, Facebook, Linkedln, Twitter, Amazon gibi internetin öncü firmaları tarafından NoSQL veritabanlarında olması gereken minimum özellikler tanımlanmıştır (http://nosql-database.org/). NoSQL veritabanları 2000 yılından bu yana geliştirilmeye başlanmıştır ve çoğunlukla açık kaynak kodludurlar. 

Amazon, 7 gün 24 saat sipariş desteği verebilmek için Dynamo veritabanını, Google milyonlarca sayfa üzerinden yapılan arama sonuçlarını listelemek için BigTable veritabanını, Facebook Cassandra'yı, Linkedln Moldemort'u, LiveJournal, Flickr, YouTube, Wikipedia Memcached veritabanını kullanmaktadır. Bu veritabanları NoSQL veritabanlarıdır.

İlişkisel veritabanları ile NoSQL veritabanları arasındaki farklar şu şekilde özetlenebilir:

İlişkisel veritabanı
NoSQL veritabanı
Veritabanına girilen veriler genellikle tablolarda tutulur. Tablolar satır ve sütunlardan oluşur yani iki boyutludur. Sütunlar sayıları ve başlıkları bellidir, önceden tanımlanır. OLAP veritabanları gibi yeni teknolojiler çok boyutlu tabloları (küpleri) kullanmaktadır.
Veritabanları, dokümanlara dönüştürülen anahtar değerlerden oluşan setler olarak tanımlanabilir (doküman depolama), veriler sosyal ağlardaki gibi grafik algoritmalı karmaşık veri yapıları için de uygundur (grafik depolama) veya ilişkisel veritabanlarında olduğu gibi sütuna dayalı depolama yapar ancak burada sütunlar önceden tanımlı değildir, bir satır binlerce sütun içerebilir.
Sorgulama için SQL kullanılır. SQL’in farklı türleri vardır; PL-SQL, T-SQL gibi ancak temelde birbirlerine çok benzerler.
Sorgulamalarda SQL kullanılmaz. Bu nedenle adını Not only SQL’den almaktadır. Standart bir sorgulama dili yoktur.
ACID (Atomicity, Consistency, Isolation, Durability) kısaltması ilişkisel veritabanlarının ortak özelliklerini tanımlamaktadır.
BASE (Basically Available, Soft state, Eventually consistent) yapısı ile tanımlanır.
Sadece yapısal ve ilişkili verileri kullanır.
Yapısal ve ilişkisel olmayan, düzensiz, dağınık verilerle ilgilenir.
Endüstri standartı haline gelmiştir. ANSI (American National Standards Institute) tarafından geliştirilmiş bir yapısal bir komut sistemi (SQL) kullanır.
Henüz bir endüstri standardı haline gelmemiştir. Bu nedenle farklı algoritmalar veya farklı mantıkla çalışan birçok türü vardır. (bugün itibari ile 225 tane NoSQL veri tabanı var. http://nosql-database.org/)
Daha çok bilişim sistemlerinde üretilen verileri kullanmaktadır.
Çoğunlukla internet ortamında üretilen ve depolanan verilere odaklanmaktadır.
Büyük verilerle ilgilenmez.
Büyük verilerle ilgilenir.
Kaybedilmesi mali yönden zararlara neden olabilecek verilerin üretildiği bankacılık, sigortacılık, üretim gibi alanlarda kullanılır.
Veriler arasındaki ilişkilerin ve veri bütünlüğünün önemli olmadığı alanlarda iş ihtiyaçlarını karşılamak için kullanılabilir.
Oracle ve SQL Server düzenli verileri işlemek için ilişkisel veritabanı mimarisini kullanır.
Düzensiz ve dağınık verilerle başa çıkabilmek için Oracle NoSQL, SQL Server AZURE gibi çözümler üretmişlerdir.
Sorgu dönüş hızı NoSQL veritabanlarına göre göre daha yavaştır.
Sorgu dönüş hızı ilişkisel veritabanlarına göre daha hızlıdır.


NoSQL veritabanı türleri dört çeşittir; Anahtar değerli (Key-value), sütun tipli (column), belge tipli (document) ve grafik tipli.

Anahtar değerli NoSQL veritabanları,  bir API bakış açısıyla kullanılacak en basit NoSQL veri depolarıdır. İstemci anahtarın değerini alabilir, bir anahtar için bir değer koyabilir veya veri deposundan bir anahtar silebilir. Değer sadece denizde bir damladır, veri deposunun içerdiği diğer şeyleri bilmeyen, sadece saklamış olduğu bir bloktur; neyin depolandığını anlamak uygulamanın sorumluluğundadır. Anahtar değerli veritabanları her zaman birincil anahtar erişimi kullandıklarından, genellikle mükemmel performansa sahiplerdir ve kolayca ölçeklendirilebilir. Riak, Redis, Memcached, Berkeley DB, Amazon DynamoDB ve Couchbase bu veritabanı türüne örnekler.

NoSQL veritabanı türleri
Belge tipli NoSQL veritabanları adından da anlaşılacağı gibi belgelerden oluşur. Bu veritabanı, XML, JSON, BSON ve benzeri belgeleri saklar ve alır. Bu belgeler, kendi kendilerini tanımlayan, hiyerarşik ağaç veri yapıları olup haritalar, koleksiyonlar ve skaler değerlerden oluşabilir. Saklanan belgeler birbirine benzemekle birlikte tam olarak aynı olmaları gerekmez. Bu veritabanları belgeleri anahtar-değer deponunun değer kısmında depolar; belge veritabanlarını değerin incelenebileceği anahtar değerli depolar olarak düşünün. MongoDB gibi belge veritabanlarının zengin bir sorgu dili vardır ve ilişkisel veritabanlarından daha kolay geçiş sağlayarak veritabanı, indeksler gibi yapıları oluşturabilir. MongoDB'nin yanısıra, CouchDB, TerraStore, OrientDB, RavenDB belge tipli NoSQL veritabanlarıdır.

Sütun tipli NoSQL veritabanları, veriyi sütun ailelerinde depolar; yani bir satır anahtarı ile ilişkilendirilmiş birçok sütuna sahip satırlar olarak depolar. Sütun aileleri, genellikle birlikte erişilen ilgili veri gruplarıdır. Örneğin bir müşteriye ulaştığımızda genelde profil bilgilerine ulaşırız ama aynı anda siparişlerine ulaşamayız. Her sütun ailesi, bir ilişkisel veritabanı tablosundaki satırların bir kapsayıcıyla karşılaştırılabilir; ancak burada anahtar, satırı tanımlar ve satır, birden çok sütundan oluşur. Diğerinden farkı, çeşitli satırların aynı sütunlara sahip olmasına gerek yoktur ve sütunlar, diğer satırlara eklenmek zorunda kalmadan istenildiği zaman herhangi bir satıra eklenebilir.

Bir sütun, bir sütun haritasından oluştuğunda, süper bir sütun elde edilmiş olur. Süper bir sütun, bir ad ve bir sütunun haritası olan bir değerden oluşur. Süper sütunlar bir sütun kapı olarak düşünülebilir. Cassandra, Hbase, Hybertable, Amazon DynamoDB sütun tipli veritabanlarına örnektir.

Grafik tipli NoSQL veritabanları, varlıkları ve bu varlıklar arasındaki ilişkileri saklamanızı sağlar. Varlıklar, özelliklere sahip düğümler (nodes) olarak da bilinir. Bir düğümü, bir uygulamadaki nesne (object) örneği olarak düşünün. İlişkiler (realtionship), özelliklere (properties) sahip olabilecek kenarlar olarak bilinir. Kenarların yönü önemlidir; düğümler, düğümler arasında ilginç kalıplar bulmanıza izin veren ilişkilerle organize edilir. Grafiğin organizasyonu verilerin bir kez saklanmasını ve ardından ilişkilere dayalı olarak farklı yollarla yorumlanmasını sağlar. Noe4j, FlockDB, Infinite Graph, OrientDB grafik tipli NoSQL veritabanı örnekleridir.
Graph NoSQL Database
Hangi NoSQL veritabanı?

Yukarıdaki çok fazla seçenek göz önüne alındığında, hangi NoSQL veritabanını seçeceğiz? Tabiki bu sizin sistem gereksinimlerinize bağlı, aşağıda bazı öneriler verilmektedir:

  • Anahtar-değer veri tabanları genellikle oturum bilgilerini, kullanıcı profillerini, tercihlerini, alışveriş sepeti verilerini depolamak için kullanışlıdır. Verilerin sorgulanması, depolanan veriler arasında ilişki kurmak gibi durumlar söz konusu ise anahtar-değer veritabanları kullanılmamalıdır.
  • Belge veritabanları genellikle içerik yönetim sistemleri, blog platformları, web analitiği, gerçek zamanlı analitik, e-ticaret uygulamaları için yararlıdır. Birden çok işlemi (transaction) veya sorguyu kapsayan karmaşık işlemlere ihtiyaç duyan sistemler için belge veritabanlarını kullanmaktan kaçının.
  • Sütun veritabanları genellikle içerik yönetim sistemleri, blog platformları, sayaçların tutulması, kullanım süresinin dolması, log toplama gibi yoğun yazma hacimleri için yararlıdır. Erken gelişmekte olan, sorgu kalıplarını değiştiren sistemler için sütun veritabanlarını kullanmaktan kaçının.
  • Grafik veri tabanları, sosyal ağlar, uzaysal veriler (spatial data), ürünler ve para için yönlendirme bilgileri, arama motorları gibi verileri birbirine bağladığımız problemli alanlara çok uygundur.

Kaynaklar:
https://www.thoughtworks.com/insights/blog/nosql-databases-overview
https://www.slideshare.net/MuratAzimli/murat-azimli-iliskisel-veritabani-sistemleri-ve-no-sql-29701533

Yorumlar

Bu blogdaki popüler yayınlar

Nesneye dayalı programlama

Çocuklarımızı Yapay Zekaya yönlendirmek o kadar da zor değil!

Veri ambarları, OLTP ve OLAP