16 Kasım 2015

NoSQL ve MongoDB

Merhaba,
Bugünkü yazımda NoSQL’den ve MongoDB’den bahsedeceğim.

Konuyu;

1. NoSQL
2. MongoDB
başlıkları altında anlatacağım.


1. NoSQL
NoSQL; Not Only SQL’in kısaltmasıdır. İlişkisel veritabanı sistemlerine alternatif bir çözüm olarak ortaya çıkan, yatay olarak ölçeklendirilen bir veri depolama sistemidir.


İlişkisel veritabanlarında verilerimizi tabloların altındaki sütunlarda saklar ve sütunlar arasında ilişki kurarız. Sorgu sırasında ihtiyaca göre tablolarımızı diğer tablolarımızla joinleriz. NoSQL’de ise verilerimiz sütunlarda değil, json ya da xml formatında dokümanlar halinde tutulurlar. sahibinden.com’u düşünelim. Binlerce çeşit ürün, her bir ürünün özellikleri, kategoriler, alt kategoriler vs. var. Yeni bir alt kategori eklemek istediğimizde ilişkisel veritabanında bunu yeni bir tablo ekleyip sütunlarını oluşturarak sağlarız ve bu durumda tablolarımız arasındaki ilişkiyi yeniden dizayn etmemiz gerekir. Bu küçük işlemi gerçekleştirmek tüm sistemi tekrardan ele almayı gerektirdiği için çok maliyetlidir. NoSQL’de ise bu kategoriyi json ya da xml formatında doküman ekleyerek sağlıyoruz, NoSQL bizim yerimize alanı oluşturuyor ve değeri kaydediyor.

Ayrıca Insert, Update, Delete gibi DML işlemler esnasında ilişkisel modelin kontrol mekanizmalarının çoğundan arındırıldığı için oldukça ciddi bir performans sağlamakta. Google, Facebook, Amazon gibi milyarlarca insana hizmet veren siteler bu sistemi kullanıyorlar.

NoSQL veritabanlarının çeşitleri:

1. Doküman (Document) Tabanlı: Bu sistemlerde bir kayıt doküman olarak isimlendirilir. Dokümanlar genelde json formatında tutulur. Bu dokümanların içerisinde sınırsız alan oluşturulabilir. MongoDB, CouchDB, HBase, Cassandra ve Amazon SimpleDB bunlara örnektir.

2. Anahtar/Değer (Key/Value) Tabanlı: Bu sistemlerde anahtara karşılık gelen tek bir bilgi bulunur. Yani kolon kavramı yoktur. Azure Table Storage, MemcacheDB ve BerkeleyDB bunlara örnektir.

3. Grafik (Graph) Tabanlı: Diğerlerinden farklı olarak verilerin arasındaki ilişkiyi de tutan, Graph theroy modelindeki sistemlerdir. Neo4J, FlockDB bunlara örnektir.

Facebook bu yapılardan Cassandra’yı, Twitter FlockDB’yi, Google BigTable’ı kullanır.

Önemli özellikleri:
Scaling ve Sharding: Aynı veri birden çok lokasyonda bulunuyor. Master-slave mantığıyla çalıştığı için sunucu makinenin arızalanması durumda başka makine master olarak atanıyor. Google startup döneminde bunu düşünmüş ve 10.000$’lık sunucular almak yerine 500$’lık ucuz makineler satın almış. Makinelerden biri göçse bile sistem çalışmaya devam ediyor; çünkü her kaydın 3-5 ayrı sunucuda kopyası bulunmakta.  

Fire&Forget: NoSQL’de veriyi veritabanına göndeririz; fakat yazıp yazmadığı hakkında bilgi beklemeyiz. İlişkisel veritabanını düşünelim; bir transaction içerisinde sorgu yaptığımızda, başka bir transaction içerisinde update işlemi gerçekleşiyorsa sorgu sonucunu alabilmemiz için diğer transaction’ın commit ya da rollback ile kapatılmasını bekleriz. Fakat NoSQL’de böyle bir durum söz konusu değil. Dolayısıyla bankacılık uygulamaları gibi transaction işlemlerinin çokça önemli olduğu ve verinin kritik olduğu durumlarda NoSQL tercih edilmez.  


NoSQL veritabanlarından en popüler olanı MongoDB.

2. MongoDB
MongoDB ilişkisel veritabanlarındaki Big Data problemine çözüm olarak geliştirildi. C++ dili ile geliştirildi ve bilinen birçok işletim sistemi üzerinde çalışmakta: Windows, Linux, Unix, MacOS.

MongoDB, özellikle hız gerektiren ve geleneksel ilişkisel veritabanlarının yavaş kaldığı yapılarda kullanılmaktadır. Yüksek hacimli veri setlerinde, web içerik yönetim sistemlerinde, web yorum/etiket saklamak için kullanılır.

Özellikleri:
- Doküman tabanlı veritabanıdır. Veriler json doküman yapısında ve hiyerarşik olarak saklanır. Büyük ölçekli uygulamalar için tasarlanmıştır.
- NoSQL’in genel özelliklerini taşır: Row, Schema, Table, Relation içermez. Tablo yerine ‘Collection’lar kullanılır. Veriler dinamik bir yapıda olduğu için şema kullanılmaz bunun yerine verinin içinde nesneler, diziler, nesne dizileri girilir.Veriler ‘document’ olarak isimlendirilir.
- Dokümanın her özelliğine göre ve anahtarına (key) göre indeksleme yapar.
- Doküman tabanlı oldukça kompleks sorgular yazmak mümkündür.


Kaynaklar

  • http://www.ermantaylan.com/blog/2011/07/nosql-nedir-ne-zaman-kullanilmali-nasil-calisiyor/
  • http://www.hanci.org/nosql-dersleri/nosql-ve-mongodb-nedir.html
  • http://kodcu.com/2014/03/nosql-nedir-avantajlari-ve-dezavantajlari-hakkinda-bilgi/
  • http://www.academia.edu/8002383/MongoDB
  • http://ramazankorkmaz.com/nosql-veritabanlari/134
  • http://omernuricam.blogspot.com.tr/2013/02/nosql-nedir.html
  • https://tr.wikipedia.org/wiki/MongoDB 
  • http://www.nodejstr.com/2012/08/mongo-db-nedir-mongodb-windows-kurulumu.html 
  • http://yazilimportal.com/mongodb/
  • https://eksisozluk.com/mongodb--2220035?p=1


Share:

0 yorum:

Yorum Gönder

Pages

Blog Archive