Merhabalar,
not:yazıyı 2 yıl önce hazırlamışım ve paylaşmamışım,ziyan olmasın araştırma emeği diyerek paylaşıyorum.
Bu yazımızda amacımız veritabanı yazılımlarında MongoDb’nin tam olarak nerede yer aldığını gösterilmek ve kısaca ne olduğunu anlatabilmek olacak.Bilindiği üzere profesyonel bir şekilde verileri saklama yöntemi olarak kullanılan 2 sistem var ;
1.cisi RDBMS (Relational Database Management System) olarak bilinen ilişkisel veri tabanı yönetim sistemidir.Bu sistemde veriler tablolar halinde tutulur ve tablolar kendi aralarında ilişkisel olarak bağlı olabilirler.Bu sistemi sahip tüm veritabanları bu linkte Oracle(1472)-MySql(1347)-Ms SQL Server(1136)-PostgreSql(299) ….. şeklinde skorsal olarak listelenmiştir.

RDBMS veritabanlarından olan Ms SQL Server’ın arayüzü ;
Database Snapshot ve Security arasında kalanlar veritabanları olup herhangi birini açtığınızda içinde diyagram,tablo,view ler,sp ve trigger lar,kullanıcı kayıtları ve güvenlik yapısı yönetimi gibi sekmeleri görüyor olacaksınız.Sağdaki Query ekranında ise yazdığınız query’ler sonucu dönen değerleri (altta) görüyor olacaksınız.
2.cisi ise ilişkisel olmayan veritabanı sistemleridir.Bu sistemden ilk olarak 1998 yılında Carlo Strozzi’nin tasarımı ile bahsedilmeye başlanmış ve 2009 yılında Atlanta’da yapılan ilişkisel olmayan veritabanları konferansıyla “ilişkisel olmayan” terimi ile netlik kazanmıştır.
Yatay olarak ölçekledirilen veri depolama sistemi olan NoSql kavramı ile alışılmış olan rdbms ‘in birbirini bağlayan tablolar arasındaki hiyerarşiyi de kaldırmayı amaçlar.Böylece tablolarda kullanmamız gereken ek bir alan olduğunda tablonun tamamını alıp ek sütun ekleyip tekrar şemaya dahil etme vs gibi konulardan bağımsız hale gelip,yapılması gerekenin sadece istenilen koleksiyona istenilen dökümana ve istenilen object’lere istediğiniz alanı insert etmeyi amaçlamasıdır.
İlişkisel olmayan veritabanları da kendi aralarında yapılışlarına göre sınıflandırılırlar;
- Döküman bazlı veritabanları ; Nesnelerin field’larına yani satırlarına birer id vererek dökümanları saklama yöntemini kullanan NoSql veritabanlarıdır.Verilerini Json yada Xml formatında tutup onlara erişmek için id kullanırız.
İlişkisele göre düşünecek olursak bu veritabanlarında hem ek satır olarak (object) hem de ek sütun olarak (fields) veri eklemeye devam edebilirsiniz.İlişkiselde ise ek satır olarak veri eklemeye devam edebilir fakat ek sütun eklemek için yapıda birkaç değişiklik yaptıktan sonra (ki büyük veritabanlarını düşününce maliyet hesabı yapılır) açılan ek sütunlara da veri girilmeye devam edilebilir.

Döküman tabanlı veritabanlarının kullanım oranları da yine şu linkte MongoDb(305),Couchbase(25),CouchDb(23),Amazon(22) … şeklinde sıralanmıştır.

- Çizelge bazlı veritabanları ; Ağ türü veriler için çizge (graph) türü veritabanları kullanılır. Bunlar nesneleri bir düğüm olarak tanımlar ve her düğüm arasında bir veya daha çok çizgi (yani ilişki) kurulur.Yapısı bakımından daha çok NoSql-RDBMS karışımı olarakta görülebilir.Bu türdeki veritabanlarının kullanım oranları şu linkte Neo4j(32),OrientDb(6),Titan(5) ..şeklinde gösterilmiştir.

Sosyal ağlar için kullanılan bu uygulamalar rdbms’tekiler gibi hem ilişkisel nosql’dekiler gibi de veriyi alt alta kümeleyebilme özelliğini içinde barındırır.Örneğin Neo4j de ki verilerin bağlantısı şu şekilde gösterilmiştir ;

Alice ve Bob isminde 2 veri var.Bunlar birbirlerini 2001 de eklemiş ve bu ekleme tarihlerine de id verilmiş.Aynı zamanda Chess Group’una 2005 te üye olan Alice’e başka bir id,yine Chess düğümünde başka bir id verilmiştir.Bob’da yine aynı şekilde 2011 de kayıt olup ayrı ayrı id verilmiştir.Bu şekilde takip ettiğim yada beğendiğim grupları beğenen arkadaşları görebilmemizi sağlayan bir yapı sunmaktadır.Java ile yazılmış olan program “cypher” isminde query dilini kullanmaktadır.
- Sütun bazlı veritabanları;Verileri satır satır tutmak yerine büyük sütunlar halinde tutan veritabanı türlerine Wide Column Store (Geniş Sütun Veritabanı) adı verilmektedir.Özellikle birçok farklı sunucuda tutulan verileri yatay olarak ölçeklemekte kullanılır.
Bu veritabanlarının kullanılma oranları şu linkte Cassandra(130),Hbase(52)..şeklinde gösterilmiştir.

Cassandra twitter ve reddit in kullandığı bir veritabanıdır.NoSql veritabanlarında tutarlılıktan çok performans önemli kılınmıştır fakat Cassandra da kurulum esnasında size tutarlılık mı performans mı şeklinde sorup kuruluma devam etmeniz önerilmektedir. Tutarlılığı seçtiğinizde gelen request ile tüm nodelarda güncelleme yapılır.Bu da node sayısına bağlı olarak sistemin performansına etki edebilmektedir.Veri okunurken de yine tüm node lar a bakılıp cevap verme yönünde işleyeceğinden yine bir zaman kaybına neden olabilir.Fakat Performansı seçtiğinizde node lardan birinden aldığı veriyle diğerlerine uğramadan size cevap döndürür.
- Anahtar-Değer bazlı veritabanları ; Verileri bir anahtarla saklandığı ve gerektiğinde yine o anahtarla erişildiği veritabanlarına Key-Value Store adı verilmektedir.Verilen key lerin hangi value ları göstermesi şeklinde bir yapısı vardır.Hash algoritmaları kullanılarak value lara erişim sağlanır.Böylece değişken uzunluklu veri kümelerini sabit uzunluklu veri kümelerine haritalayarak işlemlerini gerçekleştirir. Bu tür veritabanları içerdikleri bilginin yapısını, yani şemayı tutmazlar. Girilen verinin doğruluğu ve geçerliliği veritabanı değil onu kullanan uygulamaca sağlanır.
DB-Engine verilerine göre en çok kullanılan veri tabanları da burada Redis (106),Memcached(29),Amazon DynamoDb(22) ..şeklinde listelenmiştir.

Redis bu tip sistemler içinde en çok kullanılan veritabanıdır.Verilerini ram ‘de tutarak bu bakımdan rdbms’dekilerin disk ‘te tutmasından da ayrılır.Redis genellikle veri yapıları sunucusu olarak adlandırılır.Bunun nedeni de Redis’in, TCP soketleri ve basit bir protokol ile bir sunucu-istemci modeli kullanılarak gönderilen komutları bir dizi aracılığıyla değiştirilebilir veri yapılarına erişim sağlayabiliyor olmasıdır.
En çok kullanılan NoSql veritabanlarından kısaca bahsetmiş olduk.Bir sonraki makale de MongoDb nin kurulum aşamaları ve küçük bir demo ile konuyu özetlemeye devam edeceğiz.