NOSQL - MongoDB ve PHP CRUD İşlemleri



mongoDB, 10gen firması tarafından C++ ile geliştirilen NOSQL dağıtımıdır. NOSQL'den bahsedelim, mongoDB'yi öğrenelim. Son olarak ise, PHP ile CRUD işlemlerini yapalım.

NOSQL


  • Not Only SQL olarak tanımlanır.
  • Klasik veritabanlarında olan tablo,sütun,index,join,sorgu ve benzeri hiçbir kuralı barındırmaz.
  • RDBMS (Relational Database Management System) olarak adlandırılan ilişkisel veritabanının temelinde olan hiçbirşey burada yoktur. Örneğin : ACID, desteği yoktur.
  • Google SQL olmaksızın, birçok verisini BIG TABLE adı verilen kendi geliştirdiği bir yapı üzerinde tutuyor. Bu teknoloji NOSQL değil ancak yıllardır benzeri birşeyin ne kadar başarılı sonuç verdiği ortadadır.

NOSQL TÜRLERİ VE DAĞITIMLARI ?


Piyasada birçok NOSQL dağıtımını bulunuyor. Bunlar temel olarak 3 sınıfta toplanabilir : döküman tabanlı / çizelge ve grafik / anahtar-değer depoları.

  1. Döküman Tabanlı : Her kayıt bir dökümandır ve JSON benzeri bir format da tutulur. Örnek : MongoDB, HBase, Cassandra
  2. Çizelge ve Grafik : En önemli örnek Neo4J olabilir. Veriler, grafik tabanlı bir modelde tutulur.
  3. Anahtar-Değer Depo : Memcached tarzıdır. Her anahtarda bir veri de tutulur. Örnek : Memcached, BerkeleyDB

NOSQL'in EKSİK YÖNLERİ ve NERELERDE KULLANIRIZ ?


  • RDBMS üzerinde olan temel db işlemlerinin yapılamaması (join, iç içe select sorguları vs.)
  • Bankacılık ve benzeri verilerin hata affetmediği sistemlerde kullanılmamalı.
  • Projelerin belirli kısımlarında NOSQL'den faydalanarak, SQL'in performans vb. sorunlarıyla uğraşmamız oluruz. Örneğin : Facebook mesajlaşma bölümünde kullanıyor.

MONGODB


  • 10gen firması tarafından C++ ile geliştirildi. Açık kaynak kodlu bir projedir. (Premium yani ücretli versiyonuda mevcut)
  • Neden mongoDB dersek ; döküman tabanlı, mapreduce desteği, cloud mimarisi, kısmı de olsa sorgulama yapabilme. Birçok NOSQL dağıtımları sorgu çalıştıramaz. Direk anahtar-değer mantıklıdır. Ancak MongoDB alışık olduğumuz SQL sorgularına benzer işlemleri yapabilir imkanı sağlar.
  • Döküman tabanlıdır.
  • Foursquare, MTV Networks gibi birçok ünlü firma kullanır.
  • PHP, C, Java ve benzeri diller için desteği vardır.

MONGODB KURULUM


Farklı sistemler için kurulum rehberine mongoDB sayfasından ulaşabilirsiniz. Ben "Red Hat Enterprise, CentOS, or Fedora Linux" sürüm için olanını kuracağım.

  • Depo Oluştur ;
                vi /etc/yum.repos.d/10gen.repo
                [10gen]
                name=10gen Repository
                baseurl=http://downloads-distro.mongodb.org/repo/redhat/os/x86_64
                gpgcheck=0
                enabled=1

  • yum install mongo-10gen mongo-10gen-server
  • service mongod start
  • chkconfig mongod on

MONGODB KULLANIMI


Konsoldan aşağıdaki komutu verelim, mongodb'ye geçelim.

$ mongo

  • Bağlantı yapıldıktan sonra "HELP" ile tüm komutlar listelenir.
  • "EXIT" ile konsoldan çıkılır.

SQL Terimleri = MongoDB Karşılığı


  • database = database
  • table = collection
  • row = document
  • column = field
  • index = index
  • primary key = _id
           
Bağlantı Komutları
           
  • show dbs -> Tüm veritabanlarını listele
  • show collections -> Tüm tabloları listele
  • use TestDb -> Veritabanı oluştur. DB seçmek içinde use kullanılır. Eğer "use TestDb" dediğimiz de, yok ise oluşturur. Var ise, ona bağlanmamızı sağlar.

Tablo (collection) Oluştur

SQL : CREATE TABLE users 
(
id MEDIUMINT NOT NULL AUTO_INCREMENT,
username varchar(30),
telephone number,
status char(10),
PRIMARY KEY (id)
)

MONGODB : db.createCollection("users")

Standart veritabanlarındaki "username varchar(30)" gibi sütunlar tanımlamanıza gerek yok. Her kayıt bir dökümanda tutulur. Herhangi bir sütuna bağlı değildir.

Tablo (collection) Sil

SQL : DROP TABLE users
MONGODB : db.users.drop()

Tabloya (collection) Kayıt Ekle


SQL : INSERT INTO users(username,telephone,status)
VALUES ("Dinçer",123456789,"Online")

MONGODB : db.users.users( {
username: "Dinçer", telephone: 123456789, status: "Online"
} )

Tablo (collection) Kayıt Sil

SQL : DELETE FROM users WHERE username = "Dinçer"
MONGODB : db.users.remove( { username: "Dinçer" } )

Tablo (collection) Kayıt Güncelleme


SQL : UPDATE users SET username="Dinçer Yeni" WHERE username="Dinçer"

MONGODB : db.users.update(
{ username: "Dinçer" } ,
{ $set: { username: "Dinçer Yeni" } },
{ multi: true }
)

Tablo (collection) Kayıt Listeleme

SQL : SELECT * FROM users		
MONGODB : db.users.find()

- - - - - - - - - - - - - - - - - - - - -

SQL : SELECT username,telephone FROM users
MONGODB : db.users.find( { },
*** SQL'de ki where ifadesidir. Kullanmayacak isek boş bırakabiliriz. ***
{ username 1, telephone 1 } *** 1 göster, 0 gösterme anlamındadır ***
)

- - - - - - - - - - - - - - - - - - - - -

SQL : SELECT * FROM users WHERE status = "Online"
MONGODB : db.users.find( { status: "Online" } )

- - - - - - - - - - - - - - - - - - - - -

SQL : SELECT * FROM users WHERE status="Online" ORDER BY username ASC
MONGODB : db.users.find( { status: "Online" } ).sort( { username: 1 } )
*** "-1" DESC anlamına gelir ***

- - - - - - - - - - - - - - - - - - - - -

SQL : SELECT * FROM users WHERE username like "%Dinçer%
MONGODB : db.users.find(
{ username: /D/ }
)

- - - - - - - - - - - - - - - - - - - - -

SQL : SELECT DISTINCT(status) FROM users
MONGODB : db.users.distinct("status")

- - - - - - - - - - - - - - - - - - - - -

SQL : SELECT COUNT(*) FROM users
MONGODB : db.users.count()

MONGODB ve PHP

CRUD işlemleri için örnek aşağıdaki gibidir. Detaylar ve daha fazlası dökümanı inceleyebilirsiniz :  MongoDB Class - php.net

// DB BAĞLANTISI

$mongo = new Mongo();
$db = $mongo->selectDB("TestDb");

// TABLO SEÇ

$collection = $db->users;

// INSERT

$insert = array("username"=>"TEST","password"=>"123456");
$collection->insert($insert);

// UPDATE

$update = array('$set' => array("username" => "TEST"));
$collection->update(array("password" => "654321"),$update);

// DELETE

$collection->remove(array("username" => "TEST"));


}
tarih : nisan 2013
kategori : database

Yorum Yapmak İstersen ?
Yazılıp / Çizilenler
Konuya kimse yorum yapmamış ...