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