Top Banner
Modelo NoSQL orientado à documentos Modelo NoSQL orientado à documentos Bruno Gabriel dos Santos [email protected]
30

Mongopesl

Jul 09, 2015

Download

Documents

PeslPinguim
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Mongopesl

Modelo NoSQL orientado à documentosModelo NoSQL orientado à documentos

Bruno Gabriel dos Santos [email protected]

Page 2: Mongopesl

AgendaAgenda

Tópicos:1. O que é NoSQL?2. MongoDB;3. Exemplo de Modelagem;4. Instruções básicas;5. Geoposition;6. Modelo Pipeline;7. Referências.

Page 3: Mongopesl

NoSQL: Not Only SQLNoSQL: Not Only SQL

Banco de Dados não relacional, nada de ACID:● Modelo BASE Eventual: uma hora vai →acontecer;

● Uso: Grandes quantidades de dados não estruturados:● Arquivos textuais, e-mail, multimídia etc.;

● Características:● Eventual: uma hora vai acontecer;● Arquitetura simplificada;● Alta performance.

Page 4: Mongopesl

NoSQL: Breve histórico...NoSQL: Breve histórico...

● Surgimento: 2009;● Johan Oskarsson e Eric Evans;● Objectivo: Discutir o crescente surgimento de novas soluções open source para armazenamento de dados distribuídos de forma “não relacional”.

Page 5: Mongopesl

Não Relacional X RelacionalNão Relacional X Relacional

● Distribuição:● Dados particionados, distribuídos em inúmeros servidores, p.e: computação em núvem;

● Evita perda de dados: Distribuição.● Sem normalização;● Desempenho: abrir mão da consistência:

● Consistência envolve:● Integridade de dados;● Unicidade de chaves e valores lógicos;● Sem duplicação.

Page 6: Mongopesl

Imagem retirada de:

http://highlyscalable.wordpress.com/2012/03/01/nosql-data-modeling-techniques/

Page 7: Mongopesl

Imagem retirada de:

http://highlyscalable.wordpress.com/2012/03/01/nosql-data-modeling-techniques/

Page 8: Mongopesl

Modelos de base de dadosModelos de base de dados

● Chave/Valor;● Orientado à grafos;● Orientado à documentos;● Família de colunas.

Page 9: Mongopesl

Chave/ValorChave/Valor

● Prós:● Semelhança: Hash/Map;● Simplicidades;● Query constante: Qual a complexidade O(?):

● Chaves indexadas: <key, value>.● Cache de memória;

● Contras:● Complexidade na elaboração de chaves;● Apenas um valor por chave.

Page 10: Mongopesl

Orientados à grafosOrientados à grafos

● Prós:● Sem conceitos estruturados;● Sem quedas de performance entre muitas consultas envolvendo joins;

● Consultas rápidas.● Contras:

● Complexidade dos grafos;● Sharding: hoje é essencial: longas bases de dados.

Page 11: Mongopesl

Imagem retirada de: http://www.infoq.com/articles/graph-nosql-neo4j

Page 12: Mongopesl

Orientados à documentosOrientados à documentos

● Prós:● Simples;● Escalável;● Query.

● Contras:● Map Reduce para longas queries;● Modelos limitados a indexação e chaves.

Page 13: Mongopesl

Família de ColunasFamília de Colunas

● Prós:● Compreensão dos Dados (cada coluna contém só seu tipo);

● Mais eficiência (vide anterior).● Contras:

● Armazenamento complexo;● Sem interface amigável (query?).

Page 14: Mongopesl

MongoDB: Orientado à DocumentosMongoDB: Orientado à Documentos

● Significa monstruoso, extremamente grande;● Escrito em C++;● Entrada JSON, armazenamento BSON;● Desenvolvimento rápido;● Vantagens da multiplicidade de índices;● Suporte a muitas linguagens de programação;● Indexe aquilo que você mais busca:

● Desempenho superior!!!

Page 15: Mongopesl

Algumas linguagensAlgumas linguagens

Page 16: Mongopesl

Javascript Object Notation - JSONJavascript Object Notation - JSON

● RFC: 4627;● Simples, difundido e suportado por muitas linguagens.

Page 17: Mongopesl

Demais característicasDemais características

● BSON;● Sharding;● Gridfs: quebra dos dados e montagem;● Modelo Aggregation;● Suporta MapReduce;● Mongodump, Mongoexport etc.;● Suporte a muitas linguagens drivers:→

● Python, Java, C#, C/C++, NodeJS etc.

Page 18: Mongopesl

ShardingSharding

Figuras retiradas de: http://docs.mongodb.org/manual/core/sharding-introduction/

Page 19: Mongopesl

Quem usa?Quem usa?

Entrem e percam horas aqui: http://www.mongodb.org/about/production-deployments/

Page 20: Mongopesl

Exemplo de Modelagem: CartolaExemplo de Modelagem: Cartola

Franklin Amorim: http://www.slideshare.net/franklinamorim/mongodb-globocom MongoSP

Page 21: Mongopesl

Instruções básicas: ComandosInstruções básicas: Comandos

Abre no terminal!

Exibe os dbs!

Usando uma base de dados!!! Deletando uma base de dados e suas coleções.

Page 22: Mongopesl

Instruções básicas: ComandosInstruções básicas: Comandos

{ titulo: "Java - Como Programar", autor: "Paul Deitel"}Um array

JSON

Inserindo dados

Page 23: Mongopesl

Instruções básicas: ComandosInstruções básicas: Comandos

Retorna todos os dados!!!

O tal do _id ?

E se eu quiser dados específicos? Parâmetro!!!

Page 24: Mongopesl

Instruções básicas: ComandosInstruções básicas: Comandos

> db.your_collection.findOne( )

> db.your_collection.update(query, set):db.livros.update({titulo: “Java – Como Programar”}, {$set: {ano: 2010}})

> db.your_collection.remove(query) → cuidado neste comando!!!

Page 25: Mongopesl

GeopositionGeoposition

● Mongo fornece uma ferramenta para trabalhar com cálculos de Geoposition $geoWithin:

> db.your_collection.find({coords: {$geoWithin: {$center: [[x,y], distance]}}})

> db.places.insert({local: 'jacarei', coordenadas: [-23.305015,-45.966908]})> db.places.insert({local: 'sjc', coordenadas: [-23.152987,-45.876374]})> db.places.insert({local: 'boston', coordenadas: [42.371227,-71.055558]})

● Vamos supor que estamos em Taubaté?

> db.places.find( { coordenadas: { $geoWithin : { $center : [ [-23.017812,-45.544617] , 10 ] } } } )

● Resposta? Proximidade

> db.<collection>.find( { <location field> : { $geoWithin : { $centerSphere : [ [ <x>, <y> ] , <radius> ] } } } )

Page 26: Mongopesl

Aggregation: Modelo PipelineAggregation: Modelo Pipeline

● Operações fora de ordem mudam o resultado;● Suporte a muitas operações;● Possui semelhantes a NoSQL exceto Join;● Suporta Geoposition como primeira etapa.

Page 27: Mongopesl

ExemploExemplo

Page 28: Mongopesl

Aggregation: Algumas funçõesAggregation: Algumas funções

● Sort: {$sort: {field: value}}● Valor: -1 ou 1;

● {$match: {field: value}}● {$limit: value}● {$skip: 5}● Suporta regex;● Suporta cálculo booleano;● Group: sum, avg etc.;● Etc.

Page 29: Mongopesl

ExemplosExemplos

● db.your.ensureIndex({field: 1});● db.your.distinct(“field”);● Campo específico:

● db.your.find(query, {field: 1})

Page 30: Mongopesl

ReferênciasReferências

● STRAUCH, Christof. NoSQL Databases. 2010. 149 f. Orientação (Graduação) - Curso de Computer Science And Media, Departamento de Csm, Stuttgart Media University, Alemanha, 2010;

● Murphy, Rian ; Merriman, Dwight ; Magnusson Jr, Geir et al.: mongoDB manual Querying – Aggregation. Setembro 2013. – Wiki article. http://www.mongodb.org/display/DOCS/Aggregation;

● Murphy, Rian ; Magnusson Jr, Geir ; Merriman, Dwight et al.: mongoDB Manual – Data Types and Conventions – Object IDs. Setembro 2013. – Wiki article. http://www.mongodb.org/display/DOCS/Object+IDs;

● Murphy, Rian; The MongoDB 2.4 Manual Wiki article. http://docs.mongodb.org/manual/.