MongoDB, doküman tabanlı, C++ ile geliştirilen bir NoSql veritabanıdır. Veriler BinaryJson türünde dokümanlarda tutulur.
- MongoDB’nin en önemli özelliği, ilişkisel modeli (relational model) kullanmamasıdır.
- Tablo yoktur, tasarım yoktur, ilişki yoktur.
- Windows, Linux, Mac, Solaris.
- Açık kaynak kodlu
- Dinamik veri yapısı
- Ucuz , Hızlı
- Hızlı okuma ve yazma
- Büyük veri ile çalışabilme
- Belgeye dayalı modelde, ilişkisel modelin “satır” (row) kavramı yerine, çok daha esnek bir yapı olan “belge” (document) kavramı kullanılmaktadır. Gömülü belgelere (embedded documents) ve dizilere (arrays) müsaade edilmesi ile, çok karmaşık hiyerarşik yapıları tek bir kayıt (record) içinde saklamak olanaklı hale gelmiştir.
- MongoDB, basit fakat çok güçlü JavaScript kabuğu (shell) kullanır ve bunun yardımı ile veri tabanlarının işlenmesi çok daha etkin hale gelir.
mongoDB Nerede Kullanılabilir
- Bloglar (Post, Comment, Like)
- Üye Bilgileri (Kullanici > Kullanici Detayları)
- Log datası saklamak
- Coğrafi bilgi saklamak
- Zaman içinde yapısı değişecek uygulamalar
- Big data projeleri
- Çoklu sunucu gerektirebilecek dağıtık projeler
mongoDB Kurulum, Servisi Çalıştırmak, Robomongo Stüdyo Kurulumu
www.mongodb.com sitesinden Downloads menüsünden güncel halini indirebilirsiniz.
Kurulumu oldukça basit. Kurulum anında Custom seçeneği ile C:\MongoDB klasörüne kurulması daha sonra CMD üzerinden klasöre erişim açısından kolaylık sağlayacaktır.
Kurulumdan sonra C:\MongoDB altında Data klasörü açıyoruz. Yoksa hata verebilir.
C:\MongoDB bin altında Mongod.exe ve Mongo.exe adında 2 adet dosya bulunmaktadır. Mongod.exe esas servis ve veritabanı işlemlerini sağlamaktadır. Mongo.exe ise bir Shell uygulaması. Buraya script yazarak veritabanı oluşturabiliriz, kayıt ekleme, silme gibi işlemler yapabiliriz. Fakat bunları cmd penceresinden çalıştırmamız gerekiyor.
Mongo Servisi Çalıştırmak
Komut penceresi açıyoruz (Başlat/Çalıştır/cmd) ve aşağıdaki komutları yazıyoruz:
Cd C:\MongoDB\bin mongod.exe --dbpath "c:\MongoDB\Data"
Mongod.exe için esas servis demiştik. Servisimiz çalıştığına göre artık veritabanı kodlarımızı yazabiliriz.
1.Komut satırını kapatmadan 2. CMD penceresini açıyoruz ve aşağıdaki kodları yazıyoruz:
cd c:\mongodb\bin mongo.exe show dbs use Test db.Kullanici.insert({Ad:"Yunus", Sehir:"Elazig"}) show collections db.Kullanici.find()
Bu kodda ise mongo.exe’ yi çalıştırdık ve “Test” adında bir veritabanı oluşturduk. Ve “Kullanici” koleksiyonuna 1 kayıt ekleyerek listeledik.
Peki ama biz hep bu siyah konsoldan mı veritabanımızı yöneticez. Yani bunun bir görsel sütüdyosu yok mu? dediğinizi duyar gibiyim 🙂
Var tabi. Robomongo bunlardan bir tanesi.
- Robomongo görsel bir Mongodb stüdyosudur.
- Ücretsiz ve açıkkaynak.
- Basit ve kullanışlı
- https://robomongo.org/ adresinden kurulum sağlanabilir.
Microsoft Servis Oluşturmak
robomongodan artık veritabanı sorgularımızı yazabiliriz. Fakat robomongonun çalışması için servisimizin(Mongod.exe) çalışır durumda olması gerekiyor. Bunun için ister yukarıdaki 1. komut penceresinde yaptığımız işlemleri yapın. ister microsoft service oluşturarak bunu otomatikleştirin.
Her seferinde cmd den uğraşmamak için MS servis oluşturarak otomatik çalışmasını sağlayabiliriz. Şimdi CMD penceresi yönetici modunda açalım ve sırasıyla aşağıdaki komutları çalıştıralım
cd C:\MongoDB\bin mongod --install --logpath=C:\MongoDB\bin\mongodb.log --dbpath=C:\MongoDB\data\
Şimdi görev yöneticisinden hizmetler sekmesinde Mongo servisini görebiliriz. Bunu başlatıyoruz ve robomongo stüdyoyu açıyoruz.
Robomongo oldukça kullanışlı ve kolay bir editördür. Sol kısımda server, veritabanı, koleksiyonlar alt alta dallanmış durumda. Burada admin bizim veritabanı adımız, test ise koleksiyonumuzun adı. sorgumuzu orta üst kısma yazıyoruz. db.test.find() komutu ile test koleksiyonumuzdaki verileri listeliyoruz. Veriler JSON formatında alt kısımda gözüküyor. toplam 1 kayıt var ve 3 field (sütun) mevcut. _id field’ini mongoDB otomatik oluşturur.
mongoDB de esnek tablo yapısı vardır. Yani 1. kayıtta 3 sütun varken 2. kayıtta 5 sütun olabilir. klasik Mssql deki gibi bir tablo şablonuna gerek yoktur.
mongoDB nin en sevdiğim özelliklerinden biri ise Javascript kodlarını çalıştırmasıdır. üst kısımdaki kod alanına bir javascript function’ u oluşturup istediğiniz şartlarda, formatta veri çekebilirsiniz.
mongoDB ile temel kodlama
Temel İşlemler
use db_adi //db_adi adında bir veritabanı varsa erişim sağla. Yoksa yeni oluştur. show dbs //Sistemdeki veritabanlarını listele db.dropDatabase() //mevcut veritabanını sil db.createCollection("pers") //pers adında bir koleksiyon oluştur db.pers.drop() //pers adındaki koleksiyonu sil
Döküman Ekleme
person koleksiyonuna json formatında 2 adet kayıt ekliyoruz.
Var kayit = [{ "sicil": 2345, "ad": "ayse okan", "maas": 3000 }, { "sicil": 1234, "ad": "mahmut sarı", "maas": 5000 }]; db.person.insert(kayit)
Verileri Sorgulamak
//Tümünü listele db.person.find() //sicil=1234 olan kaydı listele db.person.find({"sicil":1234}) //Maaşı 4000e eşit ve daha küçük olan kayıtları listele db.person.find({"maas":{$lte:4000}}) //adı mahmut aslan olmayan kayıtları listele db.person.find({"ad":{$ne:"mahmut aslan"}}) //maaşı 4000 den küçük ve 1000 den büyük olan kayıtları listele db.person.find({$and:[{"maas":{$lt:4000}}, {"maas":{$gt:1000}}]}) //sicil 1234 olan veya maaşı 3000 den büyük olan kayıtları listele db.person.find({$or:[{"sicil":"1234"},{"maas":{$gt:3000}}]}) //ilk 2 kaydı listele db.person.find().limit(2) //tümünü listele, ada göre sırala (A dan Z ye) db.person.find().sort({"ad":1}) //tümünü listele, ada göre sırala (Z den A ya) db.person.find().sort({"ad":-1})
Update ve Delete
db.person.update({"ad":"mahmut aslan"} ,{$set:{‘maas':5500}}) //ad=mahmut aslan olan kaydın maaşını 5500 yap db.person.remove({"sicil":"1234"}) //Sicil=1234 olan kaydı sil db.person.remove("",0) //Tümünü Sil
Bunun yanında istediğiniz javascript kodunu yazarak kendinize özgü fonksiyonlar oluşturabilirsiniz. mongoDB javascript kodlarını çalıştırabilmektedir.
Tüm bu bilgileri ve daha fazlasını içeren bir slayt hazırladım. Slayt konuları:
- NO SQL (Not Only SQL) Nedir ?
- NO SQL Avantajları ve Dezavantajları Nelerdir
- İlişkisel Veri Modelleri ile Farkları Nelerdir ?
- Performans Karşılaştırmaları
- Hangi Projelerde Kullanılabilir ?
- Kimler Kullanıyor ?
- mongoDB Nedir ?
- mongoDB Kurulumu
- Robomongo Kurulumu
- Servisi Çalıştırmak
- mongoDB Dokuman yapısı ve kodlama
- Verileri sorgulamak
- CRUD işlemleri
- Indexler
- Replica Set Kavramı Nedir?
- Sharding Kavramı Nedir ?
- C# ile mongoDB uygulaması
Hazırladığım slayta aşağıdaki github adresinden erişebilirsiniz.
Slayt Github Linki