Você está na página 1de 13

irketimizin en ok mcadele ettii konu

olan Big Data problemini zmekte nemli


bir ara olacana inandm NoSQL
sistemler ierisinde en yaygn kullanlan
MongoDB veritabann sizler iin inceleyip
bir derleme meydana getirdim.
MongoDB
NoSQL Database
Ferhat SARIKAYA / Veritaban Yneticisi


Ferhat SARIKAYA / Veritaban Yneticisi 1

MongoDB
2014
indekiler
NoSQL Nedir? .......................................................................................................................................... 2
Neden NoSQL?......................................................................................................................................... 2
MongoDB ................................................................................................................................................. 3
MongoDB ve SQL Server Karlatrmal Performans Testleri ................................................................. 4
MongoDB Ynetim Aralar ..................................................................................................................... 9
MongoDB ve Business Intelligence ....................................................................................................... 10
MongoDB ve C# ..................................................................................................................................... 11




Ferhat SARIKAYA / Veritaban Yneticisi 2

MongoDB
2014
NoSQL Nedir?
NoSQL: Not Only SQLin ksaltmasdr. likisel veritabanlarna (RDBMS) bir alternatif olarak ortaya
kmtr. DDL ve DML ilemleri srasnda Klasik SQL dili kullanlmad iin bu isimle anlmaya
balanmtr. Google ve Amazon gibi devler yllardr bu teknolojiyi kullanmaktadr. Google kendi
tasarlad Big Table, Amazon Dynamo ve Facebookta Cassandray kullanmaktadr.

likisel veritaban sistemlerinde temel mantk tekrarlanan verilerin nne geilmesidir, bu sebeple de
tekrarlanacak veriler ayr tablolarda tutulur ve sorgu esnasnda joinlerle birletirilirler, bu ileme
Normaliazsyonda denmektedir, ileride deineceimiz gibi Business Intelligence ksmnda ise
performans iin joinler ortadan kaldrlr ve veriler tekrar halinde tutulur, buna da Denormalizasyon
denir. Join saysnn ise ten fazla olmas performans kaybna yol amaktadr ki kompleks yaplarda
rahatlkla bu say n zerine kmaktadr.

NoSQL sistemlerde ise veriler ilikisel veritaban modelinin aksine denormalizasyon halinde tutulurlar,
bylece verilere ulamak daha hzl ve daha kolaydr. Ayrca insert, update, delete ilemleri
dosyalarda yaplrken, select ilemi ram zerine set edilmi bilgilerden ekildiinden olduka hzl
sonu dndrmektedir.
Neden NoSQL?
Neden sorusuna cevap verebilmek iin likisel Veritaban (RDBMS) modelini incelemek gerekir.
likisel veritaban modelinde verilerin ilenmesi transaction temellidir. Transactionlarn stabil
almas ve veri btnlnn korumak iin ACID standartna sk skya baldr. ACIDin alm
yledir:

Atomicity: Bir transaction srasnda bir ilemin baarszl tm ilemleri etkiler ve tm baarsz
saylr.

Consistency: Bir transaction, ema ierisinde tanmlanan foreign key, unique check gibi tm kurallara
uymak zorundadr, aksi halde baarsz kabul edilir.

Isolaiton: Commit edilmemi bir transaction ierisindeki ilemler yalnz transaction tarafndan bilinir,
commit edildikten sonra ilem herkese yansr.

Durability: Commit edilen verinin veritabanna yazldndan muhakkak emin olunmaldr, commit
edildikten sonra veri yok olmaz.

Ayrca likisel veritaban modelinde Propagation Constraint (PC) algoritmasn da kullanrlar. Bu
algoritma temelde tanmlanan veri yapsn korur ve ilikisel modelde tanmlanm bir veri zerinde
anlamsz ilemler yapmanz engeller. rnein Foreign Key olarak tanmlanm ana tablodaki veriyi
silmek istediinizde eer bu veriyle alakal bir kayt ilikili olduu tabloda mevcut ise silme ilemini
gerekletirmenize msaade edilmez, bylece veri btnl anlaml bir ekilde korunmu olur.

NoSQL = No ACID demek doru olur, elbette baz istisnalar mevcut. Big Table, HBase, CouchDB her ne
kadar NoSQL bir veritabanysalar da baz hizmetleri sayesinde ACID desteini salamaktadr.


Ferhat SARIKAYA / Veritaban Yneticisi 3

MongoDB
2014
NoSQL sistemlerinin SQL-92 gibi bir standard olmad iin yukarda yazlanlarn genel zelliklerin
dnda kendi aralarnda farkllklar gstermektedir. Her sistemin veri tutarll ve eriimi ile ilgili farkl
zellikleri ve yetenekleri bulunmaktadr. Fakat NoSQL sistemlerini genel olarak 3 grupta toplayabiliriz:

Dokman (Document) Tabanl: Bu sistemlerde bir kayt dokman olarak isimlendirilir. Dokmanlar
genelde JSON formatnda tutulur. Bu dokmanlarn ierisinde snrsz alan oluturulabilir. MongoDB,
CouchDB, HBase, Cassandra ve Amazon SimpleDB bunlara rnektir.

Anahtar / Deer (Key / Value) Tabanl: Bu sistemlerde anahtara karlk gelen tek bir bilgi bulunur.
Yani kolon kavram yoktur. Azure Table Storage, MemcacheDB ve Berkeley DB bunlara rnektir.

Grafik (Graph) Tabanl: Dierlerinden farkl olarak verilerin arasndaki ilikiyi de tutan, Graph theory
modelindeki sistemlerdir. Neo4J, FlockDB bunlara rnektir.

NoSQL sistemlerin domasndaki sebep yksek veri kapasitesi sonucunda verilerin daha hzl
ilenebilmesi ve daha hzl sonu dndrebilmesidir. zellikle Petabyte boyutundaki verilerde dahi en
iyi performans salamak zere dizayn edilmilerdir. DML ilemleri esnasnda ilikisel modelin kontrol
mekanizamlarnn oundan arndrld iin olduka ciddi performans salamaktadr ki Google,
Amazon ve Facebook gibi devlerin milyarlarca insana ayn anda hizmet verebildiini
dndmzde performans ve hz asndan olduka tatmin edicidir.

NoSQL sistemler, veritaban dnyasnn gelecei gibi grlmektedir. Her ne kadar ilikisel modele
gre veri tutarll konusunda zayf olsa da cretsiz olular, yatay genilemeye msait olmalar, ok
gl server konfigrasyonlar gerektirmemeleri ve ilikisel modeldeki cluster zorluklar ve
verimsizliklerinden arndrlm ve olduka performansl almalar NoSQL sistemleri cazibe merkezi
haline getirmeye balamtr.

zellikle byk boyutlu verilerin saklanmas iin maliyetleri yksek ilikisel veritabanlarndan ve
serverlardan uzaklamak Google, Facebook gibi devlerin dahi tercihleri arasnda yer almaktadr. Bu
tr sistemler yerine dk maliyetli ve zellikli ok fazla saydaki serverlar zerinde verilerini
saklamak ve cluster yapmak daha cazip hale gelmitir. NoSQL sistemlerin bir ounda binlerce server
tek bir kme gibi hareket edebilir ve ok yksek boyutlu verileri olduka hzl bir ekilde yazabilir
(leride performans testlerinde de bu durum aka grlecektir).
MongoDB
MongoDB bir NoSQL veritabandr. zellikle ilikisel veri tabanlarndaki Big Data problemine zm
olarak gelitirildi. MongoDB, 10gen firmas tarafndan ak kaynak bir sistem olarak gelitirildi ve
kaynak kodlarna Git Hub zerinden ulamak mmkn. 10gen, MongoDByi Humongus yani
Kocaman, Devasa olarak isimlendirmitir, zaten ortaya k da tam da bu maksatladr.

C++ yazlm dili ile gelitirildi ve bilinen birok iletim sistemi zerinde almaktadr: Windows, Linux,
Unix, MacOS. nemli zelliklerine deinecek olursak:




Ferhat SARIKAYA / Veritaban Yneticisi 4

MongoDB
2014
likisel veritabanlarndaki schema yoktur, bu yzden collation gibi problemlerle uralmaz.
Dokman tabanl veritabandr, veriler JSON formatnda set edilir, dokmana yazlrken BSON
formatnda saklar ve karmaklktan kurtulmasn bu ekilde salar.
Dokmann her zelliine ve anahtarna (key) gre indexleme salar.
Ska kullanlan okuma ilemi sorgulamalarnda yksek performans gstermektedir.
Verilerin yazlmas esnasnda yksek performans gstermektedir.
High Availability (Yedeklilik) destei bulunmaktadr.
Auto Sharding zellii sayesinde ayn verinin birden ok yerde ilenmesi ve bulunabilmesi ile
yatay leklendirme yaplabilmektedir. Bunun yannda dikey lekleme yapabilmekte
mmkn.
leklemeyi salayabilmek iin Master Slave Replication destei sunar.
Master: Yazma ileminin yapld sunucudur.
Slave: Okuma ileminin yapld ve leklendirmenin saland sunucudur. Master sunucu
herhangi bir ekilde fail olursa Slave sunuculardan biri Master olarak atanr.
Dokman tabanl olduka kompleks sorgular yazmak mmkndr.
Map / Reduce zellii sayesinde kolay analiz etme ve kolay veri ilemeyi salar.
Map: Tm verileri srayla parametre eklinde alr, key value yapsna evirir.
Reduce: Mapin dndrd key value deerlerini yakalayarak zerinde ilem yapmamz
salar.
Fultext search destei bulunmaktadr.
GridFS ile birlikte dosyalar veritaban ierisinde saklamak mmkndr.
Srekli genileyen yaplar iin olduka uygun, birden fazla server zerinde sorunsuz
alabilmektedir.

MongoDBnin popler yazlm dillerinin birouna driver destei bulunmaktadr. Bunlardan bazlar:
C#, C++, C, Ruby, PHP, Python, Erlang, Perl.

zellikle artk yaygn bir metot olarak kullanlan ORM tabanl yazlm gelitirme modeline daha uygun
bir yap. SQL Server kullanlan bir projede LinQ veya Entity Framework gibi ORM tool kullanmak pek
avantajl olmuyor, nk SQL Server her sorguyu nce maliyetlendiriyor ve sonra yol hesab yapyor,
daha sonra buna gre sorgu sonucunu dndryor. Bu tr maliyet ve yol hesaplarndan syrlmak iin
stored procedure kullanmak daha makul. Her ne kadar ORM tool iinde bu mmknse de maalesef
yazlmclarn ou burada stored procedureden bilgiyi almak yerine ORM toolun syntaxn tercih
ediyor; fakat yine de ACID yapsndan tr SQL Server veya dier ilikisel veritabanlar sonu
dndrmede olduka yava kalyor.
MongoDB ve SQL Server Karlatrmal Performans Testleri
Burada birka test sonucu ile ilgili verileri paylaacam. Temelde amacm uan kullandmz sisteme
alternatif olarak sunduum MongoDBnin bize salayaca artlar gsterebilmek.

1) lk olarak bakacamz test SQL Server 2008 ile MongoDBnin karlatrlmas zerine Michael
Kennedynin yapt test sonular greceiz.



Ferhat SARIKAYA / Veritaban Yneticisi 5

MongoDB
2014
Web adresi: http://blog.michaelckennedy.net/2010/04/29/mongodb-vs-sql-server-2008-
performance-showdown/
Insert lemi Testi

Grld gibi 1.000 kayttan sonra ciddi bir fark balyor ki 50.000 kayt SQL Server zerinde 160
saniye srerken, ayn ilem MongoDB zerinde yalnzca birka saniye alyor.

Yine insert ilemi iin ayn anda 5 kullanc zerinden veri gnderimi yaplyor ve sonucu:

Grld gibi MongoDB neredeyse 100 kat daha hzl sonu veriyor.

Yine LinQ ORM arac kullanlarak basit bir class tanm ile insert ilemi yaplyor.
Class yaps SQL Server ve MongoDBde ayn:




Ferhat SARIKAYA / Veritaban Yneticisi 6

MongoDB
2014


MongoDB ile ilemi sonucu:


SQL Server ile ilem sonucu:


Grlecei zere yine fark 100 kat.

Select lem Testi
Paralel 5 kullanc ile select sorgusu performans sonular yle:


Grlecei zere 1/3 orannda bir zamanla MongoDB ilemi gerekletiriyor.


Ferhat SARIKAYA / Veritaban Yneticisi 7

MongoDB
2014

Yine kompleks sorgulara bakyoruz:
MongoDB dokman yaps:

SQL Server tablo yaps:

Sorgu sonucu:



Ferhat SARIKAYA / Veritaban Yneticisi 8

MongoDB
2014

Grlecei gibi kompleks sorgularda da MongoDB, SQL Servera oranla 1/3 orannda bir zamanla
ilemi bitirebiliyor.

2) kinci bakacamz performans testi ise Windows Server 2012 zerinde 64 bit edition zerinde
yaplyor. 4 GB Ram bulunuyor ve bir instance alyor. SQL Server 2012 Developer Edition 64
bit srm ile MongoDB 2.4.8 64 bit edition karlatrlyor.

Web adresi: http://geekswithblogs.net/EltonStoneman/archive/2013/12/13/the-
concurrency-shoot-out-sql-server-versus-mongodb-part-1.aspx

SQL Server yaps:

MongoDB Yaps:


Ferhat SARIKAYA / Veritaban Yneticisi 9

MongoDB
2014

1.000 ve 10.000 i ak ve 100 e zamanllk zerine yaplan test sonucu:

Grlecei zere MongoDB 6 kat daha hzl sonu vermektedir.
MongoDB Ynetim Aralar
1) Nucleon Database Master: MongoDB, NuoDB, Oracle, MySQL, PostgreSQL, FireBird, SQLite,
SQL Server, SQL Azure, IBM DB2, IBM Informix, Netezza, Ingres sistemlerin ynetimini
yapabilen bir ynetim arac.

MongoDB konusunda destekleri: JSON Query Editor, Advanced Data Editing, Collection
Manager, Index Manager, GridFS Manager, Visual Map & Reduce Editor, Visual Query Search,
Tree and Table style data view and rich data export features to common file formats.

Lisans cretleri
Database Master rn:
Professional License: 69 USD
Professional License + Subscription: 79 USD
Enterprise License: 179 USD
Enterprise License + Subscription: 189 USD


Ferhat SARIKAYA / Veritaban Yneticisi 10

MongoDB
2014

Business Intelligence Studio rn:
Professional License: 149 USD
Professional License + Subscription: 159 USD
Enterprise License: 479 USD
Enterprise License + Subscription: 489 USD


Ultimate License + Subscription rn:
BI Studio and Database Master: 2.000 USD

2) Mongovue: MongoDB ile birlikte SQL Server, MySQL ve PostgreSQL destei de veriyor. Bu
databaselerden MongoDBye veri import edebiliyor. cretsiz srmnde Monitoring destei
vermiyor; ama cretli srmlerde her destek mevcut.

Lisan cretleri
Standart: 35 USD, yalnz bir kullanc lisans
Enterprise: 350 USD, 25 kullanc lisans
Enterprise Gold: 500 USD, 100 kullanc lisans
Enterprise Platinum: 1.000 USD, 250 kullanc lisans
Enterprise Diamond: 2.500 USD, Limitsiz kullanc lisans

3) NoSQL Viewer: MongoDB, Couchbase, Apache CouchDB, Cassandra, HBase databaselerine
full destek veriyor. Olduka profesyonel gzkyor. Lisans cretleri ise ihtiyaca ve kullanc
saysna gre deikenlik gsteriyor.
4) Robomongo: Grafik tabanl bir dier ynetim arac da Robomongo. MongoDB Shell Script
kullanarak ilemleri gerekletirdii iin tam destek veriyor. Kullanm olduka kolay ve bir ok
platformda alyor. Lisans creti olmad iin tercih edilen bir ara.
5) UMongo: Grafik tabanl bir ynetim arac. Robomongo gibi tam hakimiyet salyor ve
cretsiz.
6) RockMongo: PHP 5.5 ile gelitirilmi bir ara yze sahip. Bir ok ilemi yapabilmek mmkn ve
cretsiz.
MongoDB ve Business Intelligence
Business Intelligence (BI) srecinde verilerin denormalize halde tutulduunu dndmzde ve
yukardaki birok bilgiyi gz nne aldmzda SQL Servera oranla daha verimli ve daha hzl bir
yaklam sergilemek mmkn gzkyor. Big data konseptinden tr MongoDB iin olduka iyi BI
aralar bulunmaktadr; ama elbette bunu deerlendirmek hususunda BI Developerlar daha doru bir
tercih yapacaktr. Bu ksmda kullanlabilecek baz aralar aada sraladm.

1) Jaspersoft: Mterileri arasnda Ericson, Juniper gibi devler bulunuyor. ETL ilemini yapmaya
gerek grmeksizin dnm ilemlerini yapabiliyor. zellikle ram zerinde analiz yapabiliyor
olmas phesiz hzl ilem yapabilme ve ciddi performans kazanlar salyor gibi.
Raporlamalarda ise HTML5 destei nemli bir art gibi duruyor.


Ferhat SARIKAYA / Veritaban Yneticisi 11

MongoDB
2014
2) Penthano: nemli ve etkili aralardan biri de Penthano. Jaspersofttan sonra zellikleri
asndan gzme arpan ikinci ara oldu.
3) Nucleon BI Studio: bir nceki Ynetim Aralar blmnde ayrntl bilgi vermitim.
MongoDB ve C#
irketimizde C# dili kullanld iin MongoDBnin kullanm ekline ynelik basit bir class yaps rnei
gelitireceim. Bylece MongoDB zerinde yazlm gelitirme konusunda ufak bir fikir verebilir
dncesindeyim.

Gelitirme ortammzn Visual Studio 2012 olduunu varsayyorum, bunun iin MongoDBnin C#
drivern kurmamz gerekiyor. NuGet Packages zerinde Official MongoDB C# Driver yazmak yeterli,
kurulum otomatik yaplyor.
imdi bir eitim platformu gelitirdiimizi varsayyorum ve Ogrenci classmzn metotlarn
yazyorum:

static void OgrenciEkle() // renci ekleme fonksiyonumuz
{
MongoClient client = new MongoClient();
MongoServer server = client.GetServer();
MongoDatabase db = server.GetDatabase("Ogrenciler");
var ogrenciler = db.GetCollection("Ogrenci");
ogrenciler.Insert(new BsonDocument
{
{"Ad","Ferhat"},
{"Soyad","SARIKAYA"},
{"Yas",36},
{Numara, 123456}
});
}

static void OgrenciDuzenle()// renci bilgilerini dzenleme fonksiyonumuz
{
MongoClient client = new MongoClient();
MongoServer server = client.GetServer();
MongoDatabase db = server.GetDatabase("Ogrenciler");
var ogrenciler = db.GetCollection("Ogrenci");
var sorgu = new QueryDocument { { "Numara", 123456 } };
var ogr = ogrenciler.Find(sorgu).FirstOrDefault();
var guncelle = new UpdateDocument { { "$set", new BsonDocument("Soyad", "Sarkaya") } };
ogrenciler.Update(sorgu, guncelle);
}

static void OgrenciSil()//renci silme fonksiyonumuz
{


Ferhat SARIKAYA / Veritaban Yneticisi 12

MongoDB
2014
MongoClient client = new MongoClient();
MongoServer server = client.GetServer();
MongoDatabase db = server.GetDatabase("Ogrenciler");
var ogrenciler = db.GetCollection("Ogrenci");
var sorgu = new QueryDocument { { "Numara", 123456 } };
ogrenciler.Remove(sorgu);
}

static void OgrenciListele()//rencileri listelediimiz fonksiyonumuz
{
MongoClient client = new MongoClient();
MongoServer server = client.GetServer();
MongoDatabase db = server.GetDatabase("Ogrenciler");
var ogrenciler = db.GetCollection("Ogrenci");
var liste = ogrenciler.FindAll();
foreach (var ogr in liste)
{
Console.WriteLine(ogr["Ad"] + " " + ogr["Soyad"] + " " + ogr["Yas"] + + ogr[Numara]);
}
}

Você também pode gostar