NoSQL ve MongoDB Nedir?

watch_later 3/02/2018

NoSQL, 1998 yılında ilk Carlo Strozzi tarafından ortaya çıkarılmıştır. SQL arayüzü olmayan bu veri depolama sistemine, tasarımcısı Carlo Strozzi, ilişkisel olmayan anlamında (No Relation) isim koyması gerektiğini düşünür.





NoSQL kavramı 2009 yılı başlarında, Rackspace şirketinin çalışanlarından Eric Evans tarafından, açık kaynak dağıtık veritabanları sistemlerinin görüşüleceği bir toplantı düzenlenmek istendiği dönemlerde tekrardan kullanılmaya başlanmıştır. Eric Evans aslında bu isimle sürekli olarak ortaya çıkmaya başlayan, ilişkisel olmayan dağıtık veri depolama sistemlerine bir damga vurmayı amaçlamaktaydı.
NoSQL kavramı, aslında yıllardır bilişim dünyasında vazgeçilmez bir yere sahip olan ilişkisel veritabanı sistemlerine alternatif olarak ortaya çıkan, internetin gün geçtikçe artan verisini depolayabilmek ve yüksek trafiğe sahip sistemlerin ihtiyaçlarına cevap verebilmek amacıyla ortaya çıkmış yatay olarak ölçeklendirilebilen sistemlere verilen genel adlandırmadır. NoSQL sistemlerinde RDBMS’de kullanılan SQL dili kullanılmadığı için “No SQL” adı verilmiştir. Henüz endüstri standardı olarak kabul görmemesinden dolayı kimi zaman “Not Only SQL olarak da adlandırılır. Kimileri bunu yeni teknoloji olarak görürken, kimileri de bu sistemlerin tek başına yeterli olamayacağını düşünüyor. Aslında çok da yeni olmayan bu kavramın en bilinenleri Big Table ve DynamoDB yıllardır Google ve Amazon tarafından kullanılan NoSQL sistemleridir. Google indekslediği geniş büyüklükteki internet verisini RDBMS bir sistemde değil, Big Table üzerinde saklıyor. Ayrıca bu verilere RDBMS üzerinden erişebileceğinden çok daha hızlı ve belki en önemlisi, çok daha ucuza erişebiliyor. NoSQL sistemlerin ortaya çıkışı genel olarak büyüyen internet verisinin RDBMS’de performanslı bir şekilde işlenememesinden kaynaklanıyor. Veri büyüklüğü ve trafik olarak belirli büyüklüğe gelen ve hali hazırda açık kaynaklı veritabanı sistemleri kullanan firmalar bir noktada bu veritabanlarının kısıtlarına takılıyorlar. Dikey büyüme maliyetli olduğundan, yatayda büyüyebilmek için daha fazla önbellek (cache) kullanımı, verilerin programatik olarak dağıtılması (sharding) gibi teknikleri deneniyor.

NoSQL ve RDBMS Farkları Nelerdir?
RDBMS’ler işlem (transaction) tabanlı çalışan sistemlerdir. Bu işlemlerin düzgün çalışması ve veri bütünlüğü için ACID (Atomicity, Consistency, Isolation, Durability) kuralları bulunur. NoSQL sistemleri bu kuralların tamamına uymaz. Örneğin birçok NoSQL sisteminde “transaction” kavramı bulunmuyor zaten CAP teorisine göre herhangi dağıtık bir sistem aynı anda Tutarlılık (Consistency), Uygunluk (Availability) ve Parçalanma payı (Partition tolerance) kavramlarının hepsini birden asla sağlayamaz. Yani dağıtık bir sistemin her bir parçasından aynı veriye erişebilme, aynı anda bütün isteklere cevap verebilme, kaybedilen paketlere rağmen verinin bütününü kaybetmeme özelliklerine aynı anda sahip olamaz. Bunlardan mutlaka birinde problem çıkacaktır. NoSQL sistemlerde ise bu kavramlar esnetilerek yatayda büyüme ile performans kazancı amaçlanmıştır. 
RDBMS’lerde veriler tablolarda, tanımlı sütunlarda satır satır tutulurken, NoSQL sistemler sabit tablo tanımlarına bağımlı değillerdir. Yani daha sonradan özel bir işlem yapmadan yeni kolonlar eklenebildiği gibi, kayıtlar arasında kolon farklılıkları olabilir.. RDBMS’lerde veriler ilişkilerine göre ayrı tablolara düzenli bir şekilde yerleştirilerek normalize edilirken, verilere erişim için birleştirme (join) kullanılır. Dağıtık sistemlerde birleştirme operasyonu sıkıntılara sebep olur. Çünkü birleştirilmek istenen veriler farklı parçalarda olabilir. Bu yüzden dağıtık sistemlerde birleştirme işlemi elle yapılmalıdır. Yani önce a verisi çekilir, sonra bununla ilişkili b verisi çekilip programatik olarak birleştirilme yapılır. Normal sistemlerde bu işlemler performans kaybına sebep olurken, dağıtık sistemlerde bu performans kaybı sistemin genel performansı yanında önemsizdir. İşte bu sebeple dağıtık sistemlerde birleştirme operasyonu yapmak yerine veri denormalize tutularak verilere erişim kolaylaştırılır. Denormalize edilmiş veriler içerisinde veriler kendini tekrar edecektir ancak bu da dağıtık sistemlerin çalışma performansını arttırdığı için önemli değildir. NoSQL sistemler de bu sebeple sabit tablo tanımı içermez, verilerin denormalize tutulmasını kolaylaştırır.


RDBMS’lerde verilerin tekil birer anahtar (primary key) ile birbirlerinden ayrılması zorunlu değildir. Ancak NoSQL sistemler temel olarak verilere tekil anahtarlar üzerinden erişir. Her NoSQL sisteminde ikincil indeks (secondary index) yeteneği de bulunmayabilir. Bu yüzden verilere erişim SQL sorguları ile yapıldığı gibi kolay yapılamaz. Uygulamanın özelliğine göre birincil anahtarlar belirli bir mantığa göre verilir ve bu sayede veriye erişmeden önce zaten bu anahtar biliniyor ya da oluşturulabiliyor olur.
NoSQL sistemlerin bazılarında MapReduce yeteneği bulunmaktadır. Bu sayede RDBMS üzerinde SQL ile gerçekleştirilmesi çok kompleks olan analizler, MapReduce ile kolay bir şekilde gerçekleştirilebilir.
NoSQL Facebook, Twitter, Foursquare gibi teknoloji firmaları tarafından da kullanılıyor. Foursquare'de birçok kontrol yapılmasına rağmen bu kadar hızlı check-in olunması ya da başka check-in’leri görüntülemeyi hızlı yapmasını NoSQL’ bağlamak gerekir. Yine Twitter'da bir tweet'i aradığınızda anlık olarak veri çekmesi de aynı sistemin avantajıdır.

 

Twitter NoSQL Döküman Simülasyonı

Bugün mevcutta pek çok NoSQL çözümü bulunmaktadır. Bu çözümler içinde, geliştirimine 10gen firmasınca 2007 yılında başlanan ve 2009 yılında AGPL lisansıyla açık kaynak projesine dönüştürülen MongoDB en popüler olanlardan birisidir.

MongoDB geliştirme ve ölçekleme kolaylığı için tasarlanmış açık kaynak, belge yönelimli(document-oriented) veritabanı olarak tanıtmaktadır. MongoDB’de her kayıt, aslında bir dökümandır. Dökümanlar MongoDB’de JSON benzeri Binary JSON(BSN) formatında saklanır. BSON belgeleri, sakladıkları elemanların sıralı bir listesini içerir nesnelerdir. Her bir eleman, bir alan adı ve belirli tipte bir değerden oluşur.

MongoDB’ye ait kavramlarla, RDBMS sistemlerde var olan SQL’e ait kavramların karşılaştırılması tabloda yapılmıştır.



RDBMS
MongoDB
Database
Database
Table
Collection
Row
Document ya da BSON Document
Column
Field
Index
Index
Table Joins
Embedded Documents ve Linking
Primary Key
Specify Any Unique Column ya da Column Combination as Primary Key
Primary Key In MongoDB
The Primary Key is Automatically Set to the _id Field
Aggregation (group by)
Aggregation Framework
Framework Mapping Chart




Neden MongoDB Kullanılmalı?
MongoDB, kendisini diğer NoSQL çözümlerinden ayıran ve öne çıkaran önemli avantajlara sahiptir. Bunlardan bazıları:
  • Sorgu(Query) Desteği: Pek çok NoSQL çözümü veriye sadece anahtarlar üzerinden erişme olanağı sağlarken, MongoDB istenilen alanlar ve belirli aralıklara göre, ayrıca düzenli ifadelerle(regular expression) de sorgulama imkanı sağlamaktadır.
  • İkincil(Secondary) Index Desteği: İstenilen alanlara göre sorgulama yanı sıra, bu alanları ikincil indeks olarak tanımlayabilmek, veriye daha performanslı erişim imkanı sağlamaktadır.
  • Master/Slave Replication Desteği: Yazma ve okuma işlemlerini ayrı sunuculara yönlendirebilme, ana sunucu erişilemez olduğunda bir köle sunucuyu ana sunucu olarak çalıştırabilme kuşkusuz çok önemli bir artı değer sağlamaktadır.
  • Sharding Desteği: Büyük ölçekli verilerin sunucular arasında paylaştırılması özelliği de MongoDB’yi benzerlerinden artı değerler sağlamaktadır.
  • MapReduce Desteği
  • Sürücü(Driver) Desteği


MongoDB Compass 100 Yıllık Hava Rapor Veri Simülasyonu









Bir sonraki yazımda görüşmek üzere...



sentiment_satisfied Emoticon