NoSQL vertiabanı motorları son yıllarda çok popülerleşti, çünkü yapısız olmalarından dolayı daha kolay mimari değişiklik yapabileceğiniz veri yapıları olduğu için tercih edilmeye başladı. Ölçeklenebilirlik de klasik sql veritabanlarının sınırlı ve geleneksel kaldığı konulardı. NoSQL çıkışı kesinlikle modern bir çözüm olarak görülebilir.

İnternette bir çok karşılaştırma, performans analiz yazıları bulabilirsiniz sql ve nosql veritabanları hakkında. Ancak her yere uyan mükemmel bir çözüm yok. Benim gördüğüm kadarıyla, hibrid ve akıllıca kurgulanarak dengelenmiş ve dağıtılmış sistemler en yaygın kullanımlar. Yani bazı şeyleri nosql ile daha zor ve daha çok kodlama zamanı harcayarak yapabilir, bazı şeyleri de sql ile yönetemez ve yapamazsınız.

Daha teknik konulara giriyorsanız zaten bu yazıdan daha çoğuna ihtiyacınız var :-) Bu yazı daha çok mongo'ya giriş ve flörtleşme dönemi hakkında.

Eğer MongoDB'yi denemek istiyorsanız, mongodb sunucusunu bilgisayarınıza yüklemek zorunda değilsiniz. Kurulumu da çok zor değil fakat sadece denemek için sunucu kurulumu konfigurasyonu gibi şeylerle uğraşmak zorunda değilsiniz. Sadece istemci sürücülerini kurmanız yeterli. Bu konu hakkında mongodb dökümantasyonundakihttp://docs.mongodb.org/ecosystem/drivers/php/ sayfasını inceleyebilirsiniz.

MongoLab adında bağımsız bir servis sayesinde ücretsiz bir mongo veritabanı oluşturabilir ve denemelerinizi onun üstünde yapabilirsiniz. MongoLab veritabanı ve kullanıcınızı oluşturduktan sonra açık erişim izni veriyor. Dolayısıyla php'den veya herhangi diğer bir ortamdan doğrudan erişebiliyorsunuz.

Tabi ki servisin amacı mongo denemek isteyen insanlara servis sunmak değil. MongoLab bulut veritabanı servisi. Veri dosyalarının saklanmasını istediğiniz alt servisi (Amazon, Rackspace, Windows Azure vs...), hatta yüzeysel de olsa bölge seçebiliyorsunuz (Amerika veya Avrupa veya uzak doğudaki bir veri merkezi şeklinde).

MongoLab 500mblık bir alanı ücretsiz sağlıyor. Diğer sınırlamalarını bilmiyorum fakat ufak projeleriniz için veya deneme yapmak için ideal. Eğer uygulamanız çok veri kullanmaya başlarsa küçük, büyük paketleri veya kurumsal hizmetlerinden faydalanabilirsiniz.

MongoLab ile tamamen php mongo eklentisi bağımlılığından da kurtularak doğrudan servisin basit REST apisini kullanabilir ve tek başına çalışan bir uygulama yazmanız da mümkün.

Konumuz mongo iken, birkaç php-mongo interaksiyonunu denediğim bir php dosyasının kodunu doğrudan vermek istiyorum.
<?php

$mongo = new Mongo("mongodb://dbuser:dbpassword@*.mongolab.com:45297/test_database");
$db = $mongo->selectDB("test_database");

$action = isset($_GET['action']) ? $_GET['action'] : NULL;

?>
	<ul>
		<li><a href="?action=create_collection&name=test_collection_<?=rand(1,10000);?>">Create a test collection</a></li>
		<li><a href="?action=list_collections">List collections</a></li>
		<li><a href="?action=add_record_to_nonexistent_collection">Add record to non existent collection (it creates the collection)</a></li>
		<li><a href="?action=add_user">Add a user</a></li>
		<li><a href="?action=find_fatih">Find Fatih</a></li>
		<li><a href="?action=search_user">Search user</a></li>
	</ul>
<?php

switch ($action) {
	case 'create_collection':
		$name = isset($_GET['name']) ? $_GET['name'] : 'users';
		var_dump($db->createCollection($name, FALSE));
		exit;
		break;

	case 'list_collections':
		$_collections = $db->listCollections();

		print '<h3>Collecitons</h3>';
		foreach ($_collections as $collection) {
			print $collection . '<br />';
		}

		break;

	case 'add_user':
		$name = isset($_GET['name']) ? $_GET['name'] : 'test_user_' . rand(1, 100000);

		$users = $db->users;
		$result = $users->insert(array(
			'username'   => $name,
			'created_at' => date('Y-m-d H:i:s')
		));

		print '<h3>Result:</h3>';
		var_dump($result);
		exit;
		break;

	case 'add_record_to_nonexistent_collection':
		$collection = isset($_GET['name']) ? $_GET['name'] : 'collection_' . rand(1, 100000);

		// it creates the collection even if not exists.

		$collection_obj = $db->$collection;
		$result = $collection_obj->insert(array(
			'test' => 1,
			'time' => time()
		));

		print '<h3>Result:</h3>';
		var_dump($result);
		exit;
		break;

	case 'find_fatih':
		$users = $db->users;
		$result = $users->findOne(array("username" => 'fatih'));

		print '<h3>Fatih?</h3>';
		var_dump($result);
		exit;
		break;

	case 'search_user':
		$users = $db->users;
		$result = $users->find(array("username" => array('$regex' => 'test_')));

		print '<h3>Users:</h3>';
		foreach ($result as $_result) {
			var_dump($_result);
		}
		exit;
		break;

	default:
		break;
}
İlk satırlarda göreceğiniz dsn'i mongolab'den edineceğiniz sunucu adresi ve portunu (tahminimce her kullanıcı için farklı olma durumu var), veritabanı kullanıcı adınız ve şifrenizi belirterek tek parça string şeklinde belirttiginiz takdirde bağlantı sağlayabileceksiniz.

Mongo, küçük uygulamalarda veri düzeni zorunluluğu olmadığı için kullanması çok keyifli, fakat verinizi dökümante etmeyi unutmayın. Yoksa neyin ne olduğunu unutur veya ipin ucunu kaçırarak karmaşık bir veri yığını elde edebilirsiniz günün sonunda.

MongoDB dökümantasyonunu inceleyerek indeksleme, sorgulama ve veri yönetimi nasıl yapılıyor fikir edinebilirsiniz. Ayrıca php manual'daki bazı SQL örneklerinin php ile mongo sınıfında nasıl yapıldığını gösteren bu sayfayı:http://php.net/manual/en/mongo.sqltomongo.php incelemekte fayda var.

MongoLab servisinin adresihttps://mongolab.com
Geçen sayıda, günlük hayatımıza giren dijital alışkanlıkların yeni bir türü olarak hayatımızı dijital ortamda kaydetmek üzerine, ağırlıkla sağlıklı yaşam için üretilmiş bazı donanımlardan bahsetmiştim. Bu sayıda daha genel bir konudan, konum bazlı servisler ve uygulamarın hayatımızdaki yerinden bahsedeceğim.

Bilgisayarların cebimize girmesinin yanı sıra mobil internetin de yaygınlaşması sayesinde kesintisiz bağlı yaşamaya başladık. Artık mobil cihazımızdan her an istediğimiz bilgiye ulaşabiliyoruz.

Cihazların küçülmesinin yanı sıra, donanımsal olarak yapabildikleri sayesinde her gün bir çok yaratıcı ürünle karşılaşıyoruz. Özellikle iPhone ve Android ile çalışan akıllı telefonlar sayesinde uydu konumumuzu hesaplatabiliyoruz. Bunun anlamı, birkaç metre sapmayla konum bilgisi elde edebiliyoruz cebimizde taşıdığımız cihazlarda.

Teknik bir bilgi olmasından dolayı bu açıklama hala çok anlam ifade etmese de pratikte çok faydalı bir bilgi olarak kullanılıyor. En basit örneği ile, konum bazlı bilgi ilk olarak ve halen en çok kullanılan bir araç olarak, yön bulmak için kullanılıyor. Yön bulmak için artık uydu konumlandırma cihazlarına ihtiyacımız yok çünkü artık bu teknoloji cep telefonlarımıza sığabilecek boyuta indirildi. Çünkü eskiden uydu konumlandırma cihazlarıö daha çok askeri amaçlarla biraz daha büyük cihazlar olarak kullanılıyordu.

Devamını Oku →
20 Ocak Perşembe ´11   —   3 Yorum
Son 5 yil icinde sosyal networkler fcok hizli bir sekilde populerlesti, hatta facebook deve donusup google gibi bir lideri sallayacak konuma geldi. Bu detaylari yazmama gerek yok piyasada bunlari takip ettiginiz milyon tane blog var zaten. Ben isin web gelistiricileri tarafindaki gidisatini sizlerle paylasmak istiyorum.

Bu sosyallesen ve web 2.0 kavraminin gercekten oturdugunu hissetmemizi saglayan tek sey sitelerin yani web uygulamalarinin birbirleri ile cok guzel haberlesmeye baslamalaridir. Bunu bu kadar iyi anlamamizi saglayan orneklerden biri yine aslinda facebook. Tabi ki google veya yahoo servislerinde de bircok yontemle haberlesiyorduk fakat ortak bir dil/standart yoktu. Simdi ise her yer API doldu. Yani uygulamalar artik aralarinda en azindan bazi standartlara uyarak haberlesmeye basladilar. Bunun en buyuk ornegi oauth apileridir. Su an elinizi nereye atsaniz yakalayacaginiz sitelerin cogunun apisi var. Aslinda bu gelismeye cok olumlu bakiyorum ben. Cunku artik sitelerin verilerini kendilerine saklama gibi bir tavri yok.

Cok basit bir ornek vermem gerekirse, yillardir kullandigim delicious servisi yahoo tarafindan alindiktan sonra servisin yayin hayatini sonlandiracagi yazildi her yerde. Bir parca gercek de olabilir, onemli degil, olagan seyler bunlar. Ancak kullanici olarak ben yillarca tagledigim bookmarklarimi kaybetme tehlikesi sezdim. Bu gelisme bundan 10 sene once olsa oturup giden bookmarklarima dua etmekten baska secenegim olmazdi. Ya da tek tek oturup bookmarklarimi kopyalamaya calisirdim. Ama butun icerigi koruyacagim tartisma konusu olurdu.

Simdi ise, aninda birileri bir arac gelistirip, kullaniciya api erisim izni sorarak sizin bookmarklarinizi evernote veya baska formatlarda okunabilecek sekilde export etmenizi saglayabiliyor veya boyle bir araca gerek duymadan bir uygulama gelistiricisi olarak siz de apiye kendi uygulamanizla baglanip istediginiz sekilde verinizi kullanabilirsiniz.

Tehlike ve avantaj

Bu isin tek tehlikeli olmaya basladigi bir konu var, o da internette her yer kopya iceriklerle dolmaya baslamasi. Bunun rahatsiz edici yanini orneklemem gerekirse, her gun takip ettigim yuzlerce twitter hesabinin binlerce tweetini cok hizli sekilde okumam gerekiyor ve okudugum icerigin yarisindan fazlasi otomatik uretilen veya kopya icerik. Eger icerigi kaliteli ise bunun kotu bir yani yok. Yani mesela mashable'da post edilen bir haberi tweet'den okuyarak ulasiyorsam problem degil ama insanlarin foursquare check-inlerini gormek beni rahatsiz ediyor. Eger bu sayi okudugunuz 10 tweetin 1-2 tanesini kapsiyorsa dayanilmaz olabiliyor. Bu acidan dusunuldugunde api kullanimi her yere uymuyor. Yani bunu gereksiz kullanacak insanlar her zaman oluyor.

Fakat bunun cok guzel bir yani var, mesela cok spesifik bir konuda bir web sayfasi yapiyorsunuz ve bu sayfanin icinde twitter'da konusulan tweetleri hashtage gore sayfanizda gostermek istiyorsunuz. Cunku kullanicinin bu akisi o sayfada gormesi oldukca anlamli veya degerli olabiliyor. Insanlarin aliskin oldugu servisleri uygulamaniza entegre ederseniz sadece uygulamanizin kullanilabilirligini kolaylastirmis olmuyor ayni zamanda hazir olan icerige de ulasabiliyor oluyorsunuz. Yani konu sadece yeni icerigin dis kaynaklarda toplanmasi degil. Hatta o, isin onemsiz kismi. Mesela arkadaslik uzerine kurulu bir uygulama yapiniz var ise insanlarin facebook hesaplarina ve arkadas listesine api araciligiyla erisip kullanicinin karsisina cikarmaniz hem kullanicinin saniyeler icinde, bazen 1-2 click ile sizin ana fonksiyonunuza erismesini saglayabiliyorsunuz.

mfyz.com?

Artik neredeyse hic yazi yazmadigim mfyz.com hakkinda tabi ki planlarim var. mfyz.com'um su an gezdiginiz (v0.7) surumunu kodlarken sadece flickr apisini kullanarak tum galeri bolumunu flickra devretmistim. Bu konuda cok rahatim. Hem cok daha az kod yaziyor hem de bu bolumun yonetimi icin zaten surekli kullaniyor oldugum flickr hesabima masaustu araclarimi kullanarak cok hizli fotograf yukleyebiliyorum. Sitede gorunmesi icin o fotografa mfyz.com etiketi eklemem yetiyor. Sanirim bu ornek isin kolayligini ve avantajini iyi ornekliyor.

Ne zaman olacagini bilmiyorum ama bir sure sonra codeigniter kullanarak, test edilebilir bir kod ile, bircok dis kayanak kullanilmis bir mfyz.com hazirlamayi planliyorum. Ornek veriyorum butun yorum ve forum cevaplarini disqus ile yonetmeyi, butun resimleri yine flickr ile, dokuman iceriklerini belki bir wiki motoru ile, kullanici yonetimini codeigniter'in bir kullanici yonetimi kutuphanesi ile ya da tamamen facebook connect ve twitter oauth ile, belki arayuzdeki bazi kisimlari jquery pluginleri ile sunacagim.

Eskiden bu tarz servisleri esnek kullanabilme sansiniz yoktu. Kim ne kod verirse onu kullanmak zorunda idiniz. Ancak wordpress, thumblr gibi servisler arayuz konusunda bir motor ustunde herseyin yapilabilecegini herkese ispatladiktan sonra isler degisti. Zaten bu isin kolay kismi. Eger biraz daha zaman harcayip apileri kullanarak kendi arayuzlerinizi cizmeyi tercih ederseniz zaten bu noktada ozgun bir is cikarmamak icin tek engel kendiniz kaliyorsunuz.


URL kısaltma servisleri şu an özellikle sosyal ağlarda otomasyonlarla fln çok fazla kullanılıyor. Uzun url'leri kısa url'lere çeviriyor fakat acaba arama motorlarının botları bu url'leri takip ederken gerçekten son yönlendirilen url'i mi hesaba katıyor?

Arama motorlarına göre dış bağlantı sayısı oldukça önemli bir kriter biliyorsunuz, ama kısa url'lerle aslında dışarıda kaç bağlantının geldiğini tam olarak sayamıyor oluyor botlar.

Belki de friendfeed veya twitter gibi servisler bunu engellemek için bu servisleri kullanıyorlardır. Mesela friendfeed ff.im domainini kullanıyor, yani kendi servisi ve public bir servis değil. Yani google'a göre friendfeed ile ff.im adresleri birbirlerini besliyor ama dışarı bağlantı vermiyorlar.

Tabi arama motoru botlarına bu konudaki problemin çözümünü öğretmek zor değil.

Popüler Etiketler

portfolio doritos tytz subversion svn wanda proje kampanya konsol terminal seo search optimization meta örnek kod rss xml nedir social integration api service network blog ui ux css3 icons facebook connect box kontrol yapıları if switch firefox iOS webkit web app app music google player license lisans media share html ruffles oyun apple windows ios iphone ipad app store store in-app purchase purchase verification storekit itunes connect itunes php server htaccess url twitter bootstrap macosx mail signature imza regex link mfyz job developer login mysql session istatistik insanlar javascript jquery ie browser sql export tool kitap design development logo html5 wordpress cms spam open source mootools ipucu form js date tarih dokuman plugin pharma hack css language less subscription pear mdb2 prepare execute injection compile compiler linux on-the-fly lifestream digital tebrik statistics input textarea select db database free opengraph graph auth http apache kurulum wireless ajax laptop notebook mssql pgsql ide editor phpstorm jetbrains deployment version control git ubuntu cache cookie subdomain chart osx applications framework sosyal medya diff zaman download startups xmlhttprequest ingilizce internet object coding xhtml mobile banner mod_rewrite assets fql internet explorer code widget button icon ikon grafik calendar www redirect crossdomain route router while gimp optimizasyon analyse procedure style howto nasıl parse screen newsletter browsers table fstab ntfs radio query support workspace sitemap generator