NoSQL, Spring Data MongoDB
Ümit VARDAR
@umitvardar
NoSQL (Not Only SQL)
• Yeni Nesil Veritabanları
• Özellikler:
• İlişkisel değil
• Dağıtık
• Enlemesine ve boylamasına ölçeklenebilirlik
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)
NoSQL DB Listesi
• Big Table: Hadoop, Cassandra, ...
• Document: MongoDB, CouchDB, ...
• Key-Value: Redis, Riak, ...
• Graph: Neo4J, ...
• ...
Mongo DB
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
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..
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.
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
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)
Mongo Shell
• MongoDB shell version: 2.2.0
connecting to: test
> help
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
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 } )
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ı”)
Demo
Spring Data MongoDB
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
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ü
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..
XML Context Config
XML Context Config devam
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
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 :-)
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);
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"});
Demo

AnkaraJUG Haziran 2013 - No SQL / Big Data

  • 1.
    NoSQL, Spring DataMongoDB Ümit VARDAR @umitvardar
  • 2.
    NoSQL (Not OnlySQL) • 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.
  • 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 ŞemaTasarı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 veKullanı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 • Sunucununbaş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 • MongoDBshell version: 2.2.0 connecting to: test > help
  • 12.
    Mongo Shell • JavaScriptdestekli 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 TemelKomutlar • 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 TemelKomutlar • 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.
  • 16.
  • 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.
  • 21.
  • 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 veCrudRepsitory 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.