MongoDB - Workshop Buscapé

14
Workshop Buscapé MongoDB Wagner Bonfiglio Navegg Dez / 2011

description

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.

Transcript of MongoDB - Workshop Buscapé

Workshop BuscapéMongoDB

Wagner BonfiglioNavegg

Dez / 2011

Navegg

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

MongoDB

Agenda

Diferença para SQL Documentos Querying Updating Sharding Alta Performance

MongoDB - Diferença para SQL

MongoDB

CollectionDocumentosAtributosEstrutura flexívelDocumentos completos

MySQL

Tabelas Linhas Colunas Estrutura

definida Joins

MongoDB - DocumentosTodo 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

}

MongoDB - Querying

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}})

MongoDB - Querying

FindAndModify

> job = db.jobs.findAndModify({

query: {inprogress: false, task: "calculateProfile"},

sort: { priority: -1 },

update: { $set: {inprogress: true, started: new Date() } }

new: true});

MongoDB - Querying

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" } );

MongoDB - UpdatingModificadores$set

Seta o documento com os valores passados

$unsetLimpa o campo

$addToSetAdiciona o valor para um array, evitando duplicidade

$pushAdiciona o valor para um array, podendo duplicar o

valor

$incIncrementa um valor inteiro para um campo

MongoDB - Updating

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}})

MongoDB - Sharding 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

MongoDB - Sharding

MongoDB - Alta Performance

Ausência de Joins e documentos completos tornam a leitura e escrita mais rápidos

Índices que indexam qualquer atributo, inclusive arrays

MongoDB

Obrigado!

Wagner [email protected]