SlideShare une entreprise Scribd logo
1  sur  36
Spring Data com MongoDB
Fabiano Guizellini Modos
Arquiteto de Software: HBSIS
Twitter: @fmodos
Github.com/fmodos
Agenda
• NOSQL vs SQL
• Document
• Key-Value
• Column
• Graph
• MongoDB Java Driver
• Spring Data MongoDB
SQL NOSQL
“Different databases are designed to solve different problems. Using a
single database engine for all of the requirements usually leads to non-
performant solutions; storing transactional data, caching session
information, traversing graph of customers and the products their friends
bought are essentially different problems.”
― Pramod J. Sadalage, NoSQL Distilled: A Brief Guide to the Emerging World
of Polyglot Persistence
“Complex applications combine different types of problems, so picking the
right language for each job may be more productive than trying to fit all
aspects into a single language.”
― Pramod J. Sadalage, NoSQL Distilled: A Brief Guide to the Emerging World
of Polyglot Persistence
SQL: Estrutura e tipo de dados são fixos
NOSQL: Estrutura dinâmica e varios modelos de
dados.
NoSQL - Modelo de Dados
• Document – orientado a JSON (MongoDB)
• Graph – oriento grafos (Neo4j)
• Key-Value – chave-valor (Redis)
• Column – orientado a colunas (Cassandra)
Document
JSON ->
Document
Document
Document
• Quando Usar?
-Armazenamento de analytics
-Ecommerce
-Blogging
• Quando não usar?
-Transações complexas
-Operações que agrupam varias estruturas
Key-Value (Chave Valor)
Key-Value
• Quando Usar?
-Armazenar sessão do usuário
-Informações de carrinho compra
• Quando não usar?
-Necessita buscar via query
-Operações de relacionamento entre dados
Column
Column
• Quando Usar?
-Sistemas gerenciamento de conteúdo,
-Dados de grande massa, exemplo log
• Quando não usar?
-Sistema que precisa fazer query com join
-Sistema no inicio do desenvolvimento
Graph
Graph
• Quando Usar?
-Rede social
-Navegação em grafos
Java MongoDB Driver
• MongoClient -> Connection
• DB -> Base de dados
• DBCollection -> Tabela
• DBObject -> Registro
• DBCursor -> ResultSet
BasicDBObject dbobject = new BasicDBObject("nome",
“Fabiano").append("sobrenome", “Modos")
….
dbobject.get("nome")
Spring Data
Spring Data
• MongoDB
• Neo4j
• Cassandra
• JDBC Extensions
• Redis
• Etc…
“This is an umbrella project which contains
many subprojects that are specific to a given
database”
Spring Data MongoDB
• Spring configuration support using Java based
@Configuration classes or an XML namespace
• MongoTemplate helper class
• Java based Query, Criteria, and Update DSLs
• GeoSpatial integration
• Etc…
“The Spring Data MongoDB project provides
integration with the MongoDB document
database. ”
Configuração
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-mongodb</artifactId>
<version>1.6.0.RELEASE</version>
</dependency>
MongoTemplate template = new MongoTemplate(new SimpleMongoDbFactory(new
MongoClient(new ServerAddress("localhost")), "database"))
<mongo:mongo host="localhost" port="27017"/>
<bean id="mongoTemplate"
class="org.springframework.data.mongodb.core.MongoTemplate">
<constructor-arg ref="mongo"/>
<constructor-arg name="databaseName" value=“database"/>
</bean>
Depência Maven ->
Instanciando um MongoTemplate:
SpringContext.xml:
MongoTemplate operations
• save - salva o objeto
• insert - insere o objeto, caso não exista
• insertAll - insere uma lista de objetos
• updateFirst - atualiza o primeiro registro de
uma query
• updateMulti - atualiza todos registros de uma
query
Update methods
• addToSet - adiciona no array
• inc - soma o numero
• pop - remove o primeiro item do array
• pull - remove o valor do array
• pullAll - remove os valores do array
• push - adiciona no array
• rename - renomeia o campo
• set - seta um valor
• unset - limpar o valor
MongoTemplate operations
• upsert - atualiza ou insere o registro da query
• findAndModify – encontra e altera o registro
da query
• Remove – remove o objeto
MongoTemplate operations
• findAll – retorna todos objetos de uma classe
• findOne – retorna um objeto da query
• findById – retorna o objeto desse id
• Find – retorna todos objetos da query
• findAndRemove – remove e retorna o
primeiro objeto da query
Criteria methods
• and – operador ‘e’ exists –se campo existe
• gt, gte – maior que, maior igual que
• lt, lte – menor que, menor igual que
• is – operador ‘=‘
• in – valor esta na lista
• not – operador de negação
• regex – expressão regular
• size – tamanho do array
Full Text Query
• Busca por texto em mais de uma propriedade
de um documento
• @TextIndexed(weight=1)
• Query q = TextQuery.searching(new
TextCriteria().matching(“java"));
GeoSpatial Query
• withinCenter - na area de um Circle
• withinCenterSphere - na are de uma Circle
• withinBox – na area de uma Box
• near – perto de um Point
• nearSphere - perto de um Circle
• maxDistance – com a distancia maxima de
Exemplos - GeoSpatial
Box box = new Box(new Point(-73.99756, 40.73083), new Point(-73.988135,
40.741404));
List<Player> venues =
template.find(new Query(Criteria.where("location").withinBox(box)), Player.class);
private double[] location;
1. Buscar por uma area
Exemplos - GeoSpatial
Point location = new Point(-73.99171, 40.738868);
NearQuery query = NearQuery.near(location).maxDistance(new Distance(10,
Metrics.MILES));
GeoResults<GuriaSolteira> = operations.geoNear(query, GuriaSolteira.class);
2. Busca por uma distancia maxima
SpringData Repositories
• Abstraction to reduce code required to
implement data access layers for various
persistence stores.
MongoDB Repositories
Referências
• http://www.thoughtworks.com/pt/insights/blog/
nosql-databases-overview
• http://projects.spring.io/spring-boot/
• http://docs.spring.io/spring-
data/mongodb/docs/current/reference/html/
• Livro: NoSQL Distilled
• https://spring.io/guides/gs/accessing-data-
mongodb/
• http://docs.mongodb.org/manual/
Spring Data MongoDB - Uma introdução ao framework para bancos NoSQL

Contenu connexe

Similaire à Spring Data MongoDB - Uma introdução ao framework para bancos NoSQL

Introdução no sql mongodb java
Introdução no sql mongodb javaIntrodução no sql mongodb java
Introdução no sql mongodb javaFabiano Modos
 
No sql Orientado a documento
No sql Orientado a documentoNo sql Orientado a documento
No sql Orientado a documentoAlex Martins
 
FireDAC para BigDATA: Teradata e MongoDB
FireDAC para BigDATA: Teradata e MongoDBFireDAC para BigDATA: Teradata e MongoDB
FireDAC para BigDATA: Teradata e MongoDBAlan Glei
 
Mongo DB
Mongo DBMongo DB
Mongo DBdist_bp
 
Desenvolvimento de aplicações PHP com MongoDB
Desenvolvimento de aplicações PHP com MongoDBDesenvolvimento de aplicações PHP com MongoDB
Desenvolvimento de aplicações PHP com MongoDBAri Stopassola Junior
 
Processos iniciais do mapeamento OR
Processos iniciais do mapeamento ORProcessos iniciais do mapeamento OR
Processos iniciais do mapeamento ORNécio de Lima Veras
 
MongoDB - Tudo que você precisa saber - FGSL 2014
MongoDB - Tudo que você precisa saber - FGSL 2014MongoDB - Tudo que você precisa saber - FGSL 2014
MongoDB - Tudo que você precisa saber - FGSL 2014Christiano Anderson
 
Document store e Mongodb
Document store e MongodbDocument store e Mongodb
Document store e MongodbAline Ferreira
 
Utilizando NoSQL no desenvolvimento de soluções inteligentes
Utilizando NoSQL no desenvolvimento de soluções inteligentesUtilizando NoSQL no desenvolvimento de soluções inteligentes
Utilizando NoSQL no desenvolvimento de soluções inteligentesChristiano Anderson
 
MongoDB Schema Design - Latinoware 2014
MongoDB Schema Design - Latinoware 2014MongoDB Schema Design - Latinoware 2014
MongoDB Schema Design - Latinoware 2014Christiano Anderson
 
MongoDB - Tudo o que você precisa saber
MongoDB - Tudo o que você precisa saberMongoDB - Tudo o que você precisa saber
MongoDB - Tudo o que você precisa saberChristiano Anderson
 
Introdução a NoSQL com MongoDB e FireDAC
Introdução a NoSQL com MongoDB e FireDAC Introdução a NoSQL com MongoDB e FireDAC
Introdução a NoSQL com MongoDB e FireDAC Fernando Rizzato
 
Padrões de Design para MapReduce
Padrões de Design para MapReducePadrões de Design para MapReduce
Padrões de Design para MapReduceKarla Okada
 
MongoDB - Apresentação
MongoDB - ApresentaçãoMongoDB - Apresentação
MongoDB - ApresentaçãoTerra / Neo
 
MongoDB também no Azure? SIM! - DevOps Summit 2017
MongoDB também no Azure? SIM! - DevOps Summit 2017MongoDB também no Azure? SIM! - DevOps Summit 2017
MongoDB também no Azure? SIM! - DevOps Summit 2017Renato Groff
 
Pepe Legal Python e Babalu MongoDB, uma dupla dinâmica
Pepe Legal Python e Babalu MongoDB, uma dupla dinâmicaPepe Legal Python e Babalu MongoDB, uma dupla dinâmica
Pepe Legal Python e Babalu MongoDB, uma dupla dinâmicaFATEC São José dos Campos
 
MongoDB Aggregation Framework
MongoDB Aggregation FrameworkMongoDB Aggregation Framework
MongoDB Aggregation FrameworkLeandro Domingues
 

Similaire à Spring Data MongoDB - Uma introdução ao framework para bancos NoSQL (20)

Introdução no sql mongodb java
Introdução no sql mongodb javaIntrodução no sql mongodb java
Introdução no sql mongodb java
 
Minicurso mongo db
Minicurso mongo dbMinicurso mongo db
Minicurso mongo db
 
No sql Orientado a documento
No sql Orientado a documentoNo sql Orientado a documento
No sql Orientado a documento
 
FireDAC para BigDATA: Teradata e MongoDB
FireDAC para BigDATA: Teradata e MongoDBFireDAC para BigDATA: Teradata e MongoDB
FireDAC para BigDATA: Teradata e MongoDB
 
Mongo DB
Mongo DBMongo DB
Mongo DB
 
Desenvolvimento de aplicações PHP com MongoDB
Desenvolvimento de aplicações PHP com MongoDBDesenvolvimento de aplicações PHP com MongoDB
Desenvolvimento de aplicações PHP com MongoDB
 
Processos iniciais do mapeamento OR
Processos iniciais do mapeamento ORProcessos iniciais do mapeamento OR
Processos iniciais do mapeamento OR
 
Pos-QCon-BigData
Pos-QCon-BigDataPos-QCon-BigData
Pos-QCon-BigData
 
MongoDB - Tudo que você precisa saber - FGSL 2014
MongoDB - Tudo que você precisa saber - FGSL 2014MongoDB - Tudo que você precisa saber - FGSL 2014
MongoDB - Tudo que você precisa saber - FGSL 2014
 
Document store e Mongodb
Document store e MongodbDocument store e Mongodb
Document store e Mongodb
 
Utilizando NoSQL no desenvolvimento de soluções inteligentes
Utilizando NoSQL no desenvolvimento de soluções inteligentesUtilizando NoSQL no desenvolvimento de soluções inteligentes
Utilizando NoSQL no desenvolvimento de soluções inteligentes
 
MongoDB Schema Design - Latinoware 2014
MongoDB Schema Design - Latinoware 2014MongoDB Schema Design - Latinoware 2014
MongoDB Schema Design - Latinoware 2014
 
MongoDB - Tudo o que você precisa saber
MongoDB - Tudo o que você precisa saberMongoDB - Tudo o que você precisa saber
MongoDB - Tudo o que você precisa saber
 
Introdução a NoSQL com MongoDB e FireDAC
Introdução a NoSQL com MongoDB e FireDAC Introdução a NoSQL com MongoDB e FireDAC
Introdução a NoSQL com MongoDB e FireDAC
 
Padrões de Design para MapReduce
Padrões de Design para MapReducePadrões de Design para MapReduce
Padrões de Design para MapReduce
 
MongoDB - Apresentação
MongoDB - ApresentaçãoMongoDB - Apresentação
MongoDB - Apresentação
 
MongoDB também no Azure? SIM! - DevOps Summit 2017
MongoDB também no Azure? SIM! - DevOps Summit 2017MongoDB também no Azure? SIM! - DevOps Summit 2017
MongoDB também no Azure? SIM! - DevOps Summit 2017
 
Mongo db slides
Mongo db slidesMongo db slides
Mongo db slides
 
Pepe Legal Python e Babalu MongoDB, uma dupla dinâmica
Pepe Legal Python e Babalu MongoDB, uma dupla dinâmicaPepe Legal Python e Babalu MongoDB, uma dupla dinâmica
Pepe Legal Python e Babalu MongoDB, uma dupla dinâmica
 
MongoDB Aggregation Framework
MongoDB Aggregation FrameworkMongoDB Aggregation Framework
MongoDB Aggregation Framework
 

Plus de Fabiano Modos

Arquitetura Orientada a Atores
Arquitetura Orientada a AtoresArquitetura Orientada a Atores
Arquitetura Orientada a AtoresFabiano Modos
 
Akka: Arquitetura Orientada a Atores
Akka: Arquitetura Orientada a AtoresAkka: Arquitetura Orientada a Atores
Akka: Arquitetura Orientada a AtoresFabiano Modos
 
Akka: Brincando com Atores
Akka: Brincando com AtoresAkka: Brincando com Atores
Akka: Brincando com AtoresFabiano Modos
 
Architecting For Resilience
Architecting For ResilienceArchitecting For Resilience
Architecting For ResilienceFabiano Modos
 
Arquitetando com buzzwords
Arquitetando com buzzwordsArquitetando com buzzwords
Arquitetando com buzzwordsFabiano Modos
 
Arquiteturaentregacontinuav2 160513025436
Arquiteturaentregacontinuav2 160513025436Arquiteturaentregacontinuav2 160513025436
Arquiteturaentregacontinuav2 160513025436Fabiano Modos
 
Real time com java e Node.Js
Real time com java e Node.JsReal time com java e Node.Js
Real time com java e Node.JsFabiano Modos
 
Lições Aprendidas MongoDB
Lições Aprendidas MongoDBLições Aprendidas MongoDB
Lições Aprendidas MongoDBFabiano Modos
 

Plus de Fabiano Modos (9)

Arquitetura Orientada a Atores
Arquitetura Orientada a AtoresArquitetura Orientada a Atores
Arquitetura Orientada a Atores
 
Akka: Arquitetura Orientada a Atores
Akka: Arquitetura Orientada a AtoresAkka: Arquitetura Orientada a Atores
Akka: Arquitetura Orientada a Atores
 
Akka: Brincando com Atores
Akka: Brincando com AtoresAkka: Brincando com Atores
Akka: Brincando com Atores
 
Architecting For Resilience
Architecting For ResilienceArchitecting For Resilience
Architecting For Resilience
 
Arquitetando com buzzwords
Arquitetando com buzzwordsArquitetando com buzzwords
Arquitetando com buzzwords
 
Arquiteturaentregacontinuav2 160513025436
Arquiteturaentregacontinuav2 160513025436Arquiteturaentregacontinuav2 160513025436
Arquiteturaentregacontinuav2 160513025436
 
Real time com java e Node.Js
Real time com java e Node.JsReal time com java e Node.Js
Real time com java e Node.Js
 
Lições Aprendidas MongoDB
Lições Aprendidas MongoDBLições Aprendidas MongoDB
Lições Aprendidas MongoDB
 
Arquitetura Reativa
Arquitetura ReativaArquitetura Reativa
Arquitetura Reativa
 

Spring Data MongoDB - Uma introdução ao framework para bancos NoSQL

  • 1. Spring Data com MongoDB Fabiano Guizellini Modos Arquiteto de Software: HBSIS Twitter: @fmodos Github.com/fmodos
  • 2. Agenda • NOSQL vs SQL • Document • Key-Value • Column • Graph • MongoDB Java Driver • Spring Data MongoDB
  • 4. “Different databases are designed to solve different problems. Using a single database engine for all of the requirements usually leads to non- performant solutions; storing transactional data, caching session information, traversing graph of customers and the products their friends bought are essentially different problems.” ― Pramod J. Sadalage, NoSQL Distilled: A Brief Guide to the Emerging World of Polyglot Persistence “Complex applications combine different types of problems, so picking the right language for each job may be more productive than trying to fit all aspects into a single language.” ― Pramod J. Sadalage, NoSQL Distilled: A Brief Guide to the Emerging World of Polyglot Persistence
  • 5. SQL: Estrutura e tipo de dados são fixos NOSQL: Estrutura dinâmica e varios modelos de dados.
  • 6. NoSQL - Modelo de Dados • Document – orientado a JSON (MongoDB) • Graph – oriento grafos (Neo4j) • Key-Value – chave-valor (Redis) • Column – orientado a colunas (Cassandra)
  • 10. Document • Quando Usar? -Armazenamento de analytics -Ecommerce -Blogging • Quando não usar? -Transações complexas -Operações que agrupam varias estruturas
  • 12. Key-Value • Quando Usar? -Armazenar sessão do usuário -Informações de carrinho compra • Quando não usar? -Necessita buscar via query -Operações de relacionamento entre dados
  • 14. Column • Quando Usar? -Sistemas gerenciamento de conteúdo, -Dados de grande massa, exemplo log • Quando não usar? -Sistema que precisa fazer query com join -Sistema no inicio do desenvolvimento
  • 15. Graph
  • 16. Graph • Quando Usar? -Rede social -Navegação em grafos
  • 17. Java MongoDB Driver • MongoClient -> Connection • DB -> Base de dados • DBCollection -> Tabela • DBObject -> Registro • DBCursor -> ResultSet
  • 18. BasicDBObject dbobject = new BasicDBObject("nome", “Fabiano").append("sobrenome", “Modos") …. dbobject.get("nome")
  • 20. Spring Data • MongoDB • Neo4j • Cassandra • JDBC Extensions • Redis • Etc… “This is an umbrella project which contains many subprojects that are specific to a given database”
  • 21. Spring Data MongoDB • Spring configuration support using Java based @Configuration classes or an XML namespace • MongoTemplate helper class • Java based Query, Criteria, and Update DSLs • GeoSpatial integration • Etc… “The Spring Data MongoDB project provides integration with the MongoDB document database. ”
  • 22. Configuração <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-mongodb</artifactId> <version>1.6.0.RELEASE</version> </dependency> MongoTemplate template = new MongoTemplate(new SimpleMongoDbFactory(new MongoClient(new ServerAddress("localhost")), "database")) <mongo:mongo host="localhost" port="27017"/> <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate"> <constructor-arg ref="mongo"/> <constructor-arg name="databaseName" value=“database"/> </bean> Depência Maven -> Instanciando um MongoTemplate: SpringContext.xml:
  • 23. MongoTemplate operations • save - salva o objeto • insert - insere o objeto, caso não exista • insertAll - insere uma lista de objetos • updateFirst - atualiza o primeiro registro de uma query • updateMulti - atualiza todos registros de uma query
  • 24. Update methods • addToSet - adiciona no array • inc - soma o numero • pop - remove o primeiro item do array • pull - remove o valor do array • pullAll - remove os valores do array • push - adiciona no array • rename - renomeia o campo • set - seta um valor • unset - limpar o valor
  • 25. MongoTemplate operations • upsert - atualiza ou insere o registro da query • findAndModify – encontra e altera o registro da query • Remove – remove o objeto
  • 26. MongoTemplate operations • findAll – retorna todos objetos de uma classe • findOne – retorna um objeto da query • findById – retorna o objeto desse id • Find – retorna todos objetos da query • findAndRemove – remove e retorna o primeiro objeto da query
  • 27. Criteria methods • and – operador ‘e’ exists –se campo existe • gt, gte – maior que, maior igual que • lt, lte – menor que, menor igual que • is – operador ‘=‘ • in – valor esta na lista • not – operador de negação • regex – expressão regular • size – tamanho do array
  • 28. Full Text Query • Busca por texto em mais de uma propriedade de um documento • @TextIndexed(weight=1) • Query q = TextQuery.searching(new TextCriteria().matching(“java"));
  • 29. GeoSpatial Query • withinCenter - na area de um Circle • withinCenterSphere - na are de uma Circle • withinBox – na area de uma Box • near – perto de um Point • nearSphere - perto de um Circle • maxDistance – com a distancia maxima de
  • 30. Exemplos - GeoSpatial Box box = new Box(new Point(-73.99756, 40.73083), new Point(-73.988135, 40.741404)); List<Player> venues = template.find(new Query(Criteria.where("location").withinBox(box)), Player.class); private double[] location; 1. Buscar por uma area
  • 31. Exemplos - GeoSpatial Point location = new Point(-73.99171, 40.738868); NearQuery query = NearQuery.near(location).maxDistance(new Distance(10, Metrics.MILES)); GeoResults<GuriaSolteira> = operations.geoNear(query, GuriaSolteira.class); 2. Busca por uma distancia maxima
  • 32. SpringData Repositories • Abstraction to reduce code required to implement data access layers for various persistence stores.
  • 34.
  • 35. Referências • http://www.thoughtworks.com/pt/insights/blog/ nosql-databases-overview • http://projects.spring.io/spring-boot/ • http://docs.spring.io/spring- data/mongodb/docs/current/reference/html/ • Livro: NoSQL Distilled • https://spring.io/guides/gs/accessing-data- mongodb/ • http://docs.mongodb.org/manual/