SlideShare una empresa de Scribd logo
1 de 14
Wagner Bonfiglio
Navegg




                   Dez / 2011
 Maior empresa brasileira de segmentação de audiência
  online
 Fundada em 2009, comprada pelo Buscapé em fev/201
 Analisa mais de 4 bilhões de visitas por mês
 Mais de 80 milhões de internautas analisados
 Linguagens C, Python e PH
 Bancos de dados MySQL, Redis e MongoDB
 Ambiente Linux
Agenda

   Diferença para SQL
   Documentos
   Querying
   Updating
   Sharding
   Alta Performance
MySQL                    MongoDB

   Tabelas              Collection
   Linhas               Documentos
   Colunas
                         Atributos
   Estrutura definida
   Joins                Estrutura flexível
                         Documentos
                         completos
Todo documento tem a PK “_id”
BSON - Binary JSON

{
    "Dat" : ISODate("2011-12-01T00:21:41.366Z"),
    "Profile" : {
           "1" : NumberLong(1),
           "3" : NumberLong(8),
           "2" : NumberLong(4),
           "5" : [ 20, 11 ]
    },
    "_id" : 10812274
}
Queries dinâmicas
 - SELECT * FROM TABLE
db.Collection.find({})
 - SELECT * FROM TABLE WHERE ID=1
db.Collection.find({_id: 1})
 - SELECT * FROM TABLE WHERE Cond1 = 1 AND Cond2 = "A"
db.Collection.find({Cond1: 1, Cond2: "A"})
 - SELECT * FROM TABLE WHERE Cond1 > 1
db.Collection.find({Cond1: {$gt: 1}})
 - SELECT * FROM TABLE LIMIT 100,10
db.Collection.find().skip(100).limit(10)
 - SELECT count(1) FROM TABLE
db.Collection.count()
 - SELET * FROM TABLE WHERE Cond1 IS NOT NULL
db.Collection.find({Cond1: {$exists: true}})
FindAndModify

> job = db.jobs.findAndModify({
      query: {inprogress: false, task: "calculateProfile"},
      sort: { priority: -1 },
      update: { $set: {inprogress: true, started: new Date() } }
      new: true
});
Map / Reduce
{ interest: [1], _id: 1 }
{ interest: [1,2,5,8], _id: 2 }
{ _id: 3 }

> m = function() {
    if(this.interest)
        this.interest.forEach(function(z){ emit(z,{ count: 1}); });
   else return;
}
> r = function(key, values) {
   var total = 0;
       for ( var i=0; i < values.length; i++ )
        total += values[i].count;
   return { count : total };
}
> db.ProfileDem.mapReduce(m, r, { out : "myoutput" } );
Modificadores
$set
 Seta o documento com os valores passados
$unset
 Limpa o campo
$addToSet
 Adiciona o valor para um array, evitando duplicidade
$push
  Adiciona o valor para um array, podendo duplicar o valor
$inc
  Incrementa um valor inteiro para um campo
db.Collection.update({_id: 1}, {$set: {Name: "Wagner"}}, Upsert=true)

db.Collection.update({_id: 1}, {$unset: { Jobs: 1}})

db.Collection.update({_id: 1}, {$addToSet:
{Events:
    {Name: "Workshop",
     Date: ISODate("2011-12-07"),
     Local: "BuscaPé"}
})

 db.Collection.update({_id: 1}, {$inc: {FestasFimDeAno: 1}})
   Divide documentos entre máquinas
   Critério de divisão definido pelo
    administrador
   Usado com ReplicaSet para garantir
    integridade
       Cada shard é replicado
   Necessário 1 ou 3 config servers
   Usuário se conecta em um servidor que
    busca o dado no shard correto
   Ausência de Joins e documentos completos
    tornam a leitura e escrita mais rápidos


   Índices que indexam qualquer atributo,
    inclusive arrays
Obrigado!

  Wagner Bonfiglio
bonfiglio@navegg.com

Más contenido relacionado

Similar a MongoDB: banco NoSQL dinâmico e escalável

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
 
Persistência de Dados no SQLite com Room
Persistência de Dados no SQLite com RoomPersistência de Dados no SQLite com Room
Persistência de Dados no SQLite com RoomNelson Glauber Leal
 
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
 
acm, chapter, development, events, iscte, portugal, opensource, softwareApres...
acm, chapter, development, events, iscte, portugal, opensource, softwareApres...acm, chapter, development, events, iscte, portugal, opensource, softwareApres...
acm, chapter, development, events, iscte, portugal, opensource, softwareApres...ISCTE-IUL ACM Student Chapter
 
Mini-Curso de MongoDB
Mini-Curso de MongoDBMini-Curso de MongoDB
Mini-Curso de MongoDBBrunno Gomes
 
Mongo DB
Mongo DBMongo DB
Mongo DBdist_bp
 
Arquiteturas Java Pragmáticas para usar Big Data na Nuvem
Arquiteturas Java Pragmáticas para usar Big Data na NuvemArquiteturas Java Pragmáticas para usar Big Data na Nuvem
Arquiteturas Java Pragmáticas para usar Big Data na NuvemTail Target
 
Aula 12 Relatório - Tabelas
Aula 12   Relatório - TabelasAula 12   Relatório - Tabelas
Aula 12 Relatório - TabelasDalton Martins
 
Desenvolvendo com mongodb
Desenvolvendo com mongodbDesenvolvendo com mongodb
Desenvolvendo com mongodbThiago Avelino
 
Estruturas de dados em Python
Estruturas de dados em PythonEstruturas de dados em Python
Estruturas de dados em PythonRicardo Paiva
 
MongoDB - Apresentação
MongoDB - ApresentaçãoMongoDB - Apresentação
MongoDB - ApresentaçãoTerra / Neo
 

Similar a MongoDB: banco NoSQL dinâmico e escalável (20)

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
 
NoSQL e MongoDB
NoSQL e MongoDBNoSQL e MongoDB
NoSQL e MongoDB
 
Persistência de Dados no SQLite com Room
Persistência de Dados no SQLite com RoomPersistência de Dados no SQLite com Room
Persistência de Dados no SQLite com Room
 
NoSQL e MongoDB - ETEC
NoSQL e MongoDB - ETECNoSQL e MongoDB - ETEC
NoSQL e MongoDB - ETEC
 
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
 
acm, chapter, development, events, iscte, portugal, opensource, softwareApres...
acm, chapter, development, events, iscte, portugal, opensource, softwareApres...acm, chapter, development, events, iscte, portugal, opensource, softwareApres...
acm, chapter, development, events, iscte, portugal, opensource, softwareApres...
 
Workshop MongoDB
Workshop MongoDBWorkshop MongoDB
Workshop MongoDB
 
Mini-Curso de MongoDB
Mini-Curso de MongoDBMini-Curso de MongoDB
Mini-Curso de MongoDB
 
Mongodb workshop cinlug
Mongodb workshop cinlugMongodb workshop cinlug
Mongodb workshop cinlug
 
Mongo DB
Mongo DBMongo DB
Mongo DB
 
Arquiteturas Java Pragmáticas para usar Big Data na Nuvem
Arquiteturas Java Pragmáticas para usar Big Data na NuvemArquiteturas Java Pragmáticas para usar Big Data na Nuvem
Arquiteturas Java Pragmáticas para usar Big Data na Nuvem
 
Aula 12 Relatório - Tabelas
Aula 12   Relatório - TabelasAula 12   Relatório - Tabelas
Aula 12 Relatório - Tabelas
 
Desenvolvendo com mongodb
Desenvolvendo com mongodbDesenvolvendo com mongodb
Desenvolvendo com mongodb
 
Curso de Node JS Básico
Curso de Node JS BásicoCurso de Node JS Básico
Curso de Node JS Básico
 
Estruturas de dados em Python
Estruturas de dados em PythonEstruturas de dados em Python
Estruturas de dados em Python
 
MongoDB - Iniciando e Conhecendo
MongoDB - Iniciando e ConhecendoMongoDB - Iniciando e Conhecendo
MongoDB - Iniciando e Conhecendo
 
Palestra cbq
Palestra cbqPalestra cbq
Palestra cbq
 
R para Iniciantes
R para IniciantesR para Iniciantes
R para Iniciantes
 
MongoDB - Apresentação
MongoDB - ApresentaçãoMongoDB - Apresentação
MongoDB - Apresentação
 
NHibernate
NHibernateNHibernate
NHibernate
 

MongoDB: banco NoSQL dinâmico e escalável

  • 2.  Maior empresa brasileira de segmentação de audiência online  Fundada em 2009, comprada pelo Buscapé em fev/201  Analisa mais de 4 bilhões de visitas por mês  Mais de 80 milhões de internautas analisados  Linguagens C, Python e PH  Bancos de dados MySQL, Redis e MongoDB  Ambiente Linux
  • 3. Agenda  Diferença para SQL  Documentos  Querying  Updating  Sharding  Alta Performance
  • 4. MySQL MongoDB  Tabelas Collection  Linhas Documentos  Colunas Atributos  Estrutura definida  Joins Estrutura flexível Documentos completos
  • 5. Todo documento tem a PK “_id” BSON - Binary JSON { "Dat" : ISODate("2011-12-01T00:21:41.366Z"), "Profile" : { "1" : NumberLong(1), "3" : NumberLong(8), "2" : NumberLong(4), "5" : [ 20, 11 ] }, "_id" : 10812274 }
  • 6. Queries dinâmicas - SELECT * FROM TABLE db.Collection.find({}) - SELECT * FROM TABLE WHERE ID=1 db.Collection.find({_id: 1}) - SELECT * FROM TABLE WHERE Cond1 = 1 AND Cond2 = "A" db.Collection.find({Cond1: 1, Cond2: "A"}) - SELECT * FROM TABLE WHERE Cond1 > 1 db.Collection.find({Cond1: {$gt: 1}}) - SELECT * FROM TABLE LIMIT 100,10 db.Collection.find().skip(100).limit(10) - SELECT count(1) FROM TABLE db.Collection.count() - SELET * FROM TABLE WHERE Cond1 IS NOT NULL db.Collection.find({Cond1: {$exists: true}})
  • 7. FindAndModify > job = db.jobs.findAndModify({ query: {inprogress: false, task: "calculateProfile"}, sort: { priority: -1 }, update: { $set: {inprogress: true, started: new Date() } } new: true });
  • 8. Map / Reduce { interest: [1], _id: 1 } { interest: [1,2,5,8], _id: 2 } { _id: 3 } > m = function() { if(this.interest) this.interest.forEach(function(z){ emit(z,{ count: 1}); }); else return; } > r = function(key, values) { var total = 0; for ( var i=0; i < values.length; i++ ) total += values[i].count; return { count : total }; } > db.ProfileDem.mapReduce(m, r, { out : "myoutput" } );
  • 9. Modificadores $set Seta o documento com os valores passados $unset Limpa o campo $addToSet Adiciona o valor para um array, evitando duplicidade $push Adiciona o valor para um array, podendo duplicar o valor $inc Incrementa um valor inteiro para um campo
  • 10. db.Collection.update({_id: 1}, {$set: {Name: "Wagner"}}, Upsert=true) db.Collection.update({_id: 1}, {$unset: { Jobs: 1}}) db.Collection.update({_id: 1}, {$addToSet: {Events: {Name: "Workshop", Date: ISODate("2011-12-07"), Local: "BuscaPé"} }) db.Collection.update({_id: 1}, {$inc: {FestasFimDeAno: 1}})
  • 11. Divide documentos entre máquinas  Critério de divisão definido pelo administrador  Usado com ReplicaSet para garantir integridade  Cada shard é replicado  Necessário 1 ou 3 config servers  Usuário se conecta em um servidor que busca o dado no shard correto
  • 12.
  • 13. Ausência de Joins e documentos completos tornam a leitura e escrita mais rápidos  Índices que indexam qualquer atributo, inclusive arrays
  • 14. Obrigado! Wagner Bonfiglio bonfiglio@navegg.com