Php ile MongoDB Kullanımı

MongoDB, 10Gen isimli şirket tarafından geliştirilen NoSQL veritabanıdır. Tamamen ücretsiz ve açık kaynak kodludur. Performans olarak ilişkili veritabanlarından daha hızlı olduğı kanıtlanmıştır. İçeriği önemli olmayan sektörlerde kullanılması tavsiye edilmektedir. Bankacılık veya devlete ait kurumsal bilgilerde kullanılması pek tavsiye edilmemektedir. Anlık olarak çok fazla işlem yapılması gerektiğinde veya önbellek kullanılmak istendiğinde tercih edilebilir. Önemli birçok uygulamada MongoDB kullanıldığı bilinmektedir. Makalemizde aşağıda bulunan maddeler sırasıyla anlatılacaktır:
  1. Php/MongoDB Sürücü Kurulumu (Windows veya Linux sistemler için)
  2. MongoDB Bağlantısı Kurmak
  3. MongoDB ile Kayıtları Listelemek
  4. MongoDB ile Kayıt Eklemek
  5. MongoDB ile Kayıt Güncelemek
  6. MongoDB ile Kayıt Silmek
  7. MongoDB ile Collection Silmek
  8. MongoDB ile Veritabanı Silmek
1. Php/MongoDB Sürücü Kurulumu (Windows veya Linux sistemler için):
MongoDB sunucusuna bağlanabilmek için php'ye mongoDB sürücüsünü yüklemeniz gerekmektedir. Eğer Linux işletim sistemine sahip bir cihaz kullanıyorsanız, https://github.com/mongodb/mongo-php-driver linkinden sürücüyü indiriniz. Aslında yapılması gereken işlemlerle alakalı komutlar aşağıdaki gibi olacaktır:
  1. #Kodlamayı git hesabından indirelim.
    git clone https://github.com/mongodb/mongo-php-driver
    
    #sürücünün derlenebilmesi için php-dev yükleyelim.
    sudo apt-get install php5-dev
    
    #kodlamanın bulunduğu dizin içerisine girelim.
    cd mongo-php-driver
    
    #Kodu derleyip yükleme işlemini gerçekleştirelim.
    phpize 
    ./configure 
    make 
    sudo make install
    
    #Son olarak Php eklentisini aktif hale getirelim.
    sudo echo "extension=mongo.so" > /etc/php5/conf.d/10-mongo.ini
Yukarıda bulunan komutlarla Linux işletim sistemine sahip cihazında yükleme gerçekleştirilmiş oldu.

Eğer cihazınız Windows işletim sistemine sahip bir cihaz ise, o zaman https://pecl.php.net/package/mongo linkinden php versiyonunuza, 32-64 bit sisteminize bağlı olarak en uygun dll dosyasını indirmeniz gerekmektedir. Sonrasında indirilen php_mongo.dll dosyasını php sürücülerinin bulunduğu dizine kopyalayınız. Son olarakta php.ini dosyasına extension=php_mongo.dll satırını ekleyiniz. Bu işlem ile birlikte mongo sürücüsü sisteminizde kullanılır hale gelmiştir.

Not: Her iki sistemde de konfigürasyonlar üzerinde işlemler gerçekleştirildiğinden dolayı sunucunun restart edilmesi gerekebilir.
 
2. MongoDB Bağlantısı Kurmak:
MongoDB kurulumunun ardından artık bağlantı işlemlerine başlayabiliriz. Normalde mongoDB kurulumunda bağlantı için authentication gerekmemektedir. Yani sistem kimlik doğrulama özelliği olmadan kurulmaktadır. Ancak sonrasında istenilirse kullanıcı tarafından username, password ile sisteme erişim sağlanabilir. Ayrıca MongoDB default host olarak localhost, default port olarak ise 27017 portunu kullanmaktadır. Aşağıda bulunan komutla MongoDB ye örnek bir bağlantı oluşturalım:
  1. <?php 
    try {  
       // Mongo Sunucusuna bağlanalım 
       $mongo = new Mongo('mongodb://localhost:27017'); 
    
       // Veritabanını Seçelim 
       $db = $mongo->selectDB('YazilimDersiDb'); 
    } catch(MongoConnectionException $e) { 
        die('Bağlantı kurulumunda sorun ile karşılaşıldı: ' . $e->getMessage()); 
    } 
    ?>
Eğer authentication özelliğini aktif hale getirdiyseniz, aşağıdaki şekilde mongoDB'ye bağlantı sağlayabilirsiniz:
  1. $mongo = new Mongo('mongodb://kullanıcıadı:şifre@localhost:27017');
3. MongoDB ile Kayıtları Listelemek:
MongoDB bağlantısının ardından artık collectionları inceleyebiliriz. Collectionlar, mongoDB'nin odacıkları olarak isimlendirilebilir. MySQL de tablo yapısına karşılık gelmektedir ve veriler bu hücrelerde tutulmaktadır. En önemli özelliği MySQLde bulunan tablosundan farklı olarak alan ad tanımlanmasının zorunlu olmamasıdır. Ayrıca ortak şema gereksinimi de bulunmamaktadır. Aşağıda bulunan kodlama ile belirlediğimiz herhangi bir collectiona bağlanalım. Sonrasında bu collectiona örnek data ekleyelim.
  1. <?php
    #diller isimli collectiona bağlantı gerçekleştirelim.
    $diller = new MongoCollection($db, 'diller');
    
    #bu collectiona örnek kayıt atalım.
    $diller->insert(array('dil' => 'Android', 'makalesayisi' => 12));
    $diller->insert(array('dil' => 'Php', 'makalesayisi' => 22));
    $diller->insert(array('dil' => 'Ruby On Rails', 'makalesayisi' => 34));
    $diller->insert(array('dil' => 'Linux', 'makalesayisi' => 56));
    ?>
Yukarıda yapılan kodlama ile örnek kayıtlar diller collectiona eklendi. Bu kayıtlara ait tüm sayıya ulaşmak için count() metodu kullanılmaktadır. Eğer Php'de array yapısına aşina iseniz, count() ifadesinin aslında arraylara ait sayıları getirmede de kullanıldığını bilirsiniz. 
  1. <?php
    #kayıtlı dil sayısını yazalım.
    echo "kayıtlı dil sayısı : ".$diller->count();
    ?>
Collectionlara eklenmiş olan tüm kayıtların listelenmesi için find() komutu kullanılmaktadır. Aşağıda bulunan kodlama ile kayıtlı olan tüm dillerin adını ve makale sayısını görüntüleyebilirsiniz:
  1. <?php 
    #tüm dilleri çekelim. 
    $dilListesi = $diller->find(); 
    
    #kayıtlı dilleri listeleyelim. 
    foreach($dilListesi as $dil) { 
        printf('Dil : %s - Miktar : %s <br>', $dil['dil'], $dil['makalesayisi']); 
    }
    ?>
Yukarıda bulunan kodlama ile diller collectiona ait tüm kayıtları çekip, listeledik. Eğer sadece makalesayisi=12 olan dilleri listelemek gibi bir özellik istiyorsanız where() metodunu kullanabilirsiniz. Örnek olarak aşağıda bulunan komut ile sadece makalesayisi=12 olan dilleri listeleyelim: 
  1. <?php 
    #koşulu belirleyelim.
    $where = array('makalesayisi' => '12');
    
    #makalesayisi 12 olan dilleri çekelim. 
    $dilListesi = $diller->find($where); 
    
    #sonuçları listeleyelim. 
    foreach($dilListesi as $dil) { 
        printf('Dil : %s - Miktar : %s <br>', $dil['dil'], $dil['makalesayisi']); 
    }
    ?>
Ayrıca limit() metodu ile istenilen kadar kaydın listelenmesi, orderBy() metodu ile de kayıtların sıralanması sağlanabilmektedir. Örnek olarak sadece 2 kaydın listelenmesini ve bu listelemenin büyükten küçüğe yapılmasını istiyorsanız aşağıda bulunan kodlama işinizi görecektir. 
  1. <?php 
    #Sıralamayı belirleyelim. (1 : ASC , -1 : DESC)
    $orderBy = array('dil' => -1);
    
    #limit ver orderBy metodlarını uygulayalım. 
    $dilListesi = $diller->find()->limit(2)->orderBy($orderBy); 
    ?>
Eğer sadece bir kayıt çekmek istiyorsanız find() yerine findOne() metodunu kullanmanız yeterlidir.

4. MongoDB ile Kayıt Eklemek:
Yukarıdaki maddeler collectiona nasıl kayıt atıldığı ile alakalı örnek verdim. Ancak burada biraz daha detaylı olarak size sistemin nasıl çalıştığını anlatacağım. Collectionlara kayıt eklenirken insert() metodu kullanılmaktadır ve içerikler array olarak girilmektedir. Konuyla alakalı örnek kodlama şu şekildedir:
  1. <?php 
    #eklenecek dil bilgilerini tanımlayalım.
    $yeniDil = array( 'dil' => 'Java', 'makalesayisi' => 122 ); 
    
    try { 
        $diller->insert($yeniDil); 
    } catch(MongoCursorException $e) { 
        die('Yeni dil eklenirken teknik bir sorunla karşılaşıldı ' . $e->getMessage()); 
    } 
    ?>
5. MongoDB ile Kayıt Güncellemek:
Collectionlarda mevcut herhangi bir kaydın güncellenmesinde ise where ve update() keywordleri önemli bir yer tutmaktadır.Aşağıdaki kodlamada collectionlarda bulunan herhangi bir kaydın nasıl güncellediği ile alakalı örnek kodlama bulunmaktadır:
  1. <?php 
    #güncellenecek kaydın koşulunu belirleyelim.
    $where = array('dil' => 'Java'); 
    
    #güncellenecek alanı belirleyelim.
    $guncelDil = array('makalesayisi' => 435); 
    
    #içeriği güncelleyelim.
    $diller->update($where, $guncelDil); 
    ?>
6. MongoDB ile Kayıt Silmek:
Aşağıdaki kodlamada collectionlarda bulunan herhangi bir kaydın nasıl silindiği ile alakalı örnek kodlama bulunmaktadır. Burada keyword olarak remove() metodu kullanılmaktadır:
  1. <?php 
    #silenecek kaydın koşullarını belirliyoruz.
    $where = array('dil' => 'Android'); 
    
    #kaydı collection içerisinden siliyoruz. 
    $diller->remove($where);
     
    ?>
7. MongoDB ile Collection Silmek:
Aşağıdaki kodlamada mevcut collectionın nasıl silindiği ile alakalı örnek kodlama bulunmaktadır. Burada keyword olarak drop() metodu kullanılmaktadır:
  1. <?php 
    #silinecek collectionun belirleyelim.
    $diller->drop();
    ?>
8. MongoDB ile Veritabanı Silmek:
Aşağıdaki kodlamada veritabanın nasıl silindiği ile alakalı örnek kodlama bulunmaktadır. Burada keyword olarak dropDatabase() metodu kullanılmaktadır:
  1. <?php  
    $db->dropDatabase();
    ?>

comments powered by Disqus