2. • Leandro Domingues
• MongoDB Ambassador / Evangelist
• Advocacy Hub Member
• #1 as the most impactful member in the MongoDB
community
• MongoDB Certified Developer
• Co-organizer: MUG-SP, NoSQL-SP e Cognitive Computing
• Head of Software Development at Lumini IT Solutions
About me
3. MongoDB – quem é?
• Escrito em C++
• Document Model / Multi-model
• Opensource
• Alta disponibilidade
• Alta escalabilidade
• Origem do nome: Humongous – Gigantesco
4. MongoDB – o que é?
• Documento é um registro em formato JSON
• Coleção é um conjunto de documentos
• Operações permitidas:
• db.collection.insert({ name: ”Leandro” })
• db.collection.find({ name: ”Leandro” })
• db.collection.remove({ name: ”Leandro” })
• db.collection.update(
{ name: ”Leandro”},
{ name: ”Domingues” }
)
5. MongoDB – o que é?
• Permite nested documents
db.collection.insert({
name: ”Leandro”,
addresses: [
{ city: ”São Paulo” },
{ city: ”Rio de Janeiro” }
]
})
db.collection.find({
”addresses.city”: ”São Paulo”
})
7. MapReduce é muito bom, mas…
• Extremamente versátil e poderoso
• Muito complexo para fazer operações simples
• AVG
• SUM
• GROUP
• RESHAPING
• Alto nível de complexidade
• Dificuldades para programar e debugar
8. Aggregation Framework
• Executado nativamente
• Escrito em C++
• Parâmetro JSON
• Flexível, funcional e simples
• Operation Pipeline
• Se dá muito bem com Sharding
11. Aggregation Pipeline – O que é?
• Uma série de transformações no documento
• Executado em estágios
• Input original é uma collection
• Output pode ser um document, cursor ou collection
$match $project $group $sort
• Ótima biblioteca de funções disponível
• Filtro, cálculo, agrupamento e sumarização de dados
• Output de um estágio envia um input para o próximo
• Operações executadas em sequência
12. Pipeline Operators
• $match
• Filtra os documentos
• $project
• ”Reformata” os documentos
• $group
• Sumariza os documentos
• $unwind
• Expande os documentos
• $sort
• Ordena os documentos
• $limit / $skip
• ”Pagina” os documentos
• $redact
• Restringe acesso aos
documentos
• $lookup
• JOIN!?
13.
14. $match
• Filtra dos documentos
• Utiliza a mesma sintax de query
• Facilita a exclusão de shards
19. $group
• Agrupa documentos por valor
• Referência campos, objetos ou constante
• Outros campos calculados
• $max, $min, $avg, $sum
• $addToSet, $push
• $first, $last
• Processa todos os dados em memória por default
27. Usos
• db.collection.aggregate([…],{<options>})
• Retorna um cursor
• Opcionalmente pode ter um documento para
especificar as opções de agregação
• allowDiskUse, explain
• Use o operador $out para enviar o resultado para
uma collection
28. Limitações
• Limites de memória do pipeline
• Estágios limitados a 100MB
• ”allowDiskUse” para datasets maiores
• Alguns BSON types não suportados
• Symbol, MinKey, MaxKey, DBRef, Code e
CodeWScope
29. Casos de uso
• AD-hoc reporting
• Real-time analytics
• Transforming Data
40. Sharding – Shard keys
• Utilizada para dividir os documentos da collection
• Temos a liberdade de escolher qual será nossa shard key, mas ela não
pode ser alterada depois de criada
• Apenas uma shard key por collection
• A escolha afeta:
• Performance
• Eficiencia
• Escalabilidade
41. Sharding - Vantagens
• Reads / Writes
• Distribuição da carga entre os servidores, permitindo que cada shard
processe seu próprio subconjunto de dados
• Tanto leituras como escritas, podem ser escaladas horizontalmente no
cluster adicionando mais shards
• Storage
• Com os dados distribuídos pelo cluster, podemos adicionar capacidade
apenas no shard que exigir e não no cluster todo
• High Availability
• Um cluster ”shardeado” pode continuar lendo e escrevendo se um ou
mais shards ficarem indisponíveis
42. Sharding – Tipos de distribuição
• Range Sharding
• Mais indicado para aplicações que utilizam queries baseadas em range
• Hash Sharding
• Garante uma distribuição uniforme no cluster
• Não é aconselhado para os cenários que utilizam ranges
• Zone Sharding
• Permite que os DBA’s / Operações definam regras específicas para a colocação
dos dados no shard
• As Zonas podem ser: região geográfica, configuração de hardware,
funcionalidade da aplicação
• Permite a constante modificação dessas regras. Nesse caso o MongoDB migra
automaticamente os dados para a nova zona