Derin Dalış: NoSQL Veri Tabanı Rehberi

Önceki yazım olan "Derin Dalış: SQL ve İlişkisel Veri Tabanı Rehberi" ile, SQL ve İlişkisel Veri Tabanına (RDBMS) giriş yapmıştık ve DDL ifadeleri ile CRUD operasyonlarını incelemiştik. Şimdi de serinin ikinci bölümü olan NoSQL Veri Tabanı, Dikey olarak Ölçeklenebilir (Vertical Scaling), ve Yatay olarak Ölçeklenebilir (Horizontal Scaling) konularına değineceğim.
NoSQL Veri Tabanı Nedir?
NOSQL ya da diğer bir ismiyle Not only SQL (yani yalnızca SQL değil) veri tabanı, sabit bir şema gerektirmeyen, esnek, ve ölçeklenebilir bir veri tabanına verilen isimdir. Yüksek performanslı ve aynı oranda işlevsel veri tabanına ihtiyaç duyan oyun, mobil uygulama ve web projeleri için modern bir seçenektir. NoSQL, büyük veri ve gerçek zamanlı verileri depolamak/saklamak için kullanılan en işlevsel veri tabanlarındandır.
SQL ve NoSQL Veri Tabanları arasındaki farklara geçmeden önce, eğer göz atmadıysanız Derin Dalış: SQL ve İlişkisel Veri Tabanı Rehberi başlıklı yazıma göz atmanızı öneririm.
Ayrıca, NoSQL veri tabanlarında CAP Teoremi değinmek gerekir. NoSQL veri tabanları, Strong Consistency, Availability ve Partition Tolerance (partitioning) kavramlarını aynı anda garanti edemez.
Consistency: Dağıtık sistemdeki tüm node’ların aynı veriye sahip olması durumu.
Availability: Sisteme yapılan her isteğin başarılı olarak sonuçlanması durumu. (En güncel veriye sahip olmasa bile)
Partition Tolerance: Mevcut node’lardan bir kısmında network veya başka bir sebeple erişilmezlik meydana geldiğinde, sistemin çalışmasına devam etmesi durumu.

NoSQL Veri Tabanı Türleri

- Anahtar/Değer (Key/Value) depolanan veri tabanları
- Sütun tabanlı veri tabanları
- Grafik tabanlı veri tabanları
- Belge (Document) tabanlı veri tabanları
1. Belge (Document) tabanlı veri tabanları
Document tabanlı veri tabanlarında, veriler document olarak isimlendirilen .JSON, .BSON veya .XML formatındaki belgelerde depolanır. Veri tabanındaki belgeler esnek bir şema yapısına sahiptir, belgeler aynı şema yapısında olmak zorunda değildir. Koleksiyon adı verilen belge gruplarında saklanırlar. İki belge arasındaki ilişki de dinamik bir ilişki yoktur, bu sebeple foreign key kullanımına gerek yoktur.
MongoDB ve CouchDB örnek verilebilir.
2. Anahtar/Değer (Key/Value) tipi depolanan veri tabanları
Anahtar-değer tipi depolama, NoSQL veri tabanının en basit biçimidir. Basitlik, ölçeklenebilirlik ve hız sunar. Veri tabanındaki her veri, anahtar/değer çiftlerinde depolanır.
Redis örnek verilebilir.
3. Sütun tabanlı veri tabanları (Column-Oriented)
Sütun tabanlı veri tabanlarında, veriler sütunlarda depolanır, satırlar kullanılmaz. Ölçeklenebilir, sıkıştırılabilir (compression) ve çok duyarlıdır (very responsive). Sütun yönelimli veri tabanları, daha az bellek tüketimi sağlar; çünkü sadece istenen verilere bellek tüketimi yapılır. Çok işlemli veri okumaları için sütun yönelimli veri tabanları, daha az bellek tüketimi sağlar; çünkü sadece istenen verilere bellek tüketimi yapılır.
Cassandra ve HBase örnek verilebilir.
4. Grafik tabanlı veri tabanları
Grafik tabanlı veritabanları, elemanlar arasındaki ilişkiye odaklanır. Verileri veritabanında node (düğüm) şeklinde depolar. Node’lar arasındaki bağlantılara links (bağlantılar) veya relationships (ilişkiler) denir.
Neo4J örnek verilebilir.
SQL Veri Tabanı ve NoSQL Veri Tabanı Arasındaki Farklar:
Bu iki teknolojinin en temel farkı; SQL veri tabanları ilişkiseldir, NoSQL veri tabanları ise ilişkisel değildir.
İlişkisel Veri Tabanları, (RDBMS) transaction (işlem) tabanlı sistemlerdir. NoSQL Veri Tabanları ise bu kurallara tamamen uygun değildir. ACID kuralları olarak adlandırılan ve her bir harfin kısaltması olan Atomicity, Consistency, Isolation, Durability, veri bütünlüğünü sağlamak ve hatayı minimuma indirmek için gerekli kurallardır.
SQL veri tabanları yapılandırılmış sorgu dili (Structured Query Language, yani SQL) kullanır ve önceden tanımlanmış bir şemaya sahiptir. NoSQL veri tabanları, yapılandırılmamış veriler (unstructured) için dinamik şemalara sahiptir.
SQL veri tabanları dikey olarak ölçeklenebilirken (vertically scalable), NoSQL veri tabanları yatay olarak ölçeklenebilir (horizontally scalable).
SQL veri tabanları tablo tabanlıdır (table-based), NoSQL veri tabanları ise doküman (document), key-value (anahtar-değer), graph ya da geniş kapsamlı veri yapılarını kullanır.
Çok işlemli işlemler için SQL veri tabanları önerilir. Document ve JSON gibi yapısal olmayan veriler içinse NoSQL veri tabanları önerilir.
Ölçeklendirme (Scaling) Nedir?

Dikey Ölçeklendirme (Vertical Scaling): Makineye daha fazla güç (CPU, RAM, SSD kapasitesi vb.) ekleyerek mevcut sunucudaki yüksek performansı artırmaktır, SQL veri tabanları genelde dikey ölçeklenebilir.
Yatay Ölçeklendirme (Horizontal Scaling): Kaynak havuzuna daha fazla makine ekleyerek gerçekleştirilir, NoSQL veri tabanları genelde yatay ölçeklenebilir.
Sonuç
Bu makalede, SQL ve NoSQL veritabanları arasındaki farklar ele alınmıştır. SQL veritabanları, ilişkisel veritabanları olarak bilinirken, NoSQL veritabanları, daha esnek ve ölçeklenebilir bir veri depolama ve yönetim yöntemi olarak kabul edilir.
Makalede SQL ve NoSQL veritabanlarının özellikleri, avantajları ve dezavantajları da ele alınmıştır. SQL veritabanları, veri yönetimi için idealdir ve ACID özellikleri (Atomicity, Consistency, Isolation, Durability) nedeniyle güvenilir ve istikrarlı bir yapı sunar. NoSQL veritabanları ise, esnek veri yönetimi için idealdir ve modern ve ölçeklenebilir web uygulamaları için idealdir. Ayrıca, NoSQL veritabanları, çoklu sunucu desteği ve yüksek ölçeklenebilirlik özellikleri sayesinde büyük veri kümelerini yönetmek için daha uygundur.
Sonuç olarak, SQL ve NoSQL veritabanları arasındaki farklar, veri yönetimi için uygun olan veritabanının seçilmesinde büyük öneme sahiptir. Veri yönetimi için doğru veritabanı seçimi, veri tabanının performansı, ölçeklenebilirliği ve güvenliği gibi kritik faktörleri etkileyeceğinden, dikkatli bir şekilde yapılması büyük öneme sahiptir.
Önceki yazım "SQL Veri Tabanına Giriş" ve İlişkisel Veri Tabanına (RDBMS) giriş yapmıştık. Veri Tabanı blog serisinin 2. yazısında; NoSQL Veri Tabanı, SQL ve NoSQL Veri Tabanları arasındaki farklar, Yatay olarak Ölçeklendirme ve Dikey olarak Ölçeklendirme konularını anlattım.
Bu konuda bilginizi derinleştirmek isterseniz, Eric Brewer'in CAP Teoremi'ni de okumanızı öneririm. Serinin devamına aşağıdan erişebilirsiniz. Ayrıca, tüm yazılarıma da göz atmayı unutmayın. Şimdilik hoşça kalın!
Referanslar
SQL vs NoSQL Database Differences Explained
SQL databases are vertically scalable,data like documents or JSON
Horizontal Vs. Vertical Scaling
Microservice Mimari’lerde Veritabanı Tasarımı
Y. Gökşen, “Veri Büyüklüklerinin Veri tabanı Yönetim Sistemlerinde Meydana Getirdiği Değişim: NoSQL”, Bilişim Teknolojileri Dergisi, 8-3, 2015

Yazılım Mühendisi — Dijital Zanaatkâr
Karmaşık sorunlara zarif çözümler üretmekten keyif alan, tutkulu bir yazılım mühendisi. Kodlamanın ötesinde, teknoloji, sanat ve insan bilincinin kesişim noktalarını keşfetmekle derinden ilgileniyor.