MongoDB - Wagner Bonfiglio - Navegg

482 views
447 views

Published on

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
482
On SlideShare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
2
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

MongoDB - Wagner Bonfiglio - Navegg

  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

×