NoSQL Kavramı ve MongoDB

NoSQL Kavramı ve MongoDB

Son yıllarda bilişim dünyasında yükselen yeni bir yıldız olarak adını sıklıkla duymaya başladığımız NoSQL, ilişkisel veritabanı yönetim sistemlerinden(RDBMS – Relational Database Management System) farklı ve alternatif bir yaklaşım olarak ortaya çıkmıştır.

Kavramın ve buna bağlı olarak bu alternatif yaklaşımla geliştirilmiş veritabanlarının ortaya çıkış sebebi, temelde internet üzerinde boyutu her gün artan verinin, yüksek trafiğe sahip sistemlerin ihtiyacına cevap verebilecek hızda okunması/yazılması ihtiyacıdır.

Yatay olarak ölçeklendirilebilen NoSQL sistemlerle, RDBMS sistemler arasında temel farklar bulunmaktadır.

 

  • RDBMS sistemler transaction bazlıdır ve ACID kurallarına sahiptir. NoSQL sistemler ACID kurallarını bütünüyle desteklemez, pekçok NoSQL sistemde transaction kavramı da yoktur.
  • RDBMS sistemlerde veriler sabit tanımlı tablo ve sütunlarda bulunur. NoSQL sistemler sabit tablo ve sütunlara bağımlı değildir.
  • NoSQL sistemlerde SQL sorgu dili kullanılmaz.
  • RDBMS sistemlerde verilerin tekil anahtarlarla(primary key) birbirinden ayrılması zorunlu değildir. NoSQL sistemler ise veriye tekil anahtarlar üzerinden erişir.

 

RDBMS sistemlere kıyasla var olan farklara değinmişken, NoSQL sistemlerin kendi aralarında kabaca döküman tabanlıkey/value tabanlı ve grafik tabanlı olarak üç gurupta toplandığını ve her bir gurubun, veri tutarlılığı ve veriye erişim stratejileri arasında farklılıklar bulunduğunu da belirtmek isterim.

 

MongoDB

Bugün piyasada pekçok NoSQL çözümü bulunmaktadır. Bu çözümler içinde, geliştirimine 10genfirması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 bize kendisini, 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.

Bu noktada MongoDB’ye ait kavramlarla, alışılagelmiş RDBMS sistemlerde var olan SQL’e ait kavramların eşleşme tablosuna bakmak faydalı olacaktır.

SQL  MongoDB 
database database
table collection
row document or BSON document
column field
index index
table joins embedded documents and linking
primary key
Specify any unique column or column combination as primary key.
primary key
In MongoDB, the primary key is automatically set to the _id field.
aggregation (e.g. group by) aggregation framework
See the SQL to Aggregation Framework Mapping Chart.

http://docs.mongodb.org/manual/reference/sql-comparison/mongodb

Neden MongoDB?

MongoDB, kendisini diğer NoSQL çözümlerinden ayıran ve öne çıkaran önemli artılara sahiptir. Bunlar arasında

  • Sorgu(query) desteği. Pekçok NoSQL çözümü veriye sadece anahtarlar(key) üzerinden erişme olanağı sağlarken, MongoDB istenilen alanlar ve belirli aralıklara(range query) göre, ayrıca düzenli ifadelerle(regular expression) de sorgulama imkanı sunuyor.
  • İkincil(secondary) index desteği. İstenilen alanlara göre sorgulama yanı sıra, bu alanları secondary index olarak tanımlayabilmek, veriye daha performanslı erişim imkanı sağlıyor.
  • Master-Slave Replication desteği. Yazma ve okuma işlemlerini ayrı sunuculara yönlendirebilme, master sunucu erişilemez olduğunda bir slave sunucuyu master sunucu olarak çalıştırabilme kuşkusuz çok önemli bir artı değer.
  • Sharding desteği. Büyük ölçekli verilerin sunucular arasında paylaştırılması özelliği de MongoDB’yi benzerlerinden ayıran, artı değerlerden birisi.
  • MapReduce desteği.
  • Pekçok yazılım dili için sürücü(driver) desteği

en başta sayılabilir.

MongoDB dökümantasyonu, kullandığınız platforma MongoDB’yi nasıl kurabileceğinize dair yeterli bilgiyi sunmaktadır. Nasip olursa bir sonraki makalede, MongoDB üzerinde CRUD operasyonları ve sorgulama işlemlerini nasıl gerçekleştirebileceğimizi ele alacağız.