bson – binary json nedir?

Bson, yani Binary JSON, JSON’ların binary şekilde encode edilmiş halidir.

Bson, tıpkı json gibi, içinde array ve döküman barındırırlar. Temelde 4 tipten oluşurlar, bunlar;

byte 1 byte (8-bits)
int32 4 bytes (32-bit signed integer)
int64 8 bytes (64-bit signed integer)
double 8 bytes (64-bit IEEE 754 floating point)

Çok küçük bir örnek vermek gerekirse;

{"hello": "world"}	→	"\x16\x00\x00\x00\x02hello\x00\x06\x00\x00\x00world\x00\x00"

Bu adresten, başka örneklere ve içerisinde saklanan söz dizimlerine ulaşabilirsiniz.

Önemli olan bir nokta, MongoDB, ağ ve disk yönetiminde BSON kullanmaktadır. Çoğu dil için, MongoDB’nin driverı mevcuttur (C, C++, Java, Perl, PHP, Python, Perl, Ruby vs.) Onların listesine de buradan ulaşabilirsiniz.

İyi çalışmalar.

Ubuntu MongoDb kurulumu (ubuntu mongodb installation)

MongoDb’yi Ubuntumuza kurmak için, öncelikle install edeceğimiz yerin GnuPG (GNU Privacy Guard) (GPG) keyini bilgisayarımıza tanıtıyoruz.

Terminale girip;

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv 7F0CEB10

yazmamız gerekiyor. (Bu key, MongoDB’nin kendi internet sitesinde verilmiş.)

Sonrasında da, MongoDB’yi indireceğimiz yeri bilgisayarımıza tanıtmamız gerekiyor. Bunun için de /etc/apt/sources.list.d dizinini açıyoruz ve burada 10gen.list adında bir dosya yaratıyoruz (touch komutu ile yapabiliriz). Sonrasında bu dosyayı bir editör ile açıp aşağıdaki satırı ekleyip kaydediyoruz.

deb http://downloads-distro.mongodb.org/repo/debian-sysvinit dist 10gen

Ardından terminale girip sudo apt-get update yapıyoruz.

Şimdi sıra geldi MongoDB’yi kurmaya! 😀

Terminalimizi açıp, aşağıdaki satırı uyguluyoruz, ve MongoDB, Ubuntumuza kurulmuş oluyor.

sudo apt-get install mongodb-10gen

Terminale mongo yazdığımız zaman MongoDB shell’i karşımıza çıkıyor. Test database’inin test collectionunda deneme yapmamızı sağlıyor ilk açtığımızda. Aşağıdaki satırlarla ufak bir deneme yapabiliriz.

> db.test.save({a:1})
> db.test.find()

Bir sonraki yazımda, Ubuntu üzerinde çalışırken MongoDB’yi PHP ile nasıl kullanacağımızı anlatacağım.

database – mysql persistent connection nedir?

Persistent connection nedir?

Persistent connection, bağlantının sürekli açık tutulduğu bağlanma biçimine denir.

Normal olarak, yazılım dilleri bir veritabanına bağlanacağı zaman, bilgisayardaki bir port üzerinden veritabanına bağlantı açar. Daha sonra kodun sonunda, veya isteğe bağlı bir yerine bağlantıyı kapatır. Ayrıca connection kapatılmadıysa, yazılım dillerinde otomatik kapatma seçenekleri de bulunmaktadır. Örneğin 5 sn sonra kapat, 10 sn sonra kapat, biter bitmez kapat gibi seçenekler mevcuttur.

Persistent connection ın avantajları

Veritabanı bağlantısının otomatik. olarak açılıp kapatılması, en az ayar gerektiren şey olabilir. Ancak performansınızı persistent connection ile artırabilirsiniz.

Bir web sayfası isteği geldi diyelim. Yazılım dili kodu çalıştırdı. Varsayalım ki 1 Query gerekti bu sayfa için.
1- Hazırda bir bağlantı yok. İşletim sisteminden ilgili portu kullanmak için müsade istedi.
2- Daha sonra ilgili porta bağlandı.
3- Sonra querysini çalıştırdı.
4- Sonucunu ilgili porttan okudu.
5- Kod bitince de mysql bağlantısını kapattı.

persistent connection bu noktada, 1. aşamayı hızlandırır, 2. aşamayı direkt ortadan kaldırır, 4. aşamayı hızlandırır ve 5. aşamayı ortadan kaldırır.

Baktığımızda query önemli bir maliyet olabilir tabi ki querysine göre değişir ancak, yüklü bir serverda bahsettiğim durumun bariz hız kazandıracağı aşikar.

—-
Persistent connectionın diğer bir avantajı da , yüksek load altında, saçmalayan bir yapıya müsade etmemesidir. Persistent connection sayınızı yazılım dilinden ayarladığınızda, diyleim ki 200 verdiniz, sitenize aynı anda 1000 kişi bile gelse, serverinizin stabilliğini korur. Otomatik olarak bir sürü bağlantı açtırsaydık, bunları yönetmemiz imkansız olacaktır. (tabi kullanıcılar mysql bağlanamadı hatası alırlar, ancak siteniz çökmez bu daha önemlidir, en önemlisi de sistemi ince ayar yaparak bu ihtiyaçları da karşılayabilir hale getirmeniz sizin elinizdedir.)

Mysql olarak anlattık hep, mysql de persistent connection kullanmanız inanılmaz kolay. tek yapacağınız mysql_connect yerine mysql_pconnect kullanmanız. Bir de eğer mysql_close kullanıyorsanız, bunlar kodunuzdan kaldırmanız. (tabi ki başka bir database e bağlanacaksanız o ayrı durum)

—–
Bu sadece mysql için değil hemen hemen tüm veritabanlarında ortak olan bir özelliktir.

Hele ki database serverini ayrı bir server olarak kullanıyorsanız, ve bu makina sadece database e özel bir makina ise şiddetle tavsiye ederim. Ben aktif olarak mysql ve mongoda persistent connection kullanıyorum.

dipnot : Mysql ve Mongo persistent connectionları için PHP’de mod_php ile Apache ‘yi tercih etmeyiniz. Nginx veya lighthttpd yanında kurulu bir phpfcgi(php fast cgi), yüksek load altında apacheden hem çok daha stabil çalışıyor, hem de performans olarak %500 den fazla hızlı çalışıyor. En önemlisi, yapacağınız ayarları “DOĞRU” olarak çalıştırıyor.

Mongodb için phpmoadmin

Php ile mysql in yönetim toolu olan phpMyAdmin den sonra şimdi de mongo db için de bir php toolu yapmışlar. Adı phpmoadmin. PhpMyadmin kadar geniş kapsamlı ve kullanışlı olmasa da işinizi görebilecek özelliklerin hepsine sahip. Tabi ki Windows ortamında mongod.exe yi çalıştırdktan sonra girebiliyorsunuz.

İşinize yarayacağını düşünüyorsanız, tek dosya. Çok pratik. http://www.phpmoadmin.com adresinden indirebilirsiniz.

Sql’den Mongo’ya eşleşmeler (Sql to Mongo mapping chart)

MySQL executable Oracle executable Mongo executable
mysqld oracle mongod
mysql sqlplus mongo

 

MySQL term Mongo term
database database
table collection
index index
row BSON document
column BSON field
join embedding and linking
primary key _id field

 

MongoDB sorguları JSON (BSON) nesneleri olarka belirtilir.  Bu sorguları sayfanın en altındaki linkten tıklayarak görebilrisiniz.

MOngoDB’deki sorgu ifadesi (ve index key gibi diğer şeyler ) JSON (BSON) olarak gösterilir. fakat, gerçek fiil(örneğin find() metodundaki find kelimesi) bir yazılım dili için bu kelimedir. (bu da şu an javascript shell i için böyledir. mongo shell den çalıştırılabilir) Bu fiiller (yani find gibi metodların isimleri ) yazılım dilinden diline değişkenlik gösterebilir. Örneğin bu javada find değil de fetch olabilir.

Daha fazla eşleşme bilgisi için lütfen mongodb.org sitesine bakınız : :http://www.mongodb.org/display/DOCS/SQL+to+Mongo+Mapping+Chart