SlideShare uma empresa Scribd logo
1 de 14
Baixar para ler offline
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

Mais conteúdo relacionado

Destaque

Conto de nadal
Conto de nadalConto de nadal
Conto de nadalhome
 
методика расчета режем работы гидропневматической напорно регулирующей устано...
методика расчета режем работы гидропневматической напорно регулирующей устано...методика расчета режем работы гидропневматической напорно регулирующей устано...
методика расчета режем работы гидропневматической напорно регулирующей устано...Lamunzer
 
Dům,který mě neokrádá 7
Dům,který mě neokrádá 7Dům,který mě neokrádá 7
Dům,který mě neokrádá 7bohape
 
10 ekonomi pembangan + investasi
10 ekonomi pembangan + investasi10 ekonomi pembangan + investasi
10 ekonomi pembangan + investasiEmelda Annisa
 
Cpp software engineering (updated 4.22.15)
Cpp software engineering (updated 4.22.15) Cpp software engineering (updated 4.22.15)
Cpp software engineering (updated 4.22.15) Chunjing Wang
 
מזונות מנקים
מזונות מנקיםמזונות מנקים
מזונות מנקיםyaffapa9
 
The Assistant Company Profile
The Assistant Company ProfileThe Assistant Company Profile
The Assistant Company ProfileThe Assistant
 
Modul paj tahap i thn 1 v5 lengkap dengan cover, pj dan pk
Modul paj tahap i thn 1 v5 lengkap dengan cover, pj dan pkModul paj tahap i thn 1 v5 lengkap dengan cover, pj dan pk
Modul paj tahap i thn 1 v5 lengkap dengan cover, pj dan pksaiful azhar
 
Rpp kelas 11 ips bab 3
Rpp kelas 11 ips bab 3Rpp kelas 11 ips bab 3
Rpp kelas 11 ips bab 3egivirus
 
New microsoft office power point presentation
New microsoft office power point presentationNew microsoft office power point presentation
New microsoft office power point presentationHarry Singh
 

Destaque (18)

bilal.cv
bilal.cvbilal.cv
bilal.cv
 
Conto de nadal
Conto de nadalConto de nadal
Conto de nadal
 
методика расчета режем работы гидропневматической напорно регулирующей устано...
методика расчета режем работы гидропневматической напорно регулирующей устано...методика расчета режем работы гидропневматической напорно регулирующей устано...
методика расчета режем работы гидропневматической напорно регулирующей устано...
 
Dům,který mě neokrádá 7
Dům,který mě neokrádá 7Dům,který mě neokrádá 7
Dům,který mě neokrádá 7
 
Lauravelasquez actividad1 2-mapac.pdf
Lauravelasquez actividad1 2-mapac.pdfLauravelasquez actividad1 2-mapac.pdf
Lauravelasquez actividad1 2-mapac.pdf
 
Cg.Pdf
Cg.PdfCg.Pdf
Cg.Pdf
 
10 ekonomi pembangan + investasi
10 ekonomi pembangan + investasi10 ekonomi pembangan + investasi
10 ekonomi pembangan + investasi
 
Prezn1
Prezn1Prezn1
Prezn1
 
Cpp software engineering (updated 4.22.15)
Cpp software engineering (updated 4.22.15) Cpp software engineering (updated 4.22.15)
Cpp software engineering (updated 4.22.15)
 
On giving 001
On giving 001On giving 001
On giving 001
 
מזונות מנקים
מזונות מנקיםמזונות מנקים
מזונות מנקים
 
AO Foundation and AO Disaster Relief Policy
AO Foundation and AO Disaster Relief PolicyAO Foundation and AO Disaster Relief Policy
AO Foundation and AO Disaster Relief Policy
 
Kwaliteit en houdbaarheid van de zorg
Kwaliteit en houdbaarheid van de zorg Kwaliteit en houdbaarheid van de zorg
Kwaliteit en houdbaarheid van de zorg
 
Jurnal metlit adeng 2011 terbaru
Jurnal metlit adeng 2011 terbaruJurnal metlit adeng 2011 terbaru
Jurnal metlit adeng 2011 terbaru
 
The Assistant Company Profile
The Assistant Company ProfileThe Assistant Company Profile
The Assistant Company Profile
 
Modul paj tahap i thn 1 v5 lengkap dengan cover, pj dan pk
Modul paj tahap i thn 1 v5 lengkap dengan cover, pj dan pkModul paj tahap i thn 1 v5 lengkap dengan cover, pj dan pk
Modul paj tahap i thn 1 v5 lengkap dengan cover, pj dan pk
 
Rpp kelas 11 ips bab 3
Rpp kelas 11 ips bab 3Rpp kelas 11 ips bab 3
Rpp kelas 11 ips bab 3
 
New microsoft office power point presentation
New microsoft office power point presentationNew microsoft office power point presentation
New microsoft office power point presentation
 

Semelhante a MongoDB - Wagner Bonfiglio - Navegg

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
 

Semelhante a MongoDB - Wagner Bonfiglio - Navegg (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 - Wagner Bonfiglio - Navegg

  • 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