SlideShare a Scribd company logo
1 of 32
Download to read offline
Serdar Büyüktemiz
serdarb.com
github.com/serdarb
@hserdarb
İçerik
• NoSql nedir?
• Neden NoSql?
• Neden MongoDB?
• Nerde MongoDB kullanmalı?
• Write Concern
• Index
• Replica Set
• Sharding
• Map Reduce
• Backup
NoSql Nedir?
• İlk olarak «farklı veri yapıları» üzerine yapılmış bir «hacker meetup»
da kullanılan hashtag
• Tam bir tanım yapamasak da, NoSql veritabanlarının ortak
karakterlerinden bahsedebiliriz
• İlişkisiz (non-relational, not like OLTP relational)
• Açık kaynak
• Dağıtık yapı destekli (cluster-friendly)
• Şemasız (shema-less)
• 21. YY web yükünü kaldırabilecek kapasitede
Neden NoSql?
• It’s all about the money, like every other thing!
• Yüksek trafiğe ve hesaplama gereklerine daha verimli (ucuz, hızlı) cevap
verebilmek için
• Hızlı yazma için
• Hızlı okuma için
• Yüksek erişilebilirlik için
• Kolay geliştirme ortamı
• Büyük veri ile çalışabilme
Dağıtık veri tabanlarında SQL verimli değil
Veri Modelleri
1-> 65AD23DEFF
[{id:1,
name: ’veli’,
url: ‘veli.com’ },
{id:2,
name: ’ali’,
phone: ‘366 99 55’ }]
Google Big Table
http://research.google.com/archive/bigtable.html
Nabza Göre Şerbet – Polyglot Persistence
http://martinfowler.com/bliki/PolyglotPersistence.html
Veri tabanınından günümüzün beklentisi
• Kolay ol
• Ucuz ol
• Veriyi kaybetme
• Her zaman erişilebilir ol
• Şemasız da çalışabil
• Küçük projede de kullanabilelim, işimiz büyüdüğünde bizi yarı yolda
bırakma
Introduction to NoSQL by Martin Fowler
• http://www.youtube.com/watch?v=qI_g07C_Q5I
Transactions & nosql
• Transaction tutarlı verilere sahip olmamız için bir güzellik
• No sql ortamda tutarlı veri sağlamak için iş developer’a düşüyor…
• Ama zaten ilişkisel veri tabanlarında da biraz düşünürseniz transaction
otomatik bir pilot değil,
• Uygulamanın gereğine göre mümkün olduğunca kısa süreli bir scope’u olması
gerek, ve bu ideal ortam için bize gene iş düşüyor…
Transactions
http://martinfowler.com/eaaCatalog/optimisticOfflineLock.html
http://martinfowler.com/eaaCatalog/pessimisticOfflineLock.html
Neden MongoDB?
• Kolay Öğrenilebilir
• Açık Kaynak ve Ücretsiz
• Yüksek Erişilebilirlik
• Yüksek Performans
• TABLE JOIN durumları olmadan tasarlanan yapılar ve «embeded document»
sayesinde hızlı okuma
• «write concern» tercihine dayalı olarak hızlı yazma
• Gittikçe kalabalıklaşan komünite
Nerde MongoDB kullanmalı?
• Bloglar
• Posts -> Comments
• Ürün Katalogları
• ProductGroups -> Products -> ProductVariants
• Üye Bilgileri
• User -> UserDetail
• User.Addresses
• İçerik Yönetim Sistemleri
• Log Datası Saklamak
• Coğrafi Bilgi Saklamak (geo-spatial)
• Zaman içinde yapısı değişecek uygulamalar
«Relational» vs «Embeded»
Write Concern
• Errors Ignored
• Unacknowledged
• Acknowledged
• Journaled
• Replica Acknowledged
• http://docs.mongodb.org/manual/core/write-concern/
Write Concern - Unacknowledged
Write Concern - Acknowledged
Write Concern - Journaled
Write Concern - Replica Acknowledged
İndex
• İndexler B-tree yapısında tutuluyor
İndex Tipleri
• Default _id
• Tek Alan (Single Field)
• Çok Alan (Compound Index)
• Multikey Index (array’e index)
• Geospatial Index
• Text Indexes (text içinde arama için)
• Hashed Indexes (hash based sharding için)
Bazı index komutları
• db.collection.createIndex()
• db.collection.ensureIndex()
• db.collection.getIndexStats()
• db.collection.reIndex()
• cursor.explain()
indexed vs not-indexed
Compound Index
• En çok 31 alandan oluşan bir «compound index» oluşturulabilir
• «hashed index» tanımlı bir alan «compound index» grubunda yer alamaz
db.products.ensureIndex( { "item": 1, "stock": 1 } ) { "_id": ObjectId(...)
"item": "Banana"
"category": ["food", "produce", "grocery"]
"location": "4th Street Store"
"stock": 4
"type": cases
"arrival": (...) }
İki alanda index oluşturduğumuzda
2. alanda da çok sorgu olacaksa
ayrıca index oluşturmak gerekir
Multikey Index
• «embedded document» ve «array» alanlar için tanımlanan index
db.books.ensureIndex({ book.tags: 1 })
{
"_id" : ObjectId("..."),
"name" : "Warm Weather",
"author" : "Steve",
"tags" : [ "weather", "hot", "record", "april" ]
}
Replica Set
• Verilerinizin güvenliği için başka makinelere de
kopyalanması
• Asenkron çalışır
• Master Slave Modeli
• Veri değiştikçe bazı anlarda sadece tek bir
makinenin en güncel olduğu durumar sözkonusu
• http://docs.mongodb.org/manual/core/replication
-introduction/
Sharding’den Önce Düşünülmesi Gerekenler
• Sorguları optimize ettik mi?
• index optimization
• Aktif verilerin ve kullanılan indexlerin boyutunun tek makinenin
RAM’ine sığmayacağı bir noktaya geldik mi?
• İşletim sistemi ve dosya sistemi doğru ayarlarda mı?
• EXT4/XFS, «access time tracking» kapalı olmalı
• Mümkünse SSD disk ve RAID 10
Sharding
(veriyi parçalara ayırmak)
2013 verileri
2012 verileri
«shard key» olarak yıl seçip
verilerin tarihine göre
farklı «shard»’a gitmesi sağlanabilir
Mongodb shard’larda yaklaşık miktarda data olmasını ister
Eğer shard’larda veri boyutu arasında fark oluşursa
Veriyi taşıyarak eşitleme yapmaya çalışır
Bu durumda network’de çok büyük boyutda veri taşıma gerçekleşebilir
ve bu sisteminizin erişilebilirliğine zeval verebilir…
dolayısıyla «shard key» seçimi önemlidir!
Aggregation Framework
db.products.aggregate([{
$group: {_id: «$brand»,
total: «$sum:1}}
}]);
SELECT brand, count(*)
FROM Products
GROUP BY brand
Map Reduce
Backup
• Replicaset olarak backup
• mongodump & mongorestore
• https://mms.mongodb.com/ (MongoDB Backup in the Cloud)

More Related Content

What's hot

AnkaraJUG Haziran 2013 - No SQL / Big Data
AnkaraJUG Haziran 2013 - No SQL / Big DataAnkaraJUG Haziran 2013 - No SQL / Big Data
AnkaraJUG Haziran 2013 - No SQL / Big DataAnkara JUG
 
Apache Spark : Genel Bir Bakış
Apache Spark : Genel Bir BakışApache Spark : Genel Bir Bakış
Apache Spark : Genel Bir BakışBurak KÖSE
 
Hadoop,Pig,Hive ve Oozie ile Büyük Veri Analizi
Hadoop,Pig,Hive ve Oozie ile Büyük Veri AnaliziHadoop,Pig,Hive ve Oozie ile Büyük Veri Analizi
Hadoop,Pig,Hive ve Oozie ile Büyük Veri AnaliziSerkan Sakınmaz
 
Azure Sanal Makineler
Azure Sanal MakinelerAzure Sanal Makineler
Azure Sanal MakinelerMustafa
 
Veri Depolama ve Diskler
Veri Depolama ve DisklerVeri Depolama ve Diskler
Veri Depolama ve DisklerMustafa
 

What's hot (6)

AnkaraJUG Haziran 2013 - No SQL / Big Data
AnkaraJUG Haziran 2013 - No SQL / Big DataAnkaraJUG Haziran 2013 - No SQL / Big Data
AnkaraJUG Haziran 2013 - No SQL / Big Data
 
NodeJS ve MongoDB
NodeJS ve MongoDBNodeJS ve MongoDB
NodeJS ve MongoDB
 
Apache Spark : Genel Bir Bakış
Apache Spark : Genel Bir BakışApache Spark : Genel Bir Bakış
Apache Spark : Genel Bir Bakış
 
Hadoop,Pig,Hive ve Oozie ile Büyük Veri Analizi
Hadoop,Pig,Hive ve Oozie ile Büyük Veri AnaliziHadoop,Pig,Hive ve Oozie ile Büyük Veri Analizi
Hadoop,Pig,Hive ve Oozie ile Büyük Veri Analizi
 
Azure Sanal Makineler
Azure Sanal MakinelerAzure Sanal Makineler
Azure Sanal Makineler
 
Veri Depolama ve Diskler
Veri Depolama ve DisklerVeri Depolama ve Diskler
Veri Depolama ve Diskler
 

Similar to Nosql & MongoDB

Berkeley Data Analytics Stack Genel Bakış
Berkeley Data Analytics Stack Genel Bakış Berkeley Data Analytics Stack Genel Bakış
Berkeley Data Analytics Stack Genel Bakış Veysel Taşcıoğlu
 
Berkeley Data Analytics Stack Genel Bakış
Berkeley Data Analytics Stack Genel BakışBerkeley Data Analytics Stack Genel Bakış
Berkeley Data Analytics Stack Genel Bakıştechbase
 
Kod günleri veritabnı
Kod günleri veritabnıKod günleri veritabnı
Kod günleri veritabnıMustafa Tepe
 
İlişkisel Veritabanları, ORM ve Doctrine
İlişkisel Veritabanları, ORM ve Doctrineİlişkisel Veritabanları, ORM ve Doctrine
İlişkisel Veritabanları, ORM ve DoctrineMuhittin Özer
 
İleri Seviye T-SQL Programlama - Chapter 08
İleri Seviye T-SQL Programlama - Chapter 08İleri Seviye T-SQL Programlama - Chapter 08
İleri Seviye T-SQL Programlama - Chapter 08Cihan Özhan
 
WordPress ile buyuk olcekli siteler
WordPress ile buyuk olcekli sitelerWordPress ile buyuk olcekli siteler
WordPress ile buyuk olcekli sitelerMustafa UYSAL
 
MongoDB - NoSQL Overview
MongoDB - NoSQL OverviewMongoDB - NoSQL Overview
MongoDB - NoSQL OverviewCihan Özhan
 
PHPkonf'15 - PHP Uygulamanızı Güçlendirin
PHPkonf'15 - PHP Uygulamanızı GüçlendirinPHPkonf'15 - PHP Uygulamanızı Güçlendirin
PHPkonf'15 - PHP Uygulamanızı GüçlendirinMuhittin Özer
 
React.js Web Programlama
React.js Web ProgramlamaReact.js Web Programlama
React.js Web ProgramlamaCihan Özhan
 
Ankara Spark Meetup - Big Data & Apache Spark Mimarisi Sunumu
Ankara Spark Meetup - Big Data & Apache Spark Mimarisi SunumuAnkara Spark Meetup - Big Data & Apache Spark Mimarisi Sunumu
Ankara Spark Meetup - Big Data & Apache Spark Mimarisi SunumuSerkan Sakınmaz
 
Veri işleme üzerine, Hakan Sarıbıyık
Veri işleme üzerine, Hakan SarıbıyıkVeri işleme üzerine, Hakan Sarıbıyık
Veri işleme üzerine, Hakan SarıbıyıkHakan Sarıbıyık
 

Similar to Nosql & MongoDB (20)

MongoDB Overview
MongoDB OverviewMongoDB Overview
MongoDB Overview
 
Linkle mimari
Linkle mimariLinkle mimari
Linkle mimari
 
Berkeley Data Analytics Stack Genel Bakış
Berkeley Data Analytics Stack Genel Bakış Berkeley Data Analytics Stack Genel Bakış
Berkeley Data Analytics Stack Genel Bakış
 
Berkeley Data Analytics Stack Genel Bakış
Berkeley Data Analytics Stack Genel BakışBerkeley Data Analytics Stack Genel Bakış
Berkeley Data Analytics Stack Genel Bakış
 
Riak ve RiakCS
Riak ve RiakCSRiak ve RiakCS
Riak ve RiakCS
 
Kod günleri veritabnı
Kod günleri veritabnıKod günleri veritabnı
Kod günleri veritabnı
 
Kod günleri veritabnı
Kod günleri veritabnıKod günleri veritabnı
Kod günleri veritabnı
 
İlişkisel Veritabanları, ORM ve Doctrine
İlişkisel Veritabanları, ORM ve Doctrineİlişkisel Veritabanları, ORM ve Doctrine
İlişkisel Veritabanları, ORM ve Doctrine
 
12factor apps
12factor apps12factor apps
12factor apps
 
İleri Seviye T-SQL Programlama - Chapter 08
İleri Seviye T-SQL Programlama - Chapter 08İleri Seviye T-SQL Programlama - Chapter 08
İleri Seviye T-SQL Programlama - Chapter 08
 
WordPress ile buyuk olcekli siteler
WordPress ile buyuk olcekli sitelerWordPress ile buyuk olcekli siteler
WordPress ile buyuk olcekli siteler
 
Big Data Sunum
Big Data SunumBig Data Sunum
Big Data Sunum
 
MongoDB - NoSQL Overview
MongoDB - NoSQL OverviewMongoDB - NoSQL Overview
MongoDB - NoSQL Overview
 
PHPkonf'15 - PHP Uygulamanızı Güçlendirin
PHPkonf'15 - PHP Uygulamanızı GüçlendirinPHPkonf'15 - PHP Uygulamanızı Güçlendirin
PHPkonf'15 - PHP Uygulamanızı Güçlendirin
 
React.js Web Programlama
React.js Web ProgramlamaReact.js Web Programlama
React.js Web Programlama
 
No SQL & MongoDB Nedir?
No SQL & MongoDB Nedir?No SQL & MongoDB Nedir?
No SQL & MongoDB Nedir?
 
Cem kubilay
Cem kubilayCem kubilay
Cem kubilay
 
Sukru_TRSUG2016
Sukru_TRSUG2016Sukru_TRSUG2016
Sukru_TRSUG2016
 
Ankara Spark Meetup - Big Data & Apache Spark Mimarisi Sunumu
Ankara Spark Meetup - Big Data & Apache Spark Mimarisi SunumuAnkara Spark Meetup - Big Data & Apache Spark Mimarisi Sunumu
Ankara Spark Meetup - Big Data & Apache Spark Mimarisi Sunumu
 
Veri işleme üzerine, Hakan Sarıbıyık
Veri işleme üzerine, Hakan SarıbıyıkVeri işleme üzerine, Hakan Sarıbıyık
Veri işleme üzerine, Hakan Sarıbıyık
 

More from Serdar Buyuktemiz

More from Serdar Buyuktemiz (6)

Temel web güvenliği
Temel web güvenliğiTemel web güvenliği
Temel web güvenliği
 
MongoDB
MongoDBMongoDB
MongoDB
 
Mongo db first steps with csharp
Mongo db first steps with csharpMongo db first steps with csharp
Mongo db first steps with csharp
 
Bug tracking tools
Bug tracking toolsBug tracking tools
Bug tracking tools
 
Seo
SeoSeo
Seo
 
Balanced scorecard
Balanced scorecardBalanced scorecard
Balanced scorecard
 

Nosql & MongoDB

  • 2. İçerik • NoSql nedir? • Neden NoSql? • Neden MongoDB? • Nerde MongoDB kullanmalı? • Write Concern • Index • Replica Set • Sharding • Map Reduce • Backup
  • 3. NoSql Nedir? • İlk olarak «farklı veri yapıları» üzerine yapılmış bir «hacker meetup» da kullanılan hashtag • Tam bir tanım yapamasak da, NoSql veritabanlarının ortak karakterlerinden bahsedebiliriz • İlişkisiz (non-relational, not like OLTP relational) • Açık kaynak • Dağıtık yapı destekli (cluster-friendly) • Şemasız (shema-less) • 21. YY web yükünü kaldırabilecek kapasitede
  • 4. Neden NoSql? • It’s all about the money, like every other thing! • Yüksek trafiğe ve hesaplama gereklerine daha verimli (ucuz, hızlı) cevap verebilmek için • Hızlı yazma için • Hızlı okuma için • Yüksek erişilebilirlik için • Kolay geliştirme ortamı • Büyük veri ile çalışabilme
  • 5. Dağıtık veri tabanlarında SQL verimli değil
  • 6. Veri Modelleri 1-> 65AD23DEFF [{id:1, name: ’veli’, url: ‘veli.com’ }, {id:2, name: ’ali’, phone: ‘366 99 55’ }]
  • 8. Nabza Göre Şerbet – Polyglot Persistence http://martinfowler.com/bliki/PolyglotPersistence.html
  • 9. Veri tabanınından günümüzün beklentisi • Kolay ol • Ucuz ol • Veriyi kaybetme • Her zaman erişilebilir ol • Şemasız da çalışabil • Küçük projede de kullanabilelim, işimiz büyüdüğünde bizi yarı yolda bırakma
  • 10. Introduction to NoSQL by Martin Fowler • http://www.youtube.com/watch?v=qI_g07C_Q5I
  • 11. Transactions & nosql • Transaction tutarlı verilere sahip olmamız için bir güzellik • No sql ortamda tutarlı veri sağlamak için iş developer’a düşüyor… • Ama zaten ilişkisel veri tabanlarında da biraz düşünürseniz transaction otomatik bir pilot değil, • Uygulamanın gereğine göre mümkün olduğunca kısa süreli bir scope’u olması gerek, ve bu ideal ortam için bize gene iş düşüyor…
  • 13. Neden MongoDB? • Kolay Öğrenilebilir • Açık Kaynak ve Ücretsiz • Yüksek Erişilebilirlik • Yüksek Performans • TABLE JOIN durumları olmadan tasarlanan yapılar ve «embeded document» sayesinde hızlı okuma • «write concern» tercihine dayalı olarak hızlı yazma • Gittikçe kalabalıklaşan komünite
  • 14. Nerde MongoDB kullanmalı? • Bloglar • Posts -> Comments • Ürün Katalogları • ProductGroups -> Products -> ProductVariants • Üye Bilgileri • User -> UserDetail • User.Addresses • İçerik Yönetim Sistemleri • Log Datası Saklamak • Coğrafi Bilgi Saklamak (geo-spatial) • Zaman içinde yapısı değişecek uygulamalar
  • 16. Write Concern • Errors Ignored • Unacknowledged • Acknowledged • Journaled • Replica Acknowledged • http://docs.mongodb.org/manual/core/write-concern/
  • 17. Write Concern - Unacknowledged
  • 18. Write Concern - Acknowledged
  • 19. Write Concern - Journaled
  • 20. Write Concern - Replica Acknowledged
  • 21. İndex • İndexler B-tree yapısında tutuluyor
  • 22. İndex Tipleri • Default _id • Tek Alan (Single Field) • Çok Alan (Compound Index) • Multikey Index (array’e index) • Geospatial Index • Text Indexes (text içinde arama için) • Hashed Indexes (hash based sharding için)
  • 23. Bazı index komutları • db.collection.createIndex() • db.collection.ensureIndex() • db.collection.getIndexStats() • db.collection.reIndex() • cursor.explain()
  • 25. Compound Index • En çok 31 alandan oluşan bir «compound index» oluşturulabilir • «hashed index» tanımlı bir alan «compound index» grubunda yer alamaz db.products.ensureIndex( { "item": 1, "stock": 1 } ) { "_id": ObjectId(...) "item": "Banana" "category": ["food", "produce", "grocery"] "location": "4th Street Store" "stock": 4 "type": cases "arrival": (...) } İki alanda index oluşturduğumuzda 2. alanda da çok sorgu olacaksa ayrıca index oluşturmak gerekir
  • 26. Multikey Index • «embedded document» ve «array» alanlar için tanımlanan index db.books.ensureIndex({ book.tags: 1 }) { "_id" : ObjectId("..."), "name" : "Warm Weather", "author" : "Steve", "tags" : [ "weather", "hot", "record", "april" ] }
  • 27. Replica Set • Verilerinizin güvenliği için başka makinelere de kopyalanması • Asenkron çalışır • Master Slave Modeli • Veri değiştikçe bazı anlarda sadece tek bir makinenin en güncel olduğu durumar sözkonusu • http://docs.mongodb.org/manual/core/replication -introduction/
  • 28. Sharding’den Önce Düşünülmesi Gerekenler • Sorguları optimize ettik mi? • index optimization • Aktif verilerin ve kullanılan indexlerin boyutunun tek makinenin RAM’ine sığmayacağı bir noktaya geldik mi? • İşletim sistemi ve dosya sistemi doğru ayarlarda mı? • EXT4/XFS, «access time tracking» kapalı olmalı • Mümkünse SSD disk ve RAID 10
  • 29. Sharding (veriyi parçalara ayırmak) 2013 verileri 2012 verileri «shard key» olarak yıl seçip verilerin tarihine göre farklı «shard»’a gitmesi sağlanabilir Mongodb shard’larda yaklaşık miktarda data olmasını ister Eğer shard’larda veri boyutu arasında fark oluşursa Veriyi taşıyarak eşitleme yapmaya çalışır Bu durumda network’de çok büyük boyutda veri taşıma gerçekleşebilir ve bu sisteminizin erişilebilirliğine zeval verebilir… dolayısıyla «shard key» seçimi önemlidir!
  • 30. Aggregation Framework db.products.aggregate([{ $group: {_id: «$brand», total: «$sum:1}} }]); SELECT brand, count(*) FROM Products GROUP BY brand
  • 32. Backup • Replicaset olarak backup • mongodump & mongorestore • https://mms.mongodb.com/ (MongoDB Backup in the Cloud)