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