NoSql Çözümler Arasında MongoDB
Mehmet Yıldırım
15.03.2016 16:30
Veritabanı dünyasında, MongoDb'nin tam olarak nerede yer aldığını ve kısaca ne olduğunu inceleyeceğiz. Profesyonel bir şekilde verileri saklama yöntemi olarak kullanılan 2 sistem var;
1. 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 birbirine bağlı olabilirler. Bu sisteme sahip tüm veritabanları, bu linkte Oracle(1472), MySql(1347), MSSQL Server(1136), PostgreSql(299)... şeklinde skorsal olarak listelenmiştir.
RDBMS veritabanlarından olan MSSQL Server'ın arayüzü ;
Database Snapshot ve Security arasında kalanlar veritabanları olup herhangi birini açtığınızda içinde diyagram, tablo, view, sp ve trigger, kullanıcı kayıtları ve güvenlik yapısı yönetimi gibi sekmeleri görülür. Sağdaki Query ekranında ise yazdığınız query'ler sonucu dönen değerler (altta) görülür.
2. İliş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ı, MongoDb(305), Couchbase(25), CouchDb(23), Amazon(22)... olarak 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ı Neo4j(32), OrientDb(6), Titan(5)... şeklinde sıralanmıştır.
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 nodelara bakılıp cevap verme yönünde işleyeceğinden yine bir zaman kaybına neden olabilir. Fakat Performansı seçtiğinizde nodelardan 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.