31
{name: “mongo”, type: “db”} quarta-feira, 15 de agosto de 12

Introdução ao MongoDB em 30 slides

Embed Size (px)

DESCRIPTION

Um apanhado geral sobre as funcionalidades do MongoDB.

Citation preview

Page 1: Introdução ao MongoDB em 30 slides

{name:  “mongo”,  type:  “db”}

quarta-feira, 15 de agosto de 12

Page 2: Introdução ao MongoDB em 30 slides

Fundação

quarta-feira, 15 de agosto de 12

Page 3: Introdução ao MongoDB em 30 slides

Sistema  MongoDB•Conjunto  de  Banco  de  Dados

•Banco  de  Dados•Um  conjunto  de  Coleções

quarta-feira, 15 de agosto de 12

Page 4: Introdução ao MongoDB em 30 slides

Coleção•Agrupamento  de  Documentos•Análogo  a  Tabela  no  Modelo  Relacional• Usualmente  com  a  mesma  estrutura• Não  é  regra.  Coleções  são  livres  de  Esquema!

•Armazenados  no  formato  BSON•Representação  binária  de  um  JSON  

quarta-feira, 15 de agosto de 12

Page 5: Introdução ao MongoDB em 30 slides

Documento•Instância  de  Objeto  Javascript• Conjunto  de  Chave-­‐valor• Sem  métodos,  hierarquia  de  classes,  etc.• CodiWicação  Binária  (BSON)• Tamanho  máximo  de  16Mb

quarta-feira, 15 de agosto de 12

Page 6: Introdução ao MongoDB em 30 slides

Tipos  de  Dado•Tipos  básicos  de  dados  presentes  no  JavaScript• String,  Array• Integer,  Double• Boolean,  NULL•Object

•Tipos  especiais  do  MongoDB•ObjectID•BinaryData• Regular  Expression• Code

quarta-feira, 15 de agosto de 12

Page 7: Introdução ao MongoDB em 30 slides

Campo•Chave•Um  nome  para  o  campo,  representado  como  String

•Valor•Valor  referente  a  chave

{  nome:  ‘Mongo’,  tipo:  ‘DB’  }

quarta-feira, 15 de agosto de 12

Page 8: Introdução ao MongoDB em 30 slides

Metologia  de  Querying•Orientada  a  Documentos

{nome:  {primeiro:  'José',  ultimo:  'Junior'}}

{nome.ultimo:  'Junior'}

{nome.ultimo:  /^D/}

 {tags:  {$in:  ['armazenamento',  'DBMS']}}

quarta-feira, 15 de agosto de 12

Page 9: Introdução ao MongoDB em 30 slides

Funcionalidades

quarta-feira, 15 de agosto de 12

Page 10: Introdução ao MongoDB em 30 slides

Funcionalidades•Critérios  de  Pesquisa• por  Campo• por  Intervalo• por  Expressões  Regulares

•Índices• Primários  e  secundários

quarta-feira, 15 de agosto de 12

Page 11: Introdução ao MongoDB em 30 slides

Funcionalidades•Balanceamento  de  Carga• Sharding

•Armazenamento  de  Arquivos• via  GridFS

•Suporte  a  Agregação• via  MapReduce

quarta-feira, 15 de agosto de 12

Page 12: Introdução ao MongoDB em 30 slides

Funcionalidades•Execução  de  JavaScript• Server-­‐side•Queries  e  MapReduce• Tempo  de  pesquisa•Documento

•Coleções  limitadas•Tamanho  Wixo• Respeita  ordem  de  inserção• Lista  circular

quarta-feira, 15 de agosto de 12

Page 13: Introdução ao MongoDB em 30 slides

Interagindo  com  o  banco  de  dadosO  Mongo  Shell

quarta-feira, 15 de agosto de 12

Page 14: Introdução ao MongoDB em 30 slides

Mongo  Shell•Método  de  Interação  direta  com  o  Banco• Similar  ao  Shell  MySQL

•JavaScript• Linguagem  padrão  da  shell  do  Mongo$ cd mongo-db$ bin/mongo

MongoDB shell version: 1.8url: testconnecting to: testtype "help" for help>

quarta-feira, 15 de agosto de 12

Page 15: Introdução ao MongoDB em 30 slides

MongoDB shell version: 1.8url: testconnecting to: testtype "help" for help>> for (var i = 1; i < 5; i++) db.things.save({x : 4, y : j});> db.things.find();{ "_id" : ObjectId("4c220a42f3924d31102bd856"), "x" : 4, "j" : 1 }{ "_id" : ObjectId("4c220a42f3924d31102bd857"), "x" : 4, "j" : 2 }{ "_id" : ObjectId("4c220a42f3924d31102bd858"), "x" : 4, "j" : 3 }>

Inserção  de  Documentos•Objeto  db.nome_da_coleção• Criação  lazy  das  Coleções•Método  save()

quarta-feira, 15 de agosto de 12

Page 16: Introdução ao MongoDB em 30 slides

Recuperação  de  Documentos

> db.things.find();{ "_id" : ObjectId("4c220a42f3924d31102bd856"), "x" : 4, "j" : 1 }{ "_id" : ObjectId("4c220a42f3924d31102bd857"), "x" : 4, "j" : 2 }{ "_id" : ObjectId("4c220a42f3924d31102bd858"), "x" : 4, "j" : 3 }

> var cursor = db.things.find();> while(cursor.hasNext()) printjson(cursor.next());{ "_id" : ObjectId("4c220a42f3924d31102bd856"), "x" : 4, "j" : 1 }{ "_id" : ObjectId("4c220a42f3924d31102bd857"), "x" : 4, "j" : 2 }{ "_id" : ObjectId("4c220a42f3924d31102bd858"), "x" : 4, "j" : 3 }

•Método  find()•Objeto  cursor• Estruturas  de  interação

quarta-feira, 15 de agosto de 12

Page 17: Introdução ao MongoDB em 30 slides

Estruturas  de  Interação> db.things.find({j : 1}).forEach(printjson);{ "_id" : ObjectId("4c220a42f3924d31102bd856"), "x" : 4, "j" : 1 }

> db.things.save({x : 10, j : 1});

> db.things.find({j : 1}).forEach(printjson);{ "_id" : ObjectId("4c220a42f3924d31102bd856"), "x" : 4, "j" : 1 }{ "_id" : ObjectId("4c220a42f3924d31102bd870"), "x" : 10, "j" : 1 }

> db.things.find({j : 1}, {j:true}).forEach(printjson);{ "_id" : ObjectId("4c220a42f3924d31102bd856"), "j" : 1 }{ "_id" : ObjectId("4c220a42f3924d31102bd870"), "j" : 1 }

> db.things.findOne({j : 1});{ "_id" : ObjectId("4c220a42f3924d31102bd856"), "x" : 4, "j" : 1 }

> db.things.find().limit(2);{ "_id" : ObjectId("4c220a42f3924d31102bd856"), "x" : 4, "j" : 1 }{ "_id" : ObjectId("4c220a42f3924d31102bd857"), "x" : 4, "j" : 2 }

quarta-feira, 15 de agosto de 12

Page 18: Introdução ao MongoDB em 30 slides

Remoção  de  Documentos•Método  remove()•Operadores  de  ModiWicação• Atomicidade• Execução  Server-­‐side• Operações  Bitwise

MongoDB shell version: 1.8url: testconnecting to: testtype "help" for help>> db.alunos.remove({}); // remove todos os documentos da coleção>> db.alunos.remove({n:1}); // remove todos documentos com n = 1>> db.alunos.remove( { nota : { $lt : 7 }, $atomic : true } )

quarta-feira, 15 de agosto de 12

Page 19: Introdução ao MongoDB em 30 slides

Atualização  de  Documentos

•Substituição•Comando  update(critério, novoObjeto, upsert, multi)•Operação  Custosa

•Operadores  de  ModiWicação•Atomicidade• Execução  Server-­‐side•Operações  Bitwise

quarta-feira, 15 de agosto de 12

Page 20: Introdução ao MongoDB em 30 slides

Operadores  de  ModiCicação

•Caractere  $• Sozinho• Índice  no  vetor  de  registros  resultante  da  query

> t.find(){ "_id" : ObjectId("4b97e62bf1d8c7152c9ccb74"), "titulo" : "ABC", "comentarios" : [ { "por" : "joão", "likes" : 3 }, { "por" : "maria", "likes" : 7 } ] }

> t.update( {'comentarios.por':'joão'}, {$inc:{'comentários.$.likes':1}}, false, true )

> t.find(){ "_id" : ObjectId("4b97e62bf1d8c7152c9ccb74"), "titulo" : "ABC", "comentarios" : [ { "por" : "joão", "likes" : 4 }, { "por" : "maria", "likes" : 7 } ] }

quarta-feira, 15 de agosto de 12

Page 21: Introdução ao MongoDB em 30 slides

Operadores  de  ModiCicação

•Incremento• $inc : {‘likes’ : n}• Incrementa  n  vezes  o  campo  likes

•Setter• $set : {‘likes’ : m}• Seta  o  campo  likes  para  m

•Push• $push : {‘comments’:{‘nome’:‘Derek’}•Adiciona  elemento  no  vetor comments• Cria  vetor  caso  não  existir,  adicionando  o  elemento

quarta-feira, 15 de agosto de 12

Page 22: Introdução ao MongoDB em 30 slides

Operadores  de  ModiCicação

•addToSet• $addToSet:{a:{[‘c1’:‘v1’, ‘cN:‘vN’]}

•Each• {$each : [1, 2, 3, 4, 5]}• Pode  ser  usado  em  conjunto  com  o  $addToSet

•Pop• $pop : {campo: 1 }•Remove  o  último  elemento  de  um  vetor• $pop : {campo: 1 }•Remove  o  primeiro  elemento  de  um  vetor

quarta-feira, 15 de agosto de 12

Page 23: Introdução ao MongoDB em 30 slides

Operadores  de  ModiCicação

•Pull• $pull:{pessoas : {nome : “José”}}•Remove  todas  ocorrências  com  nome  José

•PullAll• $pull:{cursos : {dia : [15, 20] } }•Remove  todas  ocorrências  com  dia  15  e  20

•Rename• $rename : { horas : horas_extra }•Renomeia  o  campo  hora  para  horas_extra

quarta-feira, 15 de agosto de 12

Page 24: Introdução ao MongoDB em 30 slides

Operadores  de  ModiCicação

•Bitwise• Só  pode  ser  usado  com  inteiros• $bit:{bitmap : {red : {and:5} }}• $bit:{bitmap : {green : {or:20} }}• $bit:{bitmap : {green : {and:5, or:20} }}

•Operador  de  atomicidade•Escritas  de  campos  são  feitas  atômicamente• Atualizações  com  multi  não  são  atômicas• Usar  o  operador  $atomic para  garantir  atomicidade•  db.t.update({nota:  {$gt:  60},  $atomic:  true},  {$set:  {aprv:  true}},  false,  true);

quarta-feira, 15 de agosto de 12

Page 25: Introdução ao MongoDB em 30 slides

Operadores  de  ModiCicação

•Utilização  com  Upserts•Diferentes  operadores  em  um  mesmo  update    não  podem  referenciar  o  mesmo  campo•Não  podem  referenciar  o  campo  _id

quarta-feira, 15 de agosto de 12

Page 26: Introdução ao MongoDB em 30 slides

MapReduce•Conceito  básico•Opera  sobre  um  conjunto  de  dados• Pipeline  distribuído•Análogo  ao  GROUP  BY  no  SQL

•Vantagem•Paralelismo• Sharding• Extensibilidade

quarta-feira, 15 de agosto de 12

Page 27: Introdução ao MongoDB em 30 slides

MapReduce•Exemplo•Agregar  todos  os  “likes”  nos  comentários  de  um  usuário

•Modelo  de  Dados• Coleção  de  Comentários

MongoDB shell version: 2.0url: testconnecting to: testtype "help" for help>> var doc = { usuario : “João”, likes : 20, comentario : “Teste” };>> db.comentarios.save(doc);

quarta-feira, 15 de agosto de 12

Page 28: Introdução ao MongoDB em 30 slides

Função  Map•Mapear  os  dados•Mapear  por  Nome•Agregar  em  vetor• Contagem  e  número  de  Likes

> function funcaoMap() { emit(this.username, {contagem : 1, likes : this.likes}); }

quarta-feira, 15 de agosto de 12

Page 29: Introdução ao MongoDB em 30 slides

Função  Reduce•Recebe  retorno  da  função  Map•Chamada  para  cada  chave  retornada  pela  função  Map• Cada  chave  tem  um  array  de  objetos  relacionado  a  ela•Deve  ser  compatível  com  o  objeto  emitido  pela  Map

> function funcaoReduce(key, value) { var result = {count: 0, likes: 0}; values.forEach(function(value) { result.count += value.count; result.likes += value.likes; }); return result; }

quarta-feira, 15 de agosto de 12

Page 30: Introdução ao MongoDB em 30 slides

Referência

http://www.mongodb.org/

Download  do  MongoDBDocumentação  oWicialFórum  de  discussão

quarta-feira, 15 de agosto de 12

Page 31: Introdução ao MongoDB em 30 slides

Apresentação  do

por

Derek  Willian  Stavis

quarta-feira, 15 de agosto de 12