SlideShare una empresa de Scribd logo
1 de 88
Descargar para leer sin conexión
http://cinlug-br.org/
De acordo com o mongoDB.org:

  “Banco de dados escalável, de alta-
performance, open-source, schema-free,
       orientado-a-documentos.”
documentos
{nome: 'mongo', tipo: 'BD'}
JSON ?
hash   array
  JSON !
  dicionário
schema-free ?
tipagem dinâmica
migrations de graça
ainda posso usar índices
migrations ?
apenas faça:

      {nome: 'mongo', tipo: 'BD'}


{nome: 'mongo', tipo: 'BD', versao: 1.6}
coisas que podem
    fazer falta
As propriedades ACID ficam na
     mão do programador
Relembrando ACID
 São 4 propriedades que os BDs tradicionais fornecem
 às aplicações:

Atomicity
   Garante que um conjunto de modificações seja
   realizado por completo ou nada é feito
Consistency
   Garante que o banco não está em um estado
   inconsistente
Isolation
    Dados que estão durante operação são inacessíveis
Durability
   Garantia de qua transação só é finalizada quando está
   salva no disco
usando o mongoDB

a partir do Terminal
instalando:
> http://www.mongodb.org/downloads

> escolha a versão adequada ao seu
  SO e arquitetura (32-bits / 64-bits) (32

> descompacte (dezipe, desenrare)

> só isso mesmo...
WARNING
As versões de 32-bits do mongoDB
são limitadas a uns 2.5 GB de dados
Oxe, porque?
Como o foco dele é em performance,
ele usa um sistema de mapeamento
de arquivos em memória em alguns
momentos, logo...
usando:

> bin/mongod   <- servidor

> bin/mongo    <- cliente
usando:

    o cliente (vulgo shell) é baseado em
                  Javascript


  então podemos fazer qualquer coisa (que
faríamos com Javascript num terminal, claro)
usando:
> n1 = 5;

> n2 = 8;

> if (n2 > n1) {
   menor = n1;
  } else {
   menor = n2;
  }
usando:
       criando um documento


> estudante = {nome: 'brunno',
               nota: 6};
usando:

        salvando na coleção


> db.estudantes.insert(estudante);
o insert() acabou de guardar o documento
     estudante na coleção de estudantes,
            localizada na base teste

    a coleção estudantes não precisou ser
previamente criada, a partir do momento que é
     usada o mongoDB cria uma coleção

  a base teste é usada por padrão quando
conectamos ao mongoDB, podemos escolher
 outras bases e coleções quando quisermos
usando:
     escolhendo base e coleção


> show dbs;

> use nomedabase;

> show collections;

> db.nomedacolecao.metodo();
usando:
        podemos usar atalhos


> est = db.estudantes;

> est.insert({nome: 'daker', nota: 10});
o campo _id:

   todo documento inserido no banco deve
conter um campo _id com valor único em toda
        coleção, caso ele não exista é
  automaticamente adicionado (nesse caso
  usando o tipo binário ObjectId, que servirá
            como índice padrão).
usando:

       resgatando documentos


> db.estudantes.find();
o find() faz uma consulta e retorna todos os
  documentos que correspondem ao filtro
              passado ao find()

  nesse caso o método find() não recebeu
nenhum parâmetro, então ele retornou todos
     os documentos daquela coleção
usando:
       resgatando documentos


> est.find({nota: 7});

> est.find({nota: { '$gt': 7});
o $gt é um dos operadores especiais, nesse
 caso significa '>' (maior que/greater than)

           existem vários outros:

   $lt - '<',          $lte - '<=',
   $gte - '>=',        $ne - '!='
   $in - 'no array',   $nin - '! no array'
usando:

              o findOne()


> est.findOne({nota: 7});
o findOne() retorna o primeiro documento
encontrado que corresponda aos parâmetros
                da consulta

quando você estiver utilizando o driver da sua
  linguagem ele já retorna um objeto do tipo
    dicionário/hash/coisaDaSuaLinguagem
usando:
     atualizando um documento


> est.update({ name: 'brunno'},
             { name: 'brunno,
               nota: 10 });
o update() recebe como primeiro parâmetro os
     filtros da consulta e como segundo a
atualização a ser feita. nesse caso foi passado
       um outro documento, então ele vai
                sobrescrever tudo

   existem outras maneiras de se atualizar
                documentos
usando:
       atualizando um documento


> est.update({ name: 'brunno' },
             { $set: { nota: 8 } });
o $set define o valor 8 no campo nota

caso 'nota' não exista, é criado com valor 8
usando:
       atualizando um documento


> est.update({ name: 'brunno' },
             { $push: { cadeira: 'p1' } });
o $push adiciona o valor 'p1' ao campo
   'cadeiras', se 'cadeiras' é um array/lista.

caso 'cadeiras' não exista, é criado com a lista
               ['p1'] como valor
usando:
       removendo documentos


> est.remove();

> est.remove({ name: 'brunno' });
o remove() remove (é mêmo?) os documentos
    que correspondam aos parâmetros de
       consulta passados no método

caso seja chamado sem parâmetros, remove
    todos os elementos de uma coleção
ok, já sei o básico, mas como
   aproveitar mais o que o
      mongoDB oferece?
Agregue seus dados de acordo
com o uso


       Princípio da Localidade
                      Espacial
Princípio da Localidade
             Espacial
                  Também Binha!




Utilizar espaço contíguo no disco para evitar
reposicionamento da agulha no disco que é uma
operação de alta latência.
Caso a agulha seja movida, quanto menor o
deslocamento, mais rápido será a operação.
Estudo de Caso

História: Quero mostrar meus
posts, os seus comentários
com as informações de cada
usuário.
Modelo Relacional

post = {'_id': 1,
    'titulo': "lambda lambda lambda",
    'texto': “Live Long and Prosper!”,
    'autor_id': 34}

autor1 = {'_id': 34, 'nome': 'Spock'}

autor2 = {'_id': 33, 'nome': 'Kirk'}

comentario = {'post_id': 1, 'autor_id':   33,
    'texto': 'Excelente Spock'}
Como ocorre o acesso ao
disco?
Como ocorre o acesso ao
disco?
Modelo Não Normalizado
post = {'_id': 1,
    'titulo': 'lambda lambda lambda',
    'texto': 'era uma vez...',
    'autor': {'_id': 1, 'nome': 'spock'},
    'comentarios': [
        {'autor': 'kirk',
        'texto': 'muito bom!'}
]}
E como ocorre o acesso ao
disco agora?
Join tables é
muito custoso!
    $$$
WARNING
  Dados não normalizados implica na
duplicação de dados.

   Se os dados da duplicação forem
críticos, devem ser atualizado nas
múltiplas ocorrências.
WARNING
 Otimize quando possível.

   Quando a duplicação for
difícil de ser tratada, normalize
seus dados
muito + coisas
    legais
Índices
Criam um atalho para a busca
de dados

Acesso rápido aos ítens
indexados
Índices

db.posts.ensureIndex({'hora': 1});

db.posts.ensureIndex({'autor':1});
Índices fazem o que?
Quando eu devo usar
     Índices?

Otimizar consultas por um campo
específico
Otimizar buscas ordenadas
Otimizar buscas dentro de intervalos
de valores
Chaves Embarcadas e múltiplas


db.posts.ensureIndex({'comentarios.autor':
1});

  Chaves Compostas:

db.factories.insert({ 'name': "General
Motors",
    'metro': { 'city': "New York",
        'state': "NY" } }
    );
db.factories.ensureIndex( { metro : 1 } );
WARNING
Não crie índices sem necessidade, ou para
consultas raras
Índices aumentam o tempo de inserção de
documentos
Atualização nos documentos com índices
demoram +
WARNING
 Índices podem ocupar muita memória
 Ao criar um índice em uma coleção não
 vazia, essa operação (por
 padrão) congelará o processo do mongoDB
 até concluir a indexação.
 Utilize:

db.things.ensureIndex(
    {'x':1},{'background':true});
tem +
Chaves decrescentes
Chaves únicas
Chaves dropáveis
dropIndex
reIndex
Índices Geoespaciais
...
Capped Collections
O que são?

  São coleções sem índices, sem _id e
com tamanhos fixos.


db.createCollection('visitas',
  {'capped':true,'size':100000})
Capped Collections
Operações idênticas a uma coleção comum:

db.visits.insert({
    'ip':'108.23.47.98',
    'timestamp': 1292177707})

db.visits.remove()
Capped Collections
Para que servem?

  Inserção de dados otimizada
  Rápido para consultas do tipo: as últimas
  Consultas genéricas são lentas
  MapReduce mais rápido (mais adiante)

  Ex.: Logs, Coleta massiva de dados
Profiling

  Existem N maneiras de fazer uma
consulta, Certo?

               Mas qual é a mais eficiente?

Na dúvida utilize Profiling:

    db.posts.find().explain()
Profiling
{
    'cursor' : "BasicCursor",
         --> Tipo de Cursor da consulta
    'nscanned' : 1,
         --> Índices visitados
    'nscannedObjects' : 1,
         --> Objetos visitados
    'n' : 14,
         --> Quantidade de objetos retornados
    'millis' : 1,
         --> Tempo de execução da consulta
    "indexBounds" : {}
         --> Range dos índices que foram
varridos
}
GridFS
É uma Coleção de Arquivos
  Documentos > 4MB
  Armazenar dados binários
     ex.: Vídeos, Mapas, ...
  Esquema chave/valor
  Disponível através do driver de alguma
  linguagem.
Sharding & Replica
Escalabilidade horizontal
Fácil adição de shards
Sem pontos únicos de ruptura
Balanceamento de carga automático
Processamento distribuído
(MapReduce)
Sharding & Replica
MapReduce
 É um modelo de programação criado pelo
    Google para processar quantidades
           massivas de dados,
        na escala de Terabytes.
  Esse modelo permite um escalabilidade
      horizontal em um cluster de
             computadores.

Paper: http://labs.google.com/papers/mapreduce.html
MapReduce
              Problemas
Consulta em bases gigantes
Recuperação de informação
Engenhos de Busca (Yahoo!)
Mineração de Dados
Análise de Logs
Indicação de Amigos
MapReduce

E como funciona?
MapReduce
1 - Map: Para cada item da entrada executa
       uma função e retorna um par
      <Chave1, Valor1> intermediário.

2 - Reduce: Junte os pares <Chave1,Valor1>
   com chaves iguais emitidas pela função
anterior, processe e retorne um par <Chave2,
         Valor2> como resultado final.
MapReduce
1 - Χάρτης: Για κάθε σημείο της εισόδου εκτελεί
    μια λειτουργία και επιστρέφει ένα ζεύγος
         <Βασικά1, αξία1> μεσάζοντα.

 2 - Μείωση: Συμμετοχή στο <Βασικά1,αξία1>
ζευγάρια με ίσα κλειδιά που εκδίδονται από την
  προηγούμενη λειτουργία, διαδικασία και να
επιστρέψει ένα <Βασικά2,αξία2> ζεύγος ως το
              τελικό αποτέλεσμα.
Na Prática:
MapReduce
map = function() {
    var words = this.conteudo.split(' ');
    for(var i = 0; i < words.length; i++)
{           emit(words[i],
        {'count': 1,'posts':[this._id]});
    }
}
MapReduce
reduce = function(word, tags) {
    var total = 0;
    var posts = [];
    for(var i = 0; i < tags.length; i++) {
        total += tags[i]['count'];
        posts = posts.concat(
            tags[i]['posts']);
    }
    return {'count': total, 'posts': posts};
}
MapReduce

           GO!
db.posts.mapReduce(map,reduce);
MapReduce
   Por padrão, o mongodb cria uma coleção
temporária:

        show collections
 tmp.mr.mapreduce_1282610145_3

  Utilizando os drivers da sua linguagem, é
possível renomear essa coleção temporária.
MapReduce
                ...OU
Criamos uma função de finalização:

finalize = function(word, tags) {
    db.tagCloud.insert(
        {'keyword':word,
         'count': tags['count'],
tags['posts']})
}
MapReduce

db.posts.mapReduce(map,reduce,
    {'finalize':finalize});
mais ?
drivers para:

C                  Factor
C++                Fantom
Java               F#
Javascript         Go
PHP                Groovy
Perl               Haskell
Python             Lua
Ruby               node.js
REST               Objective C
C# e .Net          Powershell
Closure            Scala
ColdFusion         Scheme
Delphi             Smalltalk
Erlang             ...
mais informações?

  http://www.mongodb.org/display/DOCS

http://www.mongodb.org/display/DOCS/Drivers
Brunno Gomes


 twitter.com/brunnogomes

  brunnolgp@gmail.com
Daker
codecereal.blogspot.com

twitter.com/dakerfp

dfp@cin.ufpe.br

daker.pinheiro@openbossa.org

Más contenido relacionado

La actualidad más candente

Minicurso Introdução ao mongoDB SCTI
Minicurso Introdução ao mongoDB SCTIMinicurso Introdução ao mongoDB SCTI
Minicurso Introdução ao mongoDB SCTIBruna Pereira
 
MongoDB - Tudo o que você precisa saber - FISL16
MongoDB - Tudo o que você precisa saber - FISL16MongoDB - Tudo o que você precisa saber - FISL16
MongoDB - Tudo o que você precisa saber - FISL16Christiano Anderson
 
Curso mongo db com php
Curso mongo db com phpCurso mongo db com php
Curso mongo db com phpSuissa
 
MongoDB: Uma forma diferente de pensar no desenvolvimento
MongoDB: Uma forma diferente de pensar no desenvolvimento MongoDB: Uma forma diferente de pensar no desenvolvimento
MongoDB: Uma forma diferente de pensar no desenvolvimento Marcos Thomaz
 
MongoDB Schema Design - Latinoware 2014
MongoDB Schema Design - Latinoware 2014MongoDB Schema Design - Latinoware 2014
MongoDB Schema Design - Latinoware 2014Christiano Anderson
 
Desenvolvimento de aplicações PHP com MongoDB
Desenvolvimento de aplicações PHP com MongoDBDesenvolvimento de aplicações PHP com MongoDB
Desenvolvimento de aplicações PHP com MongoDBAri Stopassola Junior
 
MongoDB - Apresentação
MongoDB - ApresentaçãoMongoDB - Apresentação
MongoDB - ApresentaçãoTerra / Neo
 
Django e MongoDB - Python Brasil 7
Django e MongoDB - Python Brasil 7Django e MongoDB - Python Brasil 7
Django e MongoDB - Python Brasil 7Christiano Anderson
 
Desenvolvendo soluções com banco de dados não relacional - MongoDB
Desenvolvendo soluções com banco de dados não relacional - MongoDBDesenvolvendo soluções com banco de dados não relacional - MongoDB
Desenvolvendo soluções com banco de dados não relacional - MongoDBiMasters
 
Nosql e BD Orientados a Documentos
Nosql e BD Orientados a DocumentosNosql e BD Orientados a Documentos
Nosql e BD Orientados a DocumentosYuri Adams
 
Como o elasticsearch salvou minhas buscas
Como o elasticsearch salvou minhas buscasComo o elasticsearch salvou minhas buscas
Como o elasticsearch salvou minhas buscasWaldemar Neto
 

La actualidad más candente (20)

#5 CRUD no MongoDB
#5   CRUD  no MongoDB#5   CRUD  no MongoDB
#5 CRUD no MongoDB
 
Minicurso Introdução ao mongoDB SCTI
Minicurso Introdução ao mongoDB SCTIMinicurso Introdução ao mongoDB SCTI
Minicurso Introdução ao mongoDB SCTI
 
MongoDB - Tudo o que você precisa saber - FISL16
MongoDB - Tudo o que você precisa saber - FISL16MongoDB - Tudo o que você precisa saber - FISL16
MongoDB - Tudo o que você precisa saber - FISL16
 
Curso mongo db com php
Curso mongo db com phpCurso mongo db com php
Curso mongo db com php
 
MongoDB: Uma forma diferente de pensar no desenvolvimento
MongoDB: Uma forma diferente de pensar no desenvolvimento MongoDB: Uma forma diferente de pensar no desenvolvimento
MongoDB: Uma forma diferente de pensar no desenvolvimento
 
Python e MongoDB - Ensol
Python e MongoDB - EnsolPython e MongoDB - Ensol
Python e MongoDB - Ensol
 
MongoDB Schema Design - Latinoware 2014
MongoDB Schema Design - Latinoware 2014MongoDB Schema Design - Latinoware 2014
MongoDB Schema Design - Latinoware 2014
 
Meetup MUG-RS KingHost
Meetup MUG-RS KingHostMeetup MUG-RS KingHost
Meetup MUG-RS KingHost
 
Desenvolvimento de aplicações PHP com MongoDB
Desenvolvimento de aplicações PHP com MongoDBDesenvolvimento de aplicações PHP com MongoDB
Desenvolvimento de aplicações PHP com MongoDB
 
#1 Introdução ao MongoDB
#1   Introdução ao MongoDB#1   Introdução ao MongoDB
#1 Introdução ao MongoDB
 
2011 01-18 mongo-db
2011 01-18 mongo-db2011 01-18 mongo-db
2011 01-18 mongo-db
 
MongoDB - Apresentação
MongoDB - ApresentaçãoMongoDB - Apresentação
MongoDB - Apresentação
 
Django e MongoDB - Python Brasil 7
Django e MongoDB - Python Brasil 7Django e MongoDB - Python Brasil 7
Django e MongoDB - Python Brasil 7
 
Mongo + php
Mongo + phpMongo + php
Mongo + php
 
Mongodb workshop cinlug
Mongodb workshop cinlugMongodb workshop cinlug
Mongodb workshop cinlug
 
Workshop MongoDB
Workshop MongoDBWorkshop MongoDB
Workshop MongoDB
 
NoSQL e MongoDB - ETEC
NoSQL e MongoDB - ETECNoSQL e MongoDB - ETEC
NoSQL e MongoDB - ETEC
 
Desenvolvendo soluções com banco de dados não relacional - MongoDB
Desenvolvendo soluções com banco de dados não relacional - MongoDBDesenvolvendo soluções com banco de dados não relacional - MongoDB
Desenvolvendo soluções com banco de dados não relacional - MongoDB
 
Nosql e BD Orientados a Documentos
Nosql e BD Orientados a DocumentosNosql e BD Orientados a Documentos
Nosql e BD Orientados a Documentos
 
Como o elasticsearch salvou minhas buscas
Como o elasticsearch salvou minhas buscasComo o elasticsearch salvou minhas buscas
Como o elasticsearch salvou minhas buscas
 

Destacado

Persistência Poliglota, Big Data e NoSQL FISL 15
Persistência Poliglota, Big Data e NoSQL FISL 15Persistência Poliglota, Big Data e NoSQL FISL 15
Persistência Poliglota, Big Data e NoSQL FISL 15Christiano Anderson
 
Desmistificando NoSQL e Novas Tecnologias de Bancos de Dados
Desmistificando NoSQL e Novas Tecnologias de Bancos de DadosDesmistificando NoSQL e Novas Tecnologias de Bancos de Dados
Desmistificando NoSQL e Novas Tecnologias de Bancos de DadosFabíola Fernandes
 
MongoDB: introdução à sua próxima base de dados
MongoDB:  introdução à sua próxima base de dadosMongoDB:  introdução à sua próxima base de dados
MongoDB: introdução à sua próxima base de dadosJordan Kobellarz
 
Utilizando NoSQL no desenvolvimento de soluções inteligentes
Utilizando NoSQL no desenvolvimento de soluções inteligentesUtilizando NoSQL no desenvolvimento de soluções inteligentes
Utilizando NoSQL no desenvolvimento de soluções inteligentesChristiano Anderson
 
Sistemas NoSQL, surgimento, características e exemplos
Sistemas NoSQL, surgimento, características e exemplosSistemas NoSQL, surgimento, características e exemplos
Sistemas NoSQL, surgimento, características e exemplosAricelio Souza
 
No sql e as vantagens na utilização do mongodb
No sql e as vantagens na utilização do mongodbNo sql e as vantagens na utilização do mongodb
No sql e as vantagens na utilização do mongodbfabio perrella
 
Comparação de desempenho entre SQL e NoSQL
Comparação de desempenho entre SQL e NoSQLComparação de desempenho entre SQL e NoSQL
Comparação de desempenho entre SQL e NoSQLpichiliani
 
NoSQL, Base VS ACID e Teorema CAP
NoSQL, Base VS ACID e Teorema CAPNoSQL, Base VS ACID e Teorema CAP
NoSQL, Base VS ACID e Teorema CAPAricelio Souza
 
Modelos NoSQL e a Persistência Poliglota
Modelos NoSQL e a Persistência PoliglotaModelos NoSQL e a Persistência Poliglota
Modelos NoSQL e a Persistência PoliglotaGlaucio Scheibel
 
NoSQL: onde, como e por quê? Cassandra e MongoDB
NoSQL: onde, como e por quê? Cassandra e MongoDBNoSQL: onde, como e por quê? Cassandra e MongoDB
NoSQL: onde, como e por quê? Cassandra e MongoDBRodrigo Hjort
 
NoSQL - Por que e quando usar?
NoSQL - Por que e quando usar?NoSQL - Por que e quando usar?
NoSQL - Por que e quando usar?Nico Steppat
 

Destacado (15)

Persistência Poliglota, Big Data e NoSQL FISL 15
Persistência Poliglota, Big Data e NoSQL FISL 15Persistência Poliglota, Big Data e NoSQL FISL 15
Persistência Poliglota, Big Data e NoSQL FISL 15
 
Desmistificando NoSQL e Novas Tecnologias de Bancos de Dados
Desmistificando NoSQL e Novas Tecnologias de Bancos de DadosDesmistificando NoSQL e Novas Tecnologias de Bancos de Dados
Desmistificando NoSQL e Novas Tecnologias de Bancos de Dados
 
NoSql
NoSqlNoSql
NoSql
 
MongoDB: introdução à sua próxima base de dados
MongoDB:  introdução à sua próxima base de dadosMongoDB:  introdução à sua próxima base de dados
MongoDB: introdução à sua próxima base de dados
 
Utilizando NoSQL no desenvolvimento de soluções inteligentes
Utilizando NoSQL no desenvolvimento de soluções inteligentesUtilizando NoSQL no desenvolvimento de soluções inteligentes
Utilizando NoSQL no desenvolvimento de soluções inteligentes
 
Palestra MongoDB
Palestra MongoDBPalestra MongoDB
Palestra MongoDB
 
Sistemas NoSQL, surgimento, características e exemplos
Sistemas NoSQL, surgimento, características e exemplosSistemas NoSQL, surgimento, características e exemplos
Sistemas NoSQL, surgimento, características e exemplos
 
Introdução ao NoSql
Introdução ao NoSqlIntrodução ao NoSql
Introdução ao NoSql
 
No sql e as vantagens na utilização do mongodb
No sql e as vantagens na utilização do mongodbNo sql e as vantagens na utilização do mongodb
No sql e as vantagens na utilização do mongodb
 
Comparação de desempenho entre SQL e NoSQL
Comparação de desempenho entre SQL e NoSQLComparação de desempenho entre SQL e NoSQL
Comparação de desempenho entre SQL e NoSQL
 
NoSQL, Base VS ACID e Teorema CAP
NoSQL, Base VS ACID e Teorema CAPNoSQL, Base VS ACID e Teorema CAP
NoSQL, Base VS ACID e Teorema CAP
 
Modelos NoSQL e a Persistência Poliglota
Modelos NoSQL e a Persistência PoliglotaModelos NoSQL e a Persistência Poliglota
Modelos NoSQL e a Persistência Poliglota
 
NoSQL: onde, como e por quê? Cassandra e MongoDB
NoSQL: onde, como e por quê? Cassandra e MongoDBNoSQL: onde, como e por quê? Cassandra e MongoDB
NoSQL: onde, como e por quê? Cassandra e MongoDB
 
NOSQL
NOSQLNOSQL
NOSQL
 
NoSQL - Por que e quando usar?
NoSQL - Por que e quando usar?NoSQL - Por que e quando usar?
NoSQL - Por que e quando usar?
 

Similar a Mini-Curso de MongoDB

Hands-on Workshop: Como configurar e utilizar uma estrutura MongoDB para Big ...
Hands-on Workshop: Como configurar e utilizar uma estrutura MongoDB para Big ...Hands-on Workshop: Como configurar e utilizar uma estrutura MongoDB para Big ...
Hands-on Workshop: Como configurar e utilizar uma estrutura MongoDB para Big ...Big Data Week São Paulo
 
Oficina PostgreSQL Básico Latinoware 2012
Oficina PostgreSQL Básico Latinoware 2012Oficina PostgreSQL Básico Latinoware 2012
Oficina PostgreSQL Básico Latinoware 2012Fabrízio Mello
 
Mongo DB
Mongo DBMongo DB
Mongo DBdist_bp
 
Mongo Db - PHP Day Workshop
Mongo Db - PHP Day WorkshopMongo Db - PHP Day Workshop
Mongo Db - PHP Day WorkshopDiego Sana
 
Aula c++ estruturas de dados
Aula c++   estruturas de dadosAula c++   estruturas de dados
Aula c++ estruturas de dadosJean Martina
 
Fluentd/LogStash + elastic search + kibana
Fluentd/LogStash + elastic search + kibanaFluentd/LogStash + elastic search + kibana
Fluentd/LogStash + elastic search + kibanaCésar Araújo
 
Palestra DataFlow - II São Paulo Perl Workshop
Palestra DataFlow - II São Paulo Perl WorkshopPalestra DataFlow - II São Paulo Perl Workshop
Palestra DataFlow - II São Paulo Perl WorkshopAlexei Znamensky
 
Desenvolvimento de Aplicações para o Google App Engine (CPBR5)
Desenvolvimento de Aplicações para o Google App Engine (CPBR5)Desenvolvimento de Aplicações para o Google App Engine (CPBR5)
Desenvolvimento de Aplicações para o Google App Engine (CPBR5)Carlos Duarte do Nascimento
 
Desenvolvimento de aplicações para o Google App Engine
Desenvolvimento de aplicações para o Google App EngineDesenvolvimento de aplicações para o Google App Engine
Desenvolvimento de aplicações para o Google App EngineCampus Party Brasil
 
Desenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine OrmDesenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine OrmGuilherme Blanco
 
Dsi 015 - poo e php - conexão com bancos de dados usando pdo
Dsi   015 - poo e php - conexão com bancos de dados usando pdoDsi   015 - poo e php - conexão com bancos de dados usando pdo
Dsi 015 - poo e php - conexão com bancos de dados usando pdoJorge Luís Gregório
 
Introdução ao MongoDB em 30 slides
Introdução ao MongoDB em 30 slidesIntrodução ao MongoDB em 30 slides
Introdução ao MongoDB em 30 slidesDerek Willian Stavis
 
MongoDB: um banco de dados orientado a documento
MongoDB: um banco de dados orientado a documentoMongoDB: um banco de dados orientado a documento
MongoDB: um banco de dados orientado a documentoJulio Monteiro
 
Gerenciamento de projetos com o Apache Ant
Gerenciamento de projetos com o Apache AntGerenciamento de projetos com o Apache Ant
Gerenciamento de projetos com o Apache AntDenis L Presciliano
 
Gerenciamento de projetos com o Apache Ant
Gerenciamento de projetos com o Apache AntGerenciamento de projetos com o Apache Ant
Gerenciamento de projetos com o Apache AntDenis L Presciliano
 
TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... m...
TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... m...TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... m...
TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... m...tdc-globalcode
 

Similar a Mini-Curso de MongoDB (20)

Mongo db slides
Mongo db slidesMongo db slides
Mongo db slides
 
Hands-on Workshop: Como configurar e utilizar uma estrutura MongoDB para Big ...
Hands-on Workshop: Como configurar e utilizar uma estrutura MongoDB para Big ...Hands-on Workshop: Como configurar e utilizar uma estrutura MongoDB para Big ...
Hands-on Workshop: Como configurar e utilizar uma estrutura MongoDB para Big ...
 
Oficina PostgreSQL Básico Latinoware 2012
Oficina PostgreSQL Básico Latinoware 2012Oficina PostgreSQL Básico Latinoware 2012
Oficina PostgreSQL Básico Latinoware 2012
 
Mongo DB
Mongo DBMongo DB
Mongo DB
 
MongoDB + PHP
MongoDB + PHPMongoDB + PHP
MongoDB + PHP
 
Palestra cbq
Palestra cbqPalestra cbq
Palestra cbq
 
Mongo Db - PHP Day Workshop
Mongo Db - PHP Day WorkshopMongo Db - PHP Day Workshop
Mongo Db - PHP Day Workshop
 
Aula c++ estruturas de dados
Aula c++   estruturas de dadosAula c++   estruturas de dados
Aula c++ estruturas de dados
 
Fluentd/LogStash + elastic search + kibana
Fluentd/LogStash + elastic search + kibanaFluentd/LogStash + elastic search + kibana
Fluentd/LogStash + elastic search + kibana
 
Palestra DataFlow - II São Paulo Perl Workshop
Palestra DataFlow - II São Paulo Perl WorkshopPalestra DataFlow - II São Paulo Perl Workshop
Palestra DataFlow - II São Paulo Perl Workshop
 
Desenvolvimento de Aplicações para o Google App Engine (CPBR5)
Desenvolvimento de Aplicações para o Google App Engine (CPBR5)Desenvolvimento de Aplicações para o Google App Engine (CPBR5)
Desenvolvimento de Aplicações para o Google App Engine (CPBR5)
 
Desenvolvimento de aplicações para o Google App Engine
Desenvolvimento de aplicações para o Google App EngineDesenvolvimento de aplicações para o Google App Engine
Desenvolvimento de aplicações para o Google App Engine
 
Crud
CrudCrud
Crud
 
Desenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine OrmDesenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine Orm
 
Dsi 015 - poo e php - conexão com bancos de dados usando pdo
Dsi   015 - poo e php - conexão com bancos de dados usando pdoDsi   015 - poo e php - conexão com bancos de dados usando pdo
Dsi 015 - poo e php - conexão com bancos de dados usando pdo
 
Introdução ao MongoDB em 30 slides
Introdução ao MongoDB em 30 slidesIntrodução ao MongoDB em 30 slides
Introdução ao MongoDB em 30 slides
 
MongoDB: um banco de dados orientado a documento
MongoDB: um banco de dados orientado a documentoMongoDB: um banco de dados orientado a documento
MongoDB: um banco de dados orientado a documento
 
Gerenciamento de projetos com o Apache Ant
Gerenciamento de projetos com o Apache AntGerenciamento de projetos com o Apache Ant
Gerenciamento de projetos com o Apache Ant
 
Gerenciamento de projetos com o Apache Ant
Gerenciamento de projetos com o Apache AntGerenciamento de projetos com o Apache Ant
Gerenciamento de projetos com o Apache Ant
 
TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... m...
TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... m...TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... m...
TDC2017 | POA Trilha Programacao Funicional - (Nunca) Ouvi falar de Rust... m...
 

Mini-Curso de MongoDB

  • 1.
  • 3. De acordo com o mongoDB.org: “Banco de dados escalável, de alta- performance, open-source, schema-free, orientado-a-documentos.”
  • 7. hash array JSON ! dicionário
  • 9. tipagem dinâmica migrations de graça ainda posso usar índices
  • 11. apenas faça: {nome: 'mongo', tipo: 'BD'} {nome: 'mongo', tipo: 'BD', versao: 1.6}
  • 12. coisas que podem fazer falta
  • 13. As propriedades ACID ficam na mão do programador
  • 14. Relembrando ACID São 4 propriedades que os BDs tradicionais fornecem às aplicações: Atomicity Garante que um conjunto de modificações seja realizado por completo ou nada é feito Consistency Garante que o banco não está em um estado inconsistente Isolation Dados que estão durante operação são inacessíveis Durability Garantia de qua transação só é finalizada quando está salva no disco
  • 15. usando o mongoDB a partir do Terminal
  • 16. instalando: > http://www.mongodb.org/downloads > escolha a versão adequada ao seu SO e arquitetura (32-bits / 64-bits) (32 > descompacte (dezipe, desenrare) > só isso mesmo...
  • 17. WARNING As versões de 32-bits do mongoDB são limitadas a uns 2.5 GB de dados
  • 18. Oxe, porque? Como o foco dele é em performance, ele usa um sistema de mapeamento de arquivos em memória em alguns momentos, logo...
  • 19. usando: > bin/mongod <- servidor > bin/mongo <- cliente
  • 20. usando: o cliente (vulgo shell) é baseado em Javascript então podemos fazer qualquer coisa (que faríamos com Javascript num terminal, claro)
  • 21. usando: > n1 = 5; > n2 = 8; > if (n2 > n1) { menor = n1; } else { menor = n2; }
  • 22. usando: criando um documento > estudante = {nome: 'brunno', nota: 6};
  • 23. usando: salvando na coleção > db.estudantes.insert(estudante);
  • 24. o insert() acabou de guardar o documento estudante na coleção de estudantes, localizada na base teste a coleção estudantes não precisou ser previamente criada, a partir do momento que é usada o mongoDB cria uma coleção a base teste é usada por padrão quando conectamos ao mongoDB, podemos escolher outras bases e coleções quando quisermos
  • 25. usando: escolhendo base e coleção > show dbs; > use nomedabase; > show collections; > db.nomedacolecao.metodo();
  • 26. usando: podemos usar atalhos > est = db.estudantes; > est.insert({nome: 'daker', nota: 10});
  • 27. o campo _id: todo documento inserido no banco deve conter um campo _id com valor único em toda coleção, caso ele não exista é automaticamente adicionado (nesse caso usando o tipo binário ObjectId, que servirá como índice padrão).
  • 28. usando: resgatando documentos > db.estudantes.find();
  • 29. o find() faz uma consulta e retorna todos os documentos que correspondem ao filtro passado ao find() nesse caso o método find() não recebeu nenhum parâmetro, então ele retornou todos os documentos daquela coleção
  • 30. usando: resgatando documentos > est.find({nota: 7}); > est.find({nota: { '$gt': 7});
  • 31. o $gt é um dos operadores especiais, nesse caso significa '>' (maior que/greater than) existem vários outros: $lt - '<', $lte - '<=', $gte - '>=', $ne - '!=' $in - 'no array', $nin - '! no array'
  • 32. usando: o findOne() > est.findOne({nota: 7});
  • 33. o findOne() retorna o primeiro documento encontrado que corresponda aos parâmetros da consulta quando você estiver utilizando o driver da sua linguagem ele já retorna um objeto do tipo dicionário/hash/coisaDaSuaLinguagem
  • 34. usando: atualizando um documento > est.update({ name: 'brunno'}, { name: 'brunno, nota: 10 });
  • 35. o update() recebe como primeiro parâmetro os filtros da consulta e como segundo a atualização a ser feita. nesse caso foi passado um outro documento, então ele vai sobrescrever tudo existem outras maneiras de se atualizar documentos
  • 36. usando: atualizando um documento > est.update({ name: 'brunno' }, { $set: { nota: 8 } });
  • 37. o $set define o valor 8 no campo nota caso 'nota' não exista, é criado com valor 8
  • 38. usando: atualizando um documento > est.update({ name: 'brunno' }, { $push: { cadeira: 'p1' } });
  • 39. o $push adiciona o valor 'p1' ao campo 'cadeiras', se 'cadeiras' é um array/lista. caso 'cadeiras' não exista, é criado com a lista ['p1'] como valor
  • 40. usando: removendo documentos > est.remove(); > est.remove({ name: 'brunno' });
  • 41. o remove() remove (é mêmo?) os documentos que correspondam aos parâmetros de consulta passados no método caso seja chamado sem parâmetros, remove todos os elementos de uma coleção
  • 42. ok, já sei o básico, mas como aproveitar mais o que o mongoDB oferece?
  • 43. Agregue seus dados de acordo com o uso Princípio da Localidade Espacial
  • 44. Princípio da Localidade Espacial Também Binha! Utilizar espaço contíguo no disco para evitar reposicionamento da agulha no disco que é uma operação de alta latência. Caso a agulha seja movida, quanto menor o deslocamento, mais rápido será a operação.
  • 45. Estudo de Caso História: Quero mostrar meus posts, os seus comentários com as informações de cada usuário.
  • 46. Modelo Relacional post = {'_id': 1, 'titulo': "lambda lambda lambda", 'texto': “Live Long and Prosper!”, 'autor_id': 34} autor1 = {'_id': 34, 'nome': 'Spock'} autor2 = {'_id': 33, 'nome': 'Kirk'} comentario = {'post_id': 1, 'autor_id': 33, 'texto': 'Excelente Spock'}
  • 47. Como ocorre o acesso ao disco?
  • 48. Como ocorre o acesso ao disco?
  • 49. Modelo Não Normalizado post = {'_id': 1, 'titulo': 'lambda lambda lambda', 'texto': 'era uma vez...', 'autor': {'_id': 1, 'nome': 'spock'}, 'comentarios': [ {'autor': 'kirk', 'texto': 'muito bom!'} ]}
  • 50. E como ocorre o acesso ao disco agora?
  • 51. Join tables é muito custoso! $$$
  • 52. WARNING Dados não normalizados implica na duplicação de dados. Se os dados da duplicação forem críticos, devem ser atualizado nas múltiplas ocorrências.
  • 53. WARNING Otimize quando possível. Quando a duplicação for difícil de ser tratada, normalize seus dados
  • 54. muito + coisas legais
  • 55. Índices Criam um atalho para a busca de dados Acesso rápido aos ítens indexados
  • 58. Quando eu devo usar Índices? Otimizar consultas por um campo específico Otimizar buscas ordenadas Otimizar buscas dentro de intervalos de valores
  • 59. Chaves Embarcadas e múltiplas db.posts.ensureIndex({'comentarios.autor': 1}); Chaves Compostas: db.factories.insert({ 'name': "General Motors", 'metro': { 'city': "New York", 'state': "NY" } } ); db.factories.ensureIndex( { metro : 1 } );
  • 60. WARNING Não crie índices sem necessidade, ou para consultas raras Índices aumentam o tempo de inserção de documentos Atualização nos documentos com índices demoram +
  • 61. WARNING Índices podem ocupar muita memória Ao criar um índice em uma coleção não vazia, essa operação (por padrão) congelará o processo do mongoDB até concluir a indexação. Utilize: db.things.ensureIndex( {'x':1},{'background':true});
  • 62. tem + Chaves decrescentes Chaves únicas Chaves dropáveis dropIndex reIndex Índices Geoespaciais ...
  • 63. Capped Collections O que são? São coleções sem índices, sem _id e com tamanhos fixos. db.createCollection('visitas', {'capped':true,'size':100000})
  • 64. Capped Collections Operações idênticas a uma coleção comum: db.visits.insert({ 'ip':'108.23.47.98', 'timestamp': 1292177707}) db.visits.remove()
  • 65. Capped Collections Para que servem? Inserção de dados otimizada Rápido para consultas do tipo: as últimas Consultas genéricas são lentas MapReduce mais rápido (mais adiante) Ex.: Logs, Coleta massiva de dados
  • 66. Profiling Existem N maneiras de fazer uma consulta, Certo? Mas qual é a mais eficiente? Na dúvida utilize Profiling: db.posts.find().explain()
  • 67. Profiling { 'cursor' : "BasicCursor", --> Tipo de Cursor da consulta 'nscanned' : 1, --> Índices visitados 'nscannedObjects' : 1, --> Objetos visitados 'n' : 14, --> Quantidade de objetos retornados 'millis' : 1, --> Tempo de execução da consulta "indexBounds" : {} --> Range dos índices que foram varridos }
  • 68. GridFS É uma Coleção de Arquivos Documentos > 4MB Armazenar dados binários ex.: Vídeos, Mapas, ... Esquema chave/valor Disponível através do driver de alguma linguagem.
  • 69. Sharding & Replica Escalabilidade horizontal Fácil adição de shards Sem pontos únicos de ruptura Balanceamento de carga automático Processamento distribuído (MapReduce)
  • 71. MapReduce É um modelo de programação criado pelo Google para processar quantidades massivas de dados, na escala de Terabytes. Esse modelo permite um escalabilidade horizontal em um cluster de computadores. Paper: http://labs.google.com/papers/mapreduce.html
  • 72. MapReduce Problemas Consulta em bases gigantes Recuperação de informação Engenhos de Busca (Yahoo!) Mineração de Dados Análise de Logs Indicação de Amigos
  • 74. MapReduce 1 - Map: Para cada item da entrada executa uma função e retorna um par <Chave1, Valor1> intermediário. 2 - Reduce: Junte os pares <Chave1,Valor1> com chaves iguais emitidas pela função anterior, processe e retorne um par <Chave2, Valor2> como resultado final.
  • 75. MapReduce 1 - Χάρτης: Για κάθε σημείο της εισόδου εκτελεί μια λειτουργία και επιστρέφει ένα ζεύγος <Βασικά1, αξία1> μεσάζοντα. 2 - Μείωση: Συμμετοχή στο <Βασικά1,αξία1> ζευγάρια με ίσα κλειδιά που εκδίδονται από την προηγούμενη λειτουργία, διαδικασία και να επιστρέψει ένα <Βασικά2,αξία2> ζεύγος ως το τελικό αποτέλεσμα.
  • 77. MapReduce map = function() { var words = this.conteudo.split(' '); for(var i = 0; i < words.length; i++) { emit(words[i], {'count': 1,'posts':[this._id]}); } }
  • 78. MapReduce reduce = function(word, tags) { var total = 0; var posts = []; for(var i = 0; i < tags.length; i++) { total += tags[i]['count']; posts = posts.concat( tags[i]['posts']); } return {'count': total, 'posts': posts}; }
  • 79. MapReduce GO! db.posts.mapReduce(map,reduce);
  • 80. MapReduce Por padrão, o mongodb cria uma coleção temporária: show collections tmp.mr.mapreduce_1282610145_3 Utilizando os drivers da sua linguagem, é possível renomear essa coleção temporária.
  • 81. MapReduce ...OU Criamos uma função de finalização: finalize = function(word, tags) { db.tagCloud.insert( {'keyword':word, 'count': tags['count'], tags['posts']}) }
  • 82. MapReduce db.posts.mapReduce(map,reduce, {'finalize':finalize});
  • 84. drivers para: C Factor C++ Fantom Java F# Javascript Go PHP Groovy Perl Haskell Python Lua Ruby node.js REST Objective C C# e .Net Powershell Closure Scala ColdFusion Scheme Delphi Smalltalk Erlang ...
  • 85. mais informações? http://www.mongodb.org/display/DOCS http://www.mongodb.org/display/DOCS/Drivers
  • 86.