MongoDB Nedir? .Net Framework ile Nasıl Kullanılır?

  • 25.03.2016
  • M.Tayyip Yetiş
  • MongoDB

mongodbMerhaba arkadaşlar bu makalede çok ilgimi çeken yeni bir veritabanı sisteminden bahsedeceğim. Bu konuda daha fazla makale yazmayı planlıyorum ve bu ilk makalede NoSQL nedir ? ne işe yarar ? .Net Framework ile hangi NoSQL veritabanı sistemi kullanılabilir ve MongoDB ile .Net bağlantısı nasıl kurulur bunlardan bahsedeceğim.

Öncelikle kişisel olarak son zamanlarda veritabanı sistemlerine karşı aşırı bir araştırma içerisinde olduğumu söyleyeyim. İlişkisel veritabanlarının yetersizliğini ilk olarak çalıştığım şirkette farkettim büyük miktarda verileri çekmek için yazdığım karmaşık SQL sorguları bazen onlarca saniye hatta dakikalar sürüyordu. Yüzlerce kişinin ziyaret ettiği bir sitede her İstek(Request) için bu sorguların her defasında çalıştığını düşünmek elbette korkutucu bu konuda Cache sistemlerini kullanmak bir seviyede mantıklı ama bazı yerlerde her istek için sonuçların canlı olarak getirilmesi gerekiyor ve bu durum SQL ile büyük bir çekişme yaşamama sebep oluyordu. Bu noktada daha hızlı bir veritabanı var mı diye araştırmaya başladım çünkü bu denli veriler de bile çok yavaş çalışan bir veritabanı çok daha fazla örneğin bir kaç milyonluk kayıtlarda aşırı hantal bir sistem meydana getirecektir. Araştırmalarım sonucu NoSql ile karşılaştım. Bu veritabanı sistemi için aslında RDMS(Relational Database Management System) yani İlişkisel veritabanı sistemleri için bir alternatif denemez çünkü üretim ve kullanım amaçları birbirinden farklıdır.

NoSQL sistemler genelde BigData ile uğraşan ve hergün milyonlarca veri üreten şirketler tarafından kullanılır zaten çoğu nosql sistemi de Google, Amazon, Facebook vb. şirketler tarafından üretilmiştir. Genelde sadece verileri kaydetmek ve geri sorgulamak için kullanılır yani birden fazla veri arasında ilişki kurma, gruplama sıralama gibi özellikleri rdms kadar gelişmiş değildir. örneğin bir bir site indexleme yazılımı için sitelerin isim, url, içerik gibi bilgilerini bu sistemler ile çok hızlı bir şekilde depolayabilir ve sorgulayabilirsiniz fakat örneğin bir CRM sistemi için şirket muhabesi tutan bir yazılımı tamamen NoSQL ile yapmak rdms'lere göre daha sıkıntılıdır çünkü üretim amaçları bu değildir. Fakat eğer iyi bir sistem yazabilirseniz bir NoSQL ile bir RDMS veritabanını entegre çalıştırabilir ve her birinin ayrı ayrı verdiği performanstan daha fazlasını alabilirsiniz. 

Bazı NoSQL veritabanları için; CouchDB, MongoDB, DynamoDB, Cassandra, Redis, Memcached, BigTable vb. örneklerini verebilirim. NoSQL sistemlerini aşağıdaki gibi sınıflandırabiliriz.

  1. Doküman (Document) Tabanlı: Bu sistemlerde bir kayıt doküman olarak isimlendirilir. Dokümanlargenelde 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 Berkeley DB bunlara örnektir.
  3. Grafik (Graph) Tabanlı: Diğerlerinden farklı olarak verilerin arasındaki ilişkiyi de tutan, Graph theorymodelindeki sistemlerdir. Neo4J, FlockDB bunlara örnektir.
 Ben hakkında daha çok kaynak bulduğum ve .net ile daha kolay kullanıldığını düşündüğüm MongoDB kullanmayı tercih ettim. MongoDB 10Gen firması tarafından C++ ile geliştirilmiştir ve Windows, Linux ve MacOS üzerinde çalışabilmektedir. Çok kullanılan C#, C++, Java, PHP, Pyton, Perl gibi programlama dilleri ile kullanılabilir. Aşağıda MsSql Server 2008 ile MongoDB performans karşılaştırmasını görebilirsiniz.
 
mongodb

MongoDB Kurulumu (Windows)

MongoDB kurulumu oldukça basittir. özellikle SQL Server Management Studio kurulumuna göre çok daha kolaydır. Öncelikle bu linkten https://www.mongodb.org/downloads Windows İnstaller(msi) exe dosyasını indirin

 

 

Kurulumu indirdikten sonra indirdiğim tarihteki ismi mongodb-win32-x86_64-3.2.4-signed.exe olan dosyayı açıp kurulum adımlarını takip edin.

 

 

Next ile bir sonraki adıma geçin

 

 

Complete ile standart kurulumu gerçekleştirin gerekli işlemleri yaptıktan sonra Finish ile kurulumu bitirin. Ardından C dizininde C:/data/db klasörünü oluşturun MongoDB oluşturduğunuz veritabanlarını bu klasör altında saklayacaktır ilerleyen zamanlarda mongo.exe uygulaması ile bu parametreleri nasıl değiştirebileğinizi göstereceğim. sonra C:\Program Files\MongoDB\Server\3.2\bin klasörünü altına gidin. bu klasör altındaki mongod.exe uygulamasını yönetici olarak çalıştırın. aşağıdaki gibi bir görüntü çıkması gerekiyor.

 

 

Buraya kadat olan adımları başarı ile tamamladıysanız artık kodlama kısmına geçebilirsiniz demektir zira MongoDB Server'ımız "Waiting For Connections" yani bağlantı için bekleniyor ibaresiyle hazır olduğunu bize bildiriyor.

C# ile MongoDB Kullanımı

Visual Studio 2012 ile mongodb kullanmak için Project > Manage NuGet Packages yolu ile nuget paket yükleyicisini açıp online sekmesi altında "Mongodb" yazarak MongoDB.Driver paketini yükleyebilirsiniz. gerekli kurulumları yaptıktan sonra aşağıdaki kodlar ile mongodb'de INSERT işlemi yapabilirsiniz.

Kütüphaneleri import edin

using MongoDB.Driver;
using MongoDB.Bson;
using MongoDB.Driver.Core;
using MongoDB.Driver.Builders;
MongoClient client = new MongoClient("mongodb://localhost");
MongoServer server = client.GetServer();
MongoDatabase db = server.GetDatabase("dbtest");
var ogrenciler = db.GetCollection("uyeler");
for (int k = 0; k < 500000; k++)
{
 ogrenciler.Insert(new BsonDocument {{ "numara", k.ToString() }});
}

GetDatabase fonksiyonu ile bir database oluşturuyoruz GetCollection ile bir koleksiyon oluşturuyoruz ve kayıtları ekliyoruz. Kayıtları Sorgulamak için;

örnek class

class deneme {
   public string numara;
}
MongoClient client = new MongoClient("mongodb://localhost");
MongoServer server = client.GetServer();
MongoDatabase db = server.GetDatabase("dbtest");
var ogrenciler = db.GetCollection("uyeler");
IMongoQuery filter = Query<deneme>.Where(c => c.numara != "dsf");
var liste = ogrenciler.Find(filter);
listBox1.Items.Add(liste.Count());

 

Bu makale için işlemlerimiz bu kadar ilerleyen makalelerde daha geniş daha kapsamlı işlemleri de göstermeyi planlıyorum sizler C# ile MongoDB işlemleri için https://docs.mongodb.org/getting-started/csharp/client/ adresini de ziyaret edebilirsiniz. Herkese kolay gelsin.


Kaynak : http://www.academia.edu/8002383/MongoDB

Mustafa Tayyip YETİŞ
Yazılım Geliştirme Uzmanı

Yorum Yap