SlideShare une entreprise Scribd logo
1  sur  34
Télécharger pour lire hors ligne
Gabriel Campos
Como configurar e utilizar uma estrutura MongoDB
para Big Data
Gabriel Campos
gabriel.campos@zahpee.com | @gcouti
Como funcionará?
Iremos fazer diversos ciclos que irão
compreender apresentações de conceitos e
como implementá-los
Ok! Let’s do it
Leeroy Jenkins
NoSQL x SQL
Não relacional
Sem esquema
Escalabilidade
Relacional
Esquema bem definido
Transacional
Qual escolher?
Porque o mongoDB
Porque MongoDB?
Após alguns benchmarks, vimos uma boa
relação de custo benefício.
Além de uma boa documentação e
uma comunidade bastante ativa.
Inserindo alguns dados
Outras operações do mongoDB
use bdw
db.People.insert({ "nm" : "Gabriel Campos" , "pgt" : true })
db.People.insert({ "nm" : "Thiago Cardoso" , "pgt" : false, "city": "BH" })
db.People.update({ "nm" : "Thiago Cardoso" },{ $set :{ "pgt" : true }})
db.People.find({"nm": "Gabriel Campos"})
MongoDB explain
db.People.find({"nm":"Gabriel Campos"}).explain()
{
"cursor" : "BasicCursor", -> Não usou índice
"isMultiKey" : false, -> Utilizou multikey index
"n" : 1, -> Número de elementos que “casaram” com a query
"nscannedObjects" : 2, -> Número de objetos escaneados
"nscanned" : 2, -> Número de itens do índice que foram escaneados
"nscannedObjectsAllPlans" : 2, -> Número de objetos escaneados em todos os planos
"nscannedAllPlans" : 2, -> Número de itens escaneados em todos os planos
"scanAndOrder" : false, -> Ordenou os elementos
"indexOnly" : false, -> Objetos retornados estavam apenas no índice
"nYields" : 0, -> Número de vezes que a query deixou
de ser feita por algum motivo
"nChunkSkips" : 0, -> Número de chunks pulados devido
a “migração”
"millis" : 0, -> Tempo para completar a query
}
Mais informações do comando explain
Índices
Os índices devem ser escolhidos com base nas consultas.
O tamanho dos índices costuma ser um dos principais
fatores do custo da infraestrutura.
Evitar campos com grande cardinalidade.
db.People.ensureIndex({nm: 1 })
Um pouco mais sobre índices
for (var i=0;i<100000;i++){
var people = {};
people.nm = "Nome "+ i;
people.pgt = i%2 == 0;
db.People.save(people);
}
A Inserção de dados dummy a-dummy.js
E agora? Como saber se ficou bom?
db.People.find({"nm":"Gabriel Campos"}).explain()
{
"cursor" : "BtreeCursor nm_1", -> Indice utilizado
"isMultiKey" : false, -> Utilizou multikey index
"n" : 1, -> Número de elementos que “casaram” com a query
"nscannedObjects" : 1, -> Número de objetos escaneados
"nscanned" : 1, -> Número de itens do índice que foram escaneados
"nscannedObjectsAllPlans" : 1, -> Número de objetos escaneados em todos os planos
"nscannedAllPlans" : 1, -> Número de itens escaneados em todos os planos
"scanAndOrder" : false, -> Ordenou os elementos
"indexOnly" : false, -> Objetos retornados estavam apenas no índice
"nYields" : 0, -> Número de vezes que a query deixou
de ser feita por algum motivo
"nChunkSkips" : 0, -> Número de chunks pulados devido
a “migração”
"millis" : 0, -> Tempo para completar a query
}
MongoDB explain
Mais informações do comando explain
MapReduce
Modelo utilizado para processar e agregar um grande
volume de informação.
Funções de map e reduce são programadas em javascript.
Uma solução para contornar certos consultas que não são
possíveis de fazer com Mongo puro.
db.People.mapReduce(function(){
emit(this.nm,this.pgt);
},
function(key,values){
return Array.sum(values)
},
{
query:{pgt:true},
out:"numero_pgt"
})
B MapReduce b-mapreduce.js
Framework que auxilia o agrupamento de operações no mongoDB.
Pipeline de comandos.
Internamente o mongo otimiza algumas fases do pipeline.
Aggregate
db.People.aggregate({
$match:{}
},
{
$group:{
_id:"$pgt",
"total":{
$sum:1
}
}
})
C Aggregate c-aggregate.js
Qual escolher?
Com mongoDB, sempre use aggregate.
Aggregate é implementado em C++ dentro
do MongoDB e o MapReduce é um javascript
interpretado em tempo de execução.
MapReduces podem gerar lock no banco.
Configurando a estrutura MongoDB
ReplicaSet
Redundância de informação.
Aumento da disponibilidade dos dados.
Distribuição de carga.
Em produção, a criação dos indices deve ser
feita nas máquinas secundárias. SecondarySecondary
Primary
cd ~
mkdir -p mongo-bdw
cd mongo-bdw
mkdir -p rs0-0 rs0-1 rs0-2
D ReplicaSet, 1
# Iniciando replicas
mongod --port 27000 --dbpath ~/mongo-bdw/rs0-0 --replSet rs0 --smallfiles --noprealloc
mongod --port 27001 --dbpath ~/mongo-bdw/rs0-1 --replSet rs0 --smallfiles --noprealloc
mongod --port 27002 --dbpath ~/mongo-bdw/rs0-2 --replSet rs0 --smallfiles --noprealloc
D ReplicaSet, 2
mongo --port 27000
rs.initiate()
rs.add("jarvis:27001")
rs.add("jarvis:27002")
rs.status()
D ReplicaSet, 3
Shards
Distribuir os dados em diversas máquinas de
banco de dados.
Com o crescimento da quantidade de dados, os
índices ocupam a memória e o número de page
fault consequentemente também aumenta.
O processo de “shardeamento” deve acontecer
antes que a memória esteja completamente
ocupada.
cd ~
cd mongo-bdw
mkdir config
mongod --configsvr --dbpath ~/mongo-bdw/config --port 20001
mongos --configdb jarvis:20001 --port 27017 --chunkSize 1
E Shards, 1
mkdir -p rs1-0 rs1-1 rs1-2
mongod --port 27010 --dbpath ~/mongo-bdw/rs1-0 --replSet rs1 --smallfiles --noprealloc
mongod --port 27011 --dbpath ~/mongo-bdw/rs1-1 --replSet rs1 --smallfiles --noprealloc
mongod --port 27012 --dbpath ~/mongo-bdw/rs1-2 --replSet rs1 --smallfiles --noprealloc
E Shards, 2
mongo --port 27010
rs.initiate()
rs.add("<hostname:27011>")
rs.add("<hostname:27012>")
rs.status()
E Shards, 3
#Shardeando
mongo
sh.addShard("rs0/jarvis:27000,jarvis:27001,jarvis:27002")
sh.addShard("rs1/jarvis:27010,jarvis:27011,jarvis:27012")
sh.enableSharding("bdw")
sh.shardCollection("bdw.People", { nm: 1} )
E Shards, 4
Como escolher as shards keys?
A aplicação da shard key é um processo
irreversível.
Evitar shard keys que vão fazer com que os
dados mudem de chunks constantemente.
Evitar com que os dados fiquem acumulados no
mesmo chunk.
Já sei tudo! Estou pronto para criar minha
estrutura mongoDB?
Gabriel Campos
gabriel.campos@zahpee.com | @gcouti
Obrigado!
Referências
Leeroy Jenkins - https://www.youtube.com/watch?v=LkCNJRfSZBU
Operações com MongoDB - http://goo.gl/xzFeCA
Documentação do explain - http://goo.gl/a81gKf
Documentação dos indices - http://goo.gl/ckoZrp
Documentação replicaSet - http://goo.gl/ZvCQSY
Documentação shards - http://goo.gl/JaPYmA
ÍCONES*
SLIDE 13
Redirect designed by Alexander Bickov from the Noun Project
SLIDE 17
Keys designed by Michael Rowe from the Noun Project
* Os ícones não mencionados são de domínio público.
SLIDE 2
Mortar Board designed by Monika Ciapala from the Noun
Project
Beaker designed by Shmidt Sergey from the Noun Project
SLIDE 8
Talking designed by Hadi Davodpour from the Noun Project
SLIDE 9
Tag designed by baabullah hasan from the Noun Project
SLIDE 12
Share designed by Stephanie Wauters from the Noun Project
Árvore de indices

Contenu connexe

Tendances

Modelando aplicação em documento - MongoDB
Modelando aplicação em documento - MongoDBModelando aplicação em documento - MongoDB
Modelando aplicação em documento - MongoDBThiago Avelino
 
Shut up and give me the data - Capturando dados com scrapy
Shut up and give me the data - Capturando dados com scrapyShut up and give me the data - Capturando dados com scrapy
Shut up and give me the data - Capturando dados com scrapyRogers Prates de Pelle
 
MongoDB - Apresentação
MongoDB - ApresentaçãoMongoDB - Apresentação
MongoDB - ApresentaçãoTerra / Neo
 
Curso mongo db com php
Curso mongo db com phpCurso mongo db com php
Curso mongo db com phpSuissa
 
Nas internas do CartolaFC: como é a nova arquitetura do game feita para supor...
Nas internas do CartolaFC: como é a nova arquitetura do game feita para supor...Nas internas do CartolaFC: como é a nova arquitetura do game feita para supor...
Nas internas do CartolaFC: como é a nova arquitetura do game feita para supor...Alexandre Saboia Fuziyama
 
Desenvolvendo soluções com banco de dados não relacional - MongoDB
Desenvolvendo soluções com banco de dados não relacional - MongoDBDesenvolvendo soluções com banco de dados não relacional - MongoDB
Desenvolvendo soluções com banco de dados não relacional - MongoDBiMasters
 
Desenvolvimento de aplicações PHP com MongoDB
Desenvolvimento de aplicações PHP com MongoDBDesenvolvimento de aplicações PHP com MongoDB
Desenvolvimento de aplicações PHP com MongoDBAri Stopassola Junior
 
Como o elasticsearch salvou minhas buscas
Como o elasticsearch salvou minhas buscasComo o elasticsearch salvou minhas buscas
Como o elasticsearch salvou minhas buscasWaldemar Neto
 
TDC2016POA | Trilha Banco de Dados - Firebase e Realm, o NoSQL ganha força no...
TDC2016POA | Trilha Banco de Dados - Firebase e Realm, o NoSQL ganha força no...TDC2016POA | Trilha Banco de Dados - Firebase e Realm, o NoSQL ganha força no...
TDC2016POA | Trilha Banco de Dados - Firebase e Realm, o NoSQL ganha força no...tdc-globalcode
 
Big Data como Serviço: da captura à visualização de dados com alto desempenho
Big Data como Serviço: da captura à visualização de dados com alto desempenhoBig Data como Serviço: da captura à visualização de dados com alto desempenho
Big Data como Serviço: da captura à visualização de dados com alto desempenhoRicardo Longa
 
PyMongo = Python + MongoDB
PyMongo = Python + MongoDBPyMongo = Python + MongoDB
PyMongo = Python + MongoDBBrunno Gomes
 
Introdução ao MongoDB
Introdução ao MongoDBIntrodução ao MongoDB
Introdução ao MongoDBElaine Naomi
 
MySQL 5.7 - 
Tirando o Máximo Proveito
MySQL 5.7 - 
Tirando o Máximo ProveitoMySQL 5.7 - 
Tirando o Máximo Proveito
MySQL 5.7 - 
Tirando o Máximo ProveitoGabriela Ferrara
 

Tendances (20)

Modelando aplicação em documento - MongoDB
Modelando aplicação em documento - MongoDBModelando aplicação em documento - MongoDB
Modelando aplicação em documento - MongoDB
 
Mongopesl
MongopeslMongopesl
Mongopesl
 
Shut up and give me the data - Capturando dados com scrapy
Shut up and give me the data - Capturando dados com scrapyShut up and give me the data - Capturando dados com scrapy
Shut up and give me the data - Capturando dados com scrapy
 
MongoDB - Iniciando e Conhecendo
MongoDB - Iniciando e ConhecendoMongoDB - Iniciando e Conhecendo
MongoDB - Iniciando e Conhecendo
 
MongoDB - Apresentação
MongoDB - ApresentaçãoMongoDB - Apresentação
MongoDB - Apresentação
 
Curso mongo db com php
Curso mongo db com phpCurso mongo db com php
Curso mongo db com php
 
Nas internas do CartolaFC: como é a nova arquitetura do game feita para supor...
Nas internas do CartolaFC: como é a nova arquitetura do game feita para supor...Nas internas do CartolaFC: como é a nova arquitetura do game feita para supor...
Nas internas do CartolaFC: como é a nova arquitetura do game feita para supor...
 
2011 01-18 mongo-db
2011 01-18 mongo-db2011 01-18 mongo-db
2011 01-18 mongo-db
 
Desenvolvendo soluções com banco de dados não relacional - MongoDB
Desenvolvendo soluções com banco de dados não relacional - MongoDBDesenvolvendo soluções com banco de dados não relacional - MongoDB
Desenvolvendo soluções com banco de dados não relacional - MongoDB
 
Desenvolvimento de aplicações PHP com MongoDB
Desenvolvimento de aplicações PHP com MongoDBDesenvolvimento de aplicações PHP com MongoDB
Desenvolvimento de aplicações PHP com MongoDB
 
Como o elasticsearch salvou minhas buscas
Como o elasticsearch salvou minhas buscasComo o elasticsearch salvou minhas buscas
Como o elasticsearch salvou minhas buscas
 
TDC2016POA | Trilha Banco de Dados - Firebase e Realm, o NoSQL ganha força no...
TDC2016POA | Trilha Banco de Dados - Firebase e Realm, o NoSQL ganha força no...TDC2016POA | Trilha Banco de Dados - Firebase e Realm, o NoSQL ganha força no...
TDC2016POA | Trilha Banco de Dados - Firebase e Realm, o NoSQL ganha força no...
 
Big Data como Serviço: da captura à visualização de dados com alto desempenho
Big Data como Serviço: da captura à visualização de dados com alto desempenhoBig Data como Serviço: da captura à visualização de dados com alto desempenho
Big Data como Serviço: da captura à visualização de dados com alto desempenho
 
PyMongo = Python + MongoDB
PyMongo = Python + MongoDBPyMongo = Python + MongoDB
PyMongo = Python + MongoDB
 
Introdução ao MongoDB
Introdução ao MongoDBIntrodução ao MongoDB
Introdução ao MongoDB
 
programação c 2 aula
programação c 2 aulaprogramação c 2 aula
programação c 2 aula
 
NoSQL e MongoDB - ETEC
NoSQL e MongoDB - ETECNoSQL e MongoDB - ETEC
NoSQL e MongoDB - ETEC
 
Introdução ao MongoDB
Introdução ao MongoDBIntrodução ao MongoDB
Introdução ao MongoDB
 
MySQL 5.7 - 
Tirando o Máximo Proveito
MySQL 5.7 - 
Tirando o Máximo ProveitoMySQL 5.7 - 
Tirando o Máximo Proveito
MySQL 5.7 - 
Tirando o Máximo Proveito
 
Palestra MongoDB
Palestra MongoDBPalestra MongoDB
Palestra MongoDB
 

Similaire à Hands-on Workshop: Como configurar e utilizar uma estrutura MongoDB para Big Data

MongoDB: um banco de dados orientado a documento
MongoDB: um banco de dados orientado a documentoMongoDB: um banco de dados orientado a documento
MongoDB: um banco de dados orientado a documentoJulio Monteiro
 
Django e MongoDB - Python Brasil 7
Django e MongoDB - Python Brasil 7Django e MongoDB - Python Brasil 7
Django e MongoDB - Python Brasil 7Christiano Anderson
 
Spring Data com MongoDB
Spring Data com MongoDBSpring Data com MongoDB
Spring Data com MongoDBFabiano Modos
 
Livropythonmysql 091022073751-phpapp01
Livropythonmysql 091022073751-phpapp01Livropythonmysql 091022073751-phpapp01
Livropythonmysql 091022073751-phpapp01julianabdpaiva
 
Mecanismo de Busca com Node.js + MongoDB
Mecanismo de Busca com Node.js + MongoDBMecanismo de Busca com Node.js + MongoDB
Mecanismo de Busca com Node.js + MongoDBLuiz Duarte
 
JS Experience 2017 - Criação de mecanismos de busca usando Node.js + MongoDB
JS Experience 2017 - Criação de mecanismos de busca usando Node.js + MongoDBJS Experience 2017 - Criação de mecanismos de busca usando Node.js + MongoDB
JS Experience 2017 - Criação de mecanismos de busca usando Node.js + MongoDBiMasters
 
Indexando e Ordenando Data Sets
Indexando e Ordenando Data SetsIndexando e Ordenando Data Sets
Indexando e Ordenando Data SetsRodolfo Mendes
 
Introdução a Ciência de Dados
Introdução a Ciência de DadosIntrodução a Ciência de Dados
Introdução a Ciência de DadosNauber Gois
 
MongoDB - Tudo que você precisa saber - FGSL 2014
MongoDB - Tudo que você precisa saber - FGSL 2014MongoDB - Tudo que você precisa saber - FGSL 2014
MongoDB - Tudo que você precisa saber - FGSL 2014Christiano Anderson
 
Introdução no sql mongodb java
Introdução no sql mongodb javaIntrodução no sql mongodb java
Introdução no sql mongodb javaFabiano Modos
 
Introdução ao MongoDB: conceitos e práticas
Introdução ao MongoDB: conceitos e práticasIntrodução ao MongoDB: conceitos e práticas
Introdução ao MongoDB: conceitos e práticasBruno Barreto Carvalho
 

Similaire à Hands-on Workshop: Como configurar e utilizar uma estrutura MongoDB para Big Data (20)

MongoDB: um banco de dados orientado a documento
MongoDB: um banco de dados orientado a documentoMongoDB: um banco de dados orientado a documento
MongoDB: um banco de dados orientado a documento
 
Python e MongoDB - Ensol
Python e MongoDB - EnsolPython e MongoDB - Ensol
Python e MongoDB - Ensol
 
Django e MongoDB - Python Brasil 7
Django e MongoDB - Python Brasil 7Django e MongoDB - Python Brasil 7
Django e MongoDB - Python Brasil 7
 
Pos-QCon-BigData
Pos-QCon-BigDataPos-QCon-BigData
Pos-QCon-BigData
 
Mongo db slides
Mongo db slidesMongo db slides
Mongo db slides
 
MongoDB + PHP
MongoDB + PHPMongoDB + PHP
MongoDB + PHP
 
Spring Data com MongoDB
Spring Data com MongoDBSpring Data com MongoDB
Spring Data com MongoDB
 
Acessando o MySql com o Python
Acessando o MySql com o PythonAcessando o MySql com o Python
Acessando o MySql com o Python
 
Livropythonmysql 091022073751-phpapp01
Livropythonmysql 091022073751-phpapp01Livropythonmysql 091022073751-phpapp01
Livropythonmysql 091022073751-phpapp01
 
Mecanismo de Busca com Node.js + MongoDB
Mecanismo de Busca com Node.js + MongoDBMecanismo de Busca com Node.js + MongoDB
Mecanismo de Busca com Node.js + MongoDB
 
JS Experience 2017 - Criação de mecanismos de busca usando Node.js + MongoDB
JS Experience 2017 - Criação de mecanismos de busca usando Node.js + MongoDBJS Experience 2017 - Criação de mecanismos de busca usando Node.js + MongoDB
JS Experience 2017 - Criação de mecanismos de busca usando Node.js + MongoDB
 
Node.js: serious business
Node.js: serious businessNode.js: serious business
Node.js: serious business
 
Indexando e Ordenando Data Sets
Indexando e Ordenando Data SetsIndexando e Ordenando Data Sets
Indexando e Ordenando Data Sets
 
Minicurso mongo db
Minicurso mongo dbMinicurso mongo db
Minicurso mongo db
 
Introdução a Ciência de Dados
Introdução a Ciência de DadosIntrodução a Ciência de Dados
Introdução a Ciência de Dados
 
Data science
Data scienceData science
Data science
 
MongoDB - Tudo que você precisa saber - FGSL 2014
MongoDB - Tudo que você precisa saber - FGSL 2014MongoDB - Tudo que você precisa saber - FGSL 2014
MongoDB - Tudo que você precisa saber - FGSL 2014
 
Introdução no sql mongodb java
Introdução no sql mongodb javaIntrodução no sql mongodb java
Introdução no sql mongodb java
 
MongoDB na Campus Party
MongoDB na Campus PartyMongoDB na Campus Party
MongoDB na Campus Party
 
Introdução ao MongoDB: conceitos e práticas
Introdução ao MongoDB: conceitos e práticasIntrodução ao MongoDB: conceitos e práticas
Introdução ao MongoDB: conceitos e práticas
 

Hands-on Workshop: Como configurar e utilizar uma estrutura MongoDB para Big Data