Your SlideShare is downloading. ×
AnkaraJUG Haziran 2013 - No SQL / Big Data
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

AnkaraJUG Haziran 2013 - No SQL / Big Data

167

Published on

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
167
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. NoSQL, Spring Data MongoDB Ümit VARDAR @umitvardar
  • 2. NoSQL (Not Only SQL) • Yeni Nesil Veritabanları • Özellikler: • İlişkisel değil • Dağıtık • Enlemesine ve boylamasına ölçeklenebilirlik
  • 3. Web Çağına Uygun Özellikler (Big Data) • Şema serbestisi • Büyük miktarda veri • Map-Reduce işlevleri • Kolay replikasyon desteği • Basit API • Açık Kaynak (genellikle)
  • 4. NoSQL DB Listesi • Big Table: Hadoop, Cassandra, ... • Document: MongoDB, CouchDB, ... • Key-Value: Redis, Riak, ... • Graph: Neo4J, ... • ...
  • 5. Mongo DB
  • 6. MongoDB • Belge tabanlı saklama yöntemi; BSON (binary JSON) • Belgedeki her nitelik indekslenebilir • Replikasyon ve Erişilebilirlik • GridFS • Sürücüler: C, C++, JavaScript, Perl, PHP, Java... • C++ ile geliştirilmiş • http://mongodb.org
  • 7. MongoDB Kullanım Senaryoları • Web Uygulamaları • İçerik Yönetimi, “schema free” • Log ve Analitik Uygulamaları, hızlı, map-reduce özelliği • Çevik Geliştirme • “Caching”, MySQL-memcached ikilisi yerine • JSON’ın yoğun bir şekilde kullanıldığı ortamlar..
  • 8. MongoDB ve Şema Tasarımı • MongoDB de dokümanlar: • “Database” ve “Collections” yapıları altında hiyerarşik bir şekilde saklanırlar • Şema tasarlarken verileri “doğal”, “de-normalized” bir şekilde düşünün. • Şemalar, veriler kendi içerisinde “bütün”; “self-contained” olacak şekilde tasarlanmalıdır.
  • 9. MongoDB Yüklenmesi ve Kullanımı • 64 bit sürümlerini tercih edilmeli. Verilerin “big-data” olduğu unutlmamalı, 32 bit tüm veriyi adreslemek için yetmeyecektir. • Linux, Windows, OS X, Solaris desteklenen ortamlar • *.tgz formatında dağıtım.. • www.mongodb.org/downloads
  • 10. MongoDB Kullanım • Sunucunun başlatılması <MongoDB Dir>/bin/mongod --dbpath ./data/db • Etkileşim, yönetim için “shell” uygulamasını kullanabiliriz. <MongoDB Dir>/bin/mongo • Çeşitli MongoDB istemcileri var • MongoHUB (OS/X), • Mongo UI (JavaFX), Kamil ÖRS liderliğinde geliştirilmekte, Açık kaynak :) https://github.com/droidpark/mongodbui • MongoExplorer (.NET)
  • 11. Mongo Shell • MongoDB shell version: 2.2.0 connecting to: test > help
  • 12. Mongo Shell • JavaScript destekli komut satır arayüz kullanımı, komutlar harf büyüklüğüne duyarlı • Örnek Admin Komutları >show dbs db leri listeler >show collections doküman topluluklarını listeler >use test sonraki komutlarda belirtilen db yi kullanır >db.createCollection(“documents”) doküman topluluğu oluşturur >db.”collection”.drop() topluluğu siler >db.help() yardımları listeler >db.version() mongodb sürüm numarası >db.stats() istatistikleri verir
  • 13. Mongo Shell Temel Komutlar • Ekleme > db.documents.save( { docNo : 1 }) • Güncelleme > db.documents.update( { docNo : 1 }, { $set : { “desc” : “ dilekçe” }}) > db.documents.update( { docNo : 1 }, { $unset : { “desc” : 1 }}) • Sorgulama >db.documents.find( {docNo : { $gt : 4, $lt : 100 } } ) • Silme >db.documents.remove( { docNo : 100 } )
  • 14. Mongo Shell Temel Komutlar • Explain >db.documents.find( { docNo : { $gt : 21 } } ).explain() • Indeks Oluşturma >db.documents.ensureIndex( { docNo : 1 } ) >db.documents.getIndexes() >db.documents.getIndexKeys() >db.documents.dropIndexes() >db.documents.dropIndex(“index adı”)
  • 15. Demo
  • 16. Spring Data MongoDB
  • 17. Spring Data Projesi • Springframework içerisinde geliştirilen veri erişim çatısı. • JPA, Hadoop, • Neo4j, Gemfire, • HBase, Redis, • ElasticSearch, Solr, ... • MongoDB ayrı projeler, aynı ilkeler
  • 18. Spring Data MongoDB Özellikleri • Spring ilkelerine bağlı, XML ve @Configuration desteği, isimlendirme (namepsace) desteği. • POJO dan Dokümana eşleştirme desteği • MongoTemplate ile verilere kolay, etkin erişim. İstisnaları (exception) ortak ele alma özelliği • DSL kullanımı, Query, Criteria, Update DSL • Repository arayüzü
  • 19. Spring Data MongoDB Özellikleri, devam • GridFS desteği • Geospatial desteği • JMX ve CDI desteği • “Cross Store” JPA varlıkları MongoDB varlıklarıyla saklanır/getirilir son günlerin gözde konularından biri..
  • 20. XML Context Config
  • 21. XML Context Config devam
  • 22. Query, Criteria • Query örnek List<CMSDocument> documents = mongoTemplate.find(query(where (“docNo”).lt(100))); • Query addCriteria, limit, fields, skip, sort metodlarına sahiptir • Criteria all, and, andOperator, exists, gte, gt, in, is, ne vb metodları destekler
  • 23. Repository • PagingAndSortingRepsitory ve CrudRepsitory i extend eden bir interfacedir. • DSL, metod isminden sorguyu üretir. Bu nedenle kullanılan sozcüklerin model içerisinde bir alana karşılık gelmesine dikkate edilmelidir. • find, findAll, delete, deleteAll, save metodları hazırdır. • Diğerlerini yazmak kolay :-)
  • 24. Repository devam • // parentID ve isCurrent değerleri verilenlerle aynı olanı bul Page<DMSContent> findByParentIdAndIsCurrentWithPermission(String parentId, boolean isCurrent, Pageable pageable); Page ve Pageable nesneleri Spring Data trafından sağlanır. // pti ve serial number’ı aynı olan ve lastUpdate tarihi daha yeni olanı bul. @Query("{ passTypeIdentifier : { $eq : ?0 }, serialNumber : { $eq : ?1}, lastUpdated : { $gt : ?2} }") Pass findByPassTypeIdentifierAndSerialNumberAndModifiedSince( String passTypeIdentifier, String serialNumber, Date modifiedSince); @Query("{ value : { $gt : ?0 }, DocNo : { $lt : ?1 }}") List<CMSDocument> findByValueDocNo(int value, int docNo); @Query("{ tags : {$in: ?0 } }") List<CMSDocument> findByTags(String[] tags);
  • 25. Repository Kullanımı • Repository “inject” edilir @Autowired(required = true) CMSRepository repository; • .. ve kullanılır CMSDocument document = repository.findByDocNo(1); document.getTags().add("bir"); document.getTags().add("diğer"); repository.save(document); List<CMSDocument> documents = repository.findByTags(new String[]{"bir"});
  • 26. Demo

×