Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Wagner BonfiglioNavegg                   Dez / 2011
 Maior empresa brasileira de segmentação de audiência  online Fundada em 2009, comprada pelo Buscapé em fev/201 Analisa...
Agenda   Diferença para SQL   Documentos   Querying   Updating   Sharding   Alta Performance
MySQL                    MongoDB   Tabelas              Collection   Linhas               Documentos   Colunas       ...
Todo documento tem a PK “_id”BSON - Binary JSON{    "Dat" : ISODate("2011-12-01T00:21:41.366Z"),    "Profile" : {       ...
Queries dinâmicas - SELECT * FROM TABLEdb.Collection.find({}) - SELECT * FROM TABLE WHERE ID=1db.Collection.find({_id: 1})...
FindAndModify> job = db.jobs.findAndModify({      query: {inprogress: false, task: "calculateProfile"},      sort: { prior...
Map / Reduce{ interest: [1], _id: 1 }{ interest: [1,2,5,8], _id: 2 }{ _id: 3 }> m = function() {    if(this.interest)     ...
Modificadores$set Seta o documento com os valores passados$unset Limpa o campo$addToSet Adiciona o valor para um array, ev...
db.Collection.update({_id: 1}, {$set: {Name: "Wagner"}}, Upsert=true)db.Collection.update({_id: 1}, {$unset: { Jobs: 1}})d...
   Divide documentos entre máquinas   Critério de divisão definido pelo    administrador   Usado com ReplicaSet para ga...
   Ausência de Joins e documentos completos    tornam a leitura e escrita mais rápidos   Índices que indexam qualquer at...
Obrigado!  Wagner Bonfigliobonfiglio@navegg.com
MongoDB - Workshop Buscapé
Upcoming SlideShare
Loading in …5
×

MongoDB - Workshop Buscapé

816 views

Published on

Uma rápida explicação sobre MongoDB, demonstrando a diferença deste banco de dados orientado a documentos para o banco de dados relacional MySQL.

Published in: Technology
  • Be the first to comment

MongoDB - Workshop Buscapé

  1. 1. Wagner BonfiglioNavegg Dez / 2011
  2. 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. 3. Agenda Diferença para SQL Documentos Querying Updating Sharding Alta Performance
  4. 4. MySQL MongoDB Tabelas Collection Linhas Documentos Colunas Atributos Estrutura definida Joins Estrutura flexível Documentos completos
  5. 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. 6. Queries dinâmicas - SELECT * FROM TABLEdb.Collection.find({}) - SELECT * FROM TABLE WHERE ID=1db.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 > 1db.Collection.find({Cond1: {$gt: 1}}) - SELECT * FROM TABLE LIMIT 100,10db.Collection.find().skip(100).limit(10) - SELECT count(1) FROM TABLEdb.Collection.count() - SELET * FROM TABLE WHERE Cond1 IS NOT NULLdb.Collection.find({Cond1: {$exists: true}})
  7. 7. FindAndModify> job = db.jobs.findAndModify({ query: {inprogress: false, task: "calculateProfile"}, sort: { priority: -1 }, update: { $set: {inprogress: true, started: new Date() } } new: true});
  8. 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. 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. 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. 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. 12.  Ausência de Joins e documentos completos tornam a leitura e escrita mais rápidos Índices que indexam qualquer atributo, inclusive arrays
  13. 13. Obrigado! Wagner Bonfigliobonfiglio@navegg.com

×