1. NoSql ve MongoDB Saygın Topatan 2. NoSql ve MongoDB NoSql nedir Neden ihtiyaç duyuldu Tipleri MongoDb Kavramlar Sharding Şema Tasarımı NoSql’in geleceği 3. NoSql Nedir?Nedir 2009 başlarında ortaya çıkmış bir kavram İlişkisel Olmayan Veritabanı Yönetim SistemiÖzellikleri Sabit tablo şemaları gerektirmeyebilir Join işlemlerinden kaçınır Yatay ölçeklenir! 4. No to Sql ? 5. Neden NoSql?Veri Miktarı Yıllara Göre Saklanan Veri Miktarı ExaByte (10¹⁸)Kaynak: IDC 20119000 79108000700060005000400030002000 9881000397623161253 0 2006 2007 2008200920102015 6. Neden NoSql?Uygulama Mimarileri1980 ler: Mainframe UygulamalarıUygulama Veritabanı 7. Neden NoSql? Uygulama Mimarileri1990 ler: Entegrasyon merkezi olarak veritabanı UygulamaUygulama Uygulama Veritabanı 8. Neden NoSql? Uygulama Mimarileri2000 ler: Artan saklama ve performans ihtiyaçları UygulamaUygulama Uygulama VeritabanıVeritabanı Veritabanı 9. Neden NoSql? 10. Neden Ölçekleme?PowerEdge T110 II (Basic) – 8 GB, 3.1 Ghz Quad $1, 350.004TPowerEdge T110 II (Basic) – 32 GB, 3.4 Ghz Quad $12, 103.008TPowerEdge C2100 - 192 GB, 2 x 3 Ghz$19, 960.00IBM System x3850 X5 – 8 x 2.4 Ghz, 2048 GB $645, 605.00K Computer (süper bilgisayar) - 10 petaflops, 705, $10, 000, 000 yıllık işletim ücreti024 cores, 1, 377 TB Setup ücreti ile ilgili bilgi yok 11. Neden NoSql? MongoDb vs. Sql Server 2008MongoDB C# APIvs.LINQ to SQL 12. Neden NoSql? MongoDb vs. Sql Server 2008MongoDB C# APIvs.LINQ to SQL 13. Neden NoSql?MongoDb vs. Sql Server 2008 Gerçek Dünya verileriMongoDbSQL Server 14. Neden NoSql? MongoDb vs. Sql Server 2008 15. NoSql Tipleri Anahtar-Değer Ambarı (Key-Value Stores) Dynomite, Voldemort, Riak, Tokyo Cabinet Doküman Ambarı (Document Store) MongoDB, CouchDB, RavenDB Geniş Sütun Ambarı/Sütun Aileleri (Wide ColumnStore/Column Families, BigTable Clones) Apache Hbase, HyperTable, Cassandra Graf Veritabanları (Graph Databases) Neo4j, AllegroGraph, InfoGrid 16. Anahtar Değer AmbarıTek anahtar – tek değerSon derece hızlıDeğer ikili (binary) olarak tutulur.Veritabanı değerin verisini anlamaz, anlamak istemezNesneye erişim anahtar üzerinden olurdeğer … anahtarBaslik_€#_NoSql^ ^ ^Yazar _€#_Saygın ^ ^ ^BlogPost_127GonderiTarihi%/// 133546849998) … 17. Doküman Ambarı (Document Store)Anahtar-değer ambarı, ama değer veritabanı tarafından anlaşılabilirDeğer üzerinden sorgu yapmak mümkün doküman { anahtar Baslik: “NoSql”, Yazar: “Saygin”,BlogPost_127 Tarih: “04-02-2012” } 18. Geniş Sütun Ambarı/Sütun Aileleri(BigTable Clones) Google BigTable yayınından esinlenilmiştir Dağıtık, çok boyutlu, sıralanmış eşleme Her anahtar birden çok sütun ile eşleştirilirSütun Sütun ailesi BaşlıkBlogPostBaslikNoSqlRow_idBlogPostYazarBlogPost_127SaygınBlogPostGönderiTarihi04-02-2012Comment textPaylaşım içinteşekkürler 19. Geniş Sütun Ambarı/Sütun Aileleri(BigTable Clones) Google BigTable 2006 verileri 20. Graf Veritabanları Veri ilişkilerine odaklanmış graf yapısıdır. Düğümler(nodes) ve bunları bağlayan kenarlar(edges) Her ikisinde de anahtar-değer ikilileri bulunur YusufGizem EmreAslı 21. Graf Veritabanları Veri ilişkilerine odaklanmış graf yapısıdır. Düğümler(nodes) ve bunları bağlayan kenarlar(edges) Her ikisinde de anahtar-değer ikilileri bulunurYaş: 23Yaş: 22Okul: “İTÜ”Okul: “İTÜ” YusufGizem Yaş: 22Yaş: 23 Okul: “YTÜ”Twitter:”@delikiz” EmreAslı 22. Graf VeritabanlarıVeri ilişkilerine odaklanmış graf yapısıdır.Düğümler(nodes) ve bunları bağlayan kenarlar(edges)Her ikisinde de anahtar-değer ikilileri bulunur Yaş: 23Yaş: 22sever Okul: “İTÜ”Okul: “İTÜ” severYusufGizemÖdevlerini YaparBirlikte Yaşar KuzenYaş: 22Yaş: 23Okul: “YTÜ”Twitter:”@delikiz”EmreAslı sever 23. NoSql Tipleri Boyut-Karmaşıklık karşılaştırmasıVeri BoyutuAnahtar/Değer ambarı BigTable KlonlarıKey/Value Stores Doküman Ambarları Graf VeritabanlarıKarmaşıklık(Complexity) 24. Doküman Tabanlı veritabanı JSON türevi (BSON) bir format kullanır Şemasız Performans C++ da yazılmış Index desteği Ölçeklenebilir Replication Auto-Sharding Ticari destekli (10gen) Bolca doküman 25. Database == Database Table== Collection Index== Index Row== BSON Document Column == BSON Field 26. mongoDBCREATE TABLE USERS (a Number, b Number) Tabledb.createCollection("mycoll")ALTER TABLE users ADD ... 27. mongoDBSELECT * FROM usersdb.users.find()SELECT a, b FROM usersdb.users.find({ }, {a:1, b:1})SELECT * FROM users WHERE age>33db.users.find({age:{$gt:33}})SELECT * FROM users WHERE age=33 ORDER BY namedb.users.find({age:33}).sort({name:1}) 28. mongoDBSELECT DISTINCT last_name FROM usersdb.users.distinct(last_name)SELECT COUNT(*) FROM usersdb.users.count()SELECT COUNT(AGE) from usersdb.users.find({age: {$exists: true}}).count() 29. mongoDB Indexleri// Artandb.users.ensureIndex({name:1})// Eşsizdb.users.ensureIndex({name:1}, {unique:true})//Sessiz, Bloklamayandb.users.ensureIndex({name:1}, {background:true})//Bileşikdb.users.ensureIndex({name:1}, {age:-1}) 30. mongoDB Auto Sharding Verinin her parçası ayrı bir sunucu (shard) tarafından yönetilir Her bir sunucu da verinin bir alt kümesi üzerinde tam kontrolesahiptir Veritabanı işlemleri mümkünse bir shard üzerinde, değilsebirden çok sunucu üzerinde yapılır Sistem yükü değiştikçe, verininsunuculara dağıtılması otomatik olarakdengelenir 31. Auto Sharding Mimari Görünümü0