introdução no sql mongodb java
TRANSCRIPT
![Page 1: Introdução no sql mongodb java](https://reader034.vdocuments.site/reader034/viewer/2022052607/58ad37221a28ab02268b65ed/html5/thumbnails/1.jpg)
Introdução ao Mundo NoSQL com MongoDB e Java
Fabiano Guizellini ModosArquiteto de Software: HBSIS
Twitter: @fmodos
Github.com/fmodos
![Page 2: Introdução no sql mongodb java](https://reader034.vdocuments.site/reader034/viewer/2022052607/58ad37221a28ab02268b65ed/html5/thumbnails/2.jpg)
Agenda
• NOSQL vs SQL• Key-Value• Column• Graph• Document• CAP Theorem• MongoDB Java Driver• Spring Data MongoDB• Estudo de Caso
![Page 3: Introdução no sql mongodb java](https://reader034.vdocuments.site/reader034/viewer/2022052607/58ad37221a28ab02268b65ed/html5/thumbnails/3.jpg)
SQL NOSQL
![Page 4: Introdução no sql mongodb java](https://reader034.vdocuments.site/reader034/viewer/2022052607/58ad37221a28ab02268b65ed/html5/thumbnails/4.jpg)
“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
![Page 5: Introdução no sql mongodb java](https://reader034.vdocuments.site/reader034/viewer/2022052607/58ad37221a28ab02268b65ed/html5/thumbnails/5.jpg)
SQL: Estrutura e tipo de dados são fixos
NOSQL: Estrutura dinâmica e varios modelos de dados.
![Page 6: Introdução no sql mongodb java](https://reader034.vdocuments.site/reader034/viewer/2022052607/58ad37221a28ab02268b65ed/html5/thumbnails/6.jpg)
NoSQL - Modelo de Dados
• Key-Value – chave-valor (Redis)
• Column – orientado a colunas (Cassandra)
• Graph – oriento grafos (Neo4j)
• Document – orientado a JSON (MongoDB)
![Page 7: Introdução no sql mongodb java](https://reader034.vdocuments.site/reader034/viewer/2022052607/58ad37221a28ab02268b65ed/html5/thumbnails/7.jpg)
Key-Value (Chave Valor)
![Page 8: Introdução no sql mongodb java](https://reader034.vdocuments.site/reader034/viewer/2022052607/58ad37221a28ab02268b65ed/html5/thumbnails/8.jpg)
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
![Page 9: Introdução no sql mongodb java](https://reader034.vdocuments.site/reader034/viewer/2022052607/58ad37221a28ab02268b65ed/html5/thumbnails/9.jpg)
Column
![Page 10: Introdução no sql mongodb java](https://reader034.vdocuments.site/reader034/viewer/2022052607/58ad37221a28ab02268b65ed/html5/thumbnails/10.jpg)
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
![Page 11: Introdução no sql mongodb java](https://reader034.vdocuments.site/reader034/viewer/2022052607/58ad37221a28ab02268b65ed/html5/thumbnails/11.jpg)
Graph
![Page 12: Introdução no sql mongodb java](https://reader034.vdocuments.site/reader034/viewer/2022052607/58ad37221a28ab02268b65ed/html5/thumbnails/12.jpg)
Graph
• Quando Usar?-Rede social-Navegação em grafos
![Page 13: Introdução no sql mongodb java](https://reader034.vdocuments.site/reader034/viewer/2022052607/58ad37221a28ab02268b65ed/html5/thumbnails/13.jpg)
Document
JSON ->
![Page 14: Introdução no sql mongodb java](https://reader034.vdocuments.site/reader034/viewer/2022052607/58ad37221a28ab02268b65ed/html5/thumbnails/14.jpg)
Document
![Page 15: Introdução no sql mongodb java](https://reader034.vdocuments.site/reader034/viewer/2022052607/58ad37221a28ab02268b65ed/html5/thumbnails/15.jpg)
Document
![Page 16: Introdução no sql mongodb java](https://reader034.vdocuments.site/reader034/viewer/2022052607/58ad37221a28ab02268b65ed/html5/thumbnails/16.jpg)
Document
• Quando Usar?-Armazenamento de analytics-Ecommerce-Blogging
• Quando não usar?-Transações complexas-Operações que agrupam varias estruturas
![Page 17: Introdução no sql mongodb java](https://reader034.vdocuments.site/reader034/viewer/2022052607/58ad37221a28ab02268b65ed/html5/thumbnails/17.jpg)
![Page 18: Introdução no sql mongodb java](https://reader034.vdocuments.site/reader034/viewer/2022052607/58ad37221a28ab02268b65ed/html5/thumbnails/18.jpg)
CAP Theorem
![Page 19: Introdução no sql mongodb java](https://reader034.vdocuments.site/reader034/viewer/2022052607/58ad37221a28ab02268b65ed/html5/thumbnails/19.jpg)
![Page 20: Introdução no sql mongodb java](https://reader034.vdocuments.site/reader034/viewer/2022052607/58ad37221a28ab02268b65ed/html5/thumbnails/20.jpg)
Java MongoDB Driver
• MongoClient -> Connection
• DB -> Base de dados
• DBCollection -> Tabela
• DBObject -> Registro
• DBCursor -> ResultSet
![Page 21: Introdução no sql mongodb java](https://reader034.vdocuments.site/reader034/viewer/2022052607/58ad37221a28ab02268b65ed/html5/thumbnails/21.jpg)
![Page 22: Introdução no sql mongodb java](https://reader034.vdocuments.site/reader034/viewer/2022052607/58ad37221a28ab02268b65ed/html5/thumbnails/22.jpg)
Spring Data
![Page 23: Introdução no sql mongodb java](https://reader034.vdocuments.site/reader034/viewer/2022052607/58ad37221a28ab02268b65ed/html5/thumbnails/23.jpg)
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”
![Page 24: Introdução no sql mongodb java](https://reader034.vdocuments.site/reader034/viewer/2022052607/58ad37221a28ab02268b65ed/html5/thumbnails/24.jpg)
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. ”
![Page 25: Introdução no sql mongodb java](https://reader034.vdocuments.site/reader034/viewer/2022052607/58ad37221a28ab02268b65ed/html5/thumbnails/25.jpg)
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"))
Depência Maven ->
Instanciando um MongoTemplate:
![Page 26: Introdução no sql mongodb java](https://reader034.vdocuments.site/reader034/viewer/2022052607/58ad37221a28ab02268b65ed/html5/thumbnails/26.jpg)
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 umaquery
• updateMulti - atualiza todos registros de umaquery
![Page 27: Introdução no sql mongodb java](https://reader034.vdocuments.site/reader034/viewer/2022052607/58ad37221a28ab02268b65ed/html5/thumbnails/27.jpg)
MongoTemplate operations
• 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
![Page 28: Introdução no sql mongodb java](https://reader034.vdocuments.site/reader034/viewer/2022052607/58ad37221a28ab02268b65ed/html5/thumbnails/28.jpg)
MongoTemplate operations
• upsert - atualiza ou insere o registro da query
• findAndModify – encontra e altera o registroda query
• Remove – remove o objeto
![Page 29: Introdução no sql mongodb java](https://reader034.vdocuments.site/reader034/viewer/2022052607/58ad37221a28ab02268b65ed/html5/thumbnails/29.jpg)
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"));
![Page 30: Introdução no sql mongodb java](https://reader034.vdocuments.site/reader034/viewer/2022052607/58ad37221a28ab02268b65ed/html5/thumbnails/30.jpg)
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
![Page 31: Introdução no sql mongodb java](https://reader034.vdocuments.site/reader034/viewer/2022052607/58ad37221a28ab02268b65ed/html5/thumbnails/31.jpg)
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
![Page 32: Introdução no sql mongodb java](https://reader034.vdocuments.site/reader034/viewer/2022052607/58ad37221a28ab02268b65ed/html5/thumbnails/32.jpg)
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
![Page 33: Introdução no sql mongodb java](https://reader034.vdocuments.site/reader034/viewer/2022052607/58ad37221a28ab02268b65ed/html5/thumbnails/33.jpg)
SpringData Repositories
• Abstração para reduzir a quantidade de código de acesso a dados
![Page 34: Introdução no sql mongodb java](https://reader034.vdocuments.site/reader034/viewer/2022052607/58ad37221a28ab02268b65ed/html5/thumbnails/34.jpg)
Estudo de Caso
• Desenvolver uma aplicação que permita cadastrar pratos de comida. Cada prato deve conter um nome, uma descrição e os ingredientes. Deve permitir também a inserção de comentários para cada prato.
![Page 35: Introdução no sql mongodb java](https://reader034.vdocuments.site/reader034/viewer/2022052607/58ad37221a28ab02268b65ed/html5/thumbnails/35.jpg)
Diagrama de Classe
![Page 36: Introdução no sql mongodb java](https://reader034.vdocuments.site/reader034/viewer/2022052607/58ad37221a28ab02268b65ed/html5/thumbnails/36.jpg)
Modelagem Relacional
![Page 37: Introdução no sql mongodb java](https://reader034.vdocuments.site/reader034/viewer/2022052607/58ad37221a28ab02268b65ed/html5/thumbnails/37.jpg)
Modelagem NoSQL (Document)
![Page 38: Introdução no sql mongodb java](https://reader034.vdocuments.site/reader034/viewer/2022052607/58ad37221a28ab02268b65ed/html5/thumbnails/38.jpg)
![Page 39: Introdução no sql mongodb java](https://reader034.vdocuments.site/reader034/viewer/2022052607/58ad37221a28ab02268b65ed/html5/thumbnails/39.jpg)
Stack Demo
Código Fonte: https://github.com/fmodos/blog-angularjs-mongodb
![Page 40: Introdução no sql mongodb java](https://reader034.vdocuments.site/reader034/viewer/2022052607/58ad37221a28ab02268b65ed/html5/thumbnails/40.jpg)
![Page 41: Introdução no sql mongodb java](https://reader034.vdocuments.site/reader034/viewer/2022052607/58ad37221a28ab02268b65ed/html5/thumbnails/41.jpg)