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.
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); }