Modelo NoSQL orientado à documentos Modelo NoSQL orientado à documentos Bruno Gabriel dos Santos [email protected]
Modelo NoSQL orientado à documentosModelo NoSQL orientado à documentos
Bruno Gabriel dos Santos [email protected]
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.
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.
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”.
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.
Imagem retirada de:
http://highlyscalable.wordpress.com/2012/03/01/nosql-data-modeling-techniques/
Imagem retirada de:
http://highlyscalable.wordpress.com/2012/03/01/nosql-data-modeling-techniques/
Modelos de base de dadosModelos de base de dados
● Chave/Valor;● Orientado à grafos;● Orientado à documentos;● Família de colunas.
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.
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.
Imagem retirada de: http://www.infoq.com/articles/graph-nosql-neo4j
Orientados à documentosOrientados à documentos
● Prós:● Simples;● Escalável;● Query.
● Contras:● Map Reduce para longas queries;● Modelos limitados a indexação e chaves.
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?).
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!!!
Algumas linguagensAlgumas linguagens
Javascript Object Notation - JSONJavascript Object Notation - JSON
● RFC: 4627;● Simples, difundido e suportado por muitas linguagens.
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.
ShardingSharding
Figuras retiradas de: http://docs.mongodb.org/manual/core/sharding-introduction/
Quem usa?Quem usa?
Entrem e percam horas aqui: http://www.mongodb.org/about/production-deployments/
Exemplo de Modelagem: CartolaExemplo de Modelagem: Cartola
Franklin Amorim: http://www.slideshare.net/franklinamorim/mongodb-globocom MongoSP
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.
Instruções básicas: ComandosInstruções básicas: Comandos
{ titulo: "Java - Como Programar", autor: "Paul Deitel"}Um array
JSON
Inserindo dados
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!!!
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!!!
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> ] } } } )
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.
ExemploExemplo
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.
ExemplosExemplos
● db.your.ensureIndex({field: 1});● db.your.distinct(“field”);● Campo específico:
● db.your.find(query, {field: 1})
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/.