Introdução ao MongoDB em 30 slides
-
Upload
derek-stavis -
Category
Technology
-
view
496 -
download
1
description
Transcript of Introdução ao MongoDB em 30 slides
{name: “mongo”, type: “db”}
quarta-feira, 15 de agosto de 12
Fundação
quarta-feira, 15 de agosto de 12
Sistema MongoDB•Conjunto de Banco de Dados
•Banco de Dados•Um conjunto de Coleções
quarta-feira, 15 de agosto de 12
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
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
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
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
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
Funcionalidades
quarta-feira, 15 de agosto de 12
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
Funcionalidades•Balanceamento de Carga• Sharding
•Armazenamento de Arquivos• via GridFS
•Suporte a Agregação• via MapReduce
quarta-feira, 15 de agosto de 12
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
Interagindo com o banco de dadosO Mongo Shell
quarta-feira, 15 de agosto de 12
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
Referência
http://www.mongodb.org/
Download do MongoDBDocumentação oWicialFórum de discussão
quarta-feira, 15 de agosto de 12
Apresentação do
por
Derek Willian Stavis
quarta-feira, 15 de agosto de 12