MongoDB ilişkisel olmayan, NoSql (Not Only SQL) kavramı üzerine C++ ile geliştirilmiş, açık kaynak kodlu bir veritabanıdır. Geleneksel RDBMS (Relational Database Management System) veritabanlarının hantal geldiği uygulamalarda ya da uygulamanın bazı modüllerinde tercih edilir.
Yüksek hacimli depolamar yapılacağı zaman MongoDb doğru tercih olabilir. Bazı projelerinizde aktivite logları tutmak isteyebilirsiniz ya da analiz yapmak için yığın verilere ihtiyaç duyabilirsiniz. Cache, yorum, etiketleme vs. gibi yığın veriler tutma ihtiyacınızı MongoDB ile pratik bir şekilde sağlayabilir ve mevcut RDBMS veritabanınızın (MySQL, vs.) şişmesinin önüne geçebilirsiniz.
Sıradan uygulamalarda MySQL ile MongoDB arasında yüksek performans farkı olmayabilir; fakat büyük ölçekli çalışmalarda MySQL’de yığın oluşmasını ve hantallaşmanın önüne geçeceğiniz kesin. MySQL’de bir tablo 5-10 GB büyüklüğe ulaştığında artık performans konusunu tekrar gözden geçirmeniz gerekecektir. Bu noktada MongoDB imdada yetişir. Bu hantallaşmanın önüne geçmek için yığın verileri MongoDB’ye yıkabilirsiniz. (Aynı projede hem MySQL hem de MongoDB veritabanlarını birlikte kullanabilirsiniz.)
MongoDB döküman tabanlıdır. MySQL’deki tabloların karşılığı olarak MongoDB’de collection (koleksiyon) vardır. Bu collection’larda veriler JSON objelerine çok benzeyen bir yapıda tutulur.
1 2 3 4 5 6 7 8 9 10 11 12 |
Ör: { "baslik": "Abc Üniversitesi" "adres": { "koordinat": [ 29.856077, 41.848447 ], "cadde": "Florya Cad.", "sokak": "1024 Sk.", "posta_kodu": "1453" }, } |
MacOS MongoDB Kurulumu
Sırasıyla aşağıdaki komutları çalıştırın:
1 2 3 4 5 6 7 8 9 10 11 |
# Homebrew paket yöneticisinin update edelim brew update # Homebrew'e MongoDB yükleme komutu verelim brew install mongodb # root dizininde /data/db dizini oluşturalım (Yönetici olarak) sudo mkdir /data/db # MongoDB ile işlem yapacak olan kullanıcıya izin verelim (Kullanıcı adınızı öğrenmek için "whoami" komutu çalıştırabilirsiniz) sudo chown username /data/db |
MongoDB’yi Başlatma ve Mongo Shell
1 2 3 4 5 |
# MongoDB'yi başlatıyoruz. mongod # Mongo Shell'e giriş yapıyoruz. mongo |
Mongo Shell’de Bazı İşlevler
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
# Yardım Menüsü help > help db.help() help on db methods db.mycoll.help() help on collection methods sh.help() sharding helpers rs.help() replica set helpers help admin administrative help help connect connecting to a db help help keys key shortcuts help misc misc things to know help mr mapreduce show dbs show database names show collections show collections in current database show users show users in current database show profile show most recent system.profile entries with time >= 1ms show logs show the accessible logger names show log [name] prints out the last segment of log in memory, 'global' is default use <db_name> set current database db.foo.find() list objects in collection foo db.foo.find( { a : 1 } ) list objects in foo where a == 1 it result of the last line evaluated; use to further iterate DBQuery.shellBatchSize = x set default number of items to display on shell exit quit the mongo shell # Veritabanı Seçme use db_adi Not: MySQL'e kıyasla olmayan bir veritabanını oluşturmak için "create" komutu kullanmanıza gerek kalmadan; "use db_adi" komutu verdiğinizde MongoDB sizin adınıza o veritabanını oluşturur ve kullanıma alır # Collection'a İlk Kayıt db.kullanicilar.insert( {'Ad':'Buğra', 'Soyad':'Yüksel'} ) # Collection'dan Tek Veri Çekme db.kullanicilar.find() # Collection'dan Spesifik Bir Veri Çekme db.kullanicilar.find( {'Ad':'Buğra'} ) # Collection'dan Çektiğimiz Veriyi Pretty Olarak Yazdırma db.kullanicilar.find().pretty() |
Genel Notlar
- Collection’daki veriler döküman tabanlı olduğu için standart bir field yapısı yoktur. Bir satırdaki veri ile diğer satırdaki verinin field’ları farklılık gösterebilir. Kurgu tamamen size aittir.
- “mongod” servisinin çalıştırırken –rest komutu ile çalıştırırsanız (“mongod –rest“), http://127.0.0.1:28017/ URL’sinden MongoDB RESTful arayüzüne erişebilirsiniz. Bu arayüzden çeşitli REST komutları ile MongoDB sunucusu ve veritabanlarınız ile ilgili her şeye erişebilirsiniz (Sunucu durumu, veritabanlarını listele, collectionları listele, satırları göster vs.)
- MongoDB’nin default’da gelen bir phpMyAdmin tarzı arayüzü yoktur; fakat çok sayıda açık kaynak kodlu Admin UI sunulmuştur. Ör: https://github.com/rsercano/mongoclient
- Tablolarınızdaki index kurgusunu ve güvenlik politikalarını da gözden geçirmenizi tavsiye ediyorum.
Faydalı olması dileklerimle…
Kaynaklar:
Mongo Dökümantasyonu
https://docs.mongodb.org/manual/
Mongo Shell Komutları
https://docs.mongodb.org/manual/mongo/
Mongo ve SQL Karşılaştırması
https://docs.mongodb.org/manual/reference/sql-comparison/