Hands-on Workshop: Como configurar e utilizar uma estrutura MongoDB para Big Data
-
Upload
big-data-week-sao-paulo -
Category
Technology
-
view
141 -
download
2
description
Transcript of Hands-on Workshop: Como configurar e utilizar uma estrutura MongoDB para Big Data
![Page 1: Hands-on Workshop: Como configurar e utilizar uma estrutura MongoDB para Big Data](https://reader033.fdocument.pub/reader033/viewer/2022051014/54b618a24a7959a32a8b460a/html5/thumbnails/1.jpg)
Gabriel Campos
Como configurar e utilizar uma estrutura MongoDB para Big Data
![Page 3: Hands-on Workshop: Como configurar e utilizar uma estrutura MongoDB para Big Data](https://reader033.fdocument.pub/reader033/viewer/2022051014/54b618a24a7959a32a8b460a/html5/thumbnails/3.jpg)
Como funcionará?Iremos fazer diversos ciclos que irão
compreender apresentações de conceitos e
como implementá-los
![Page 4: Hands-on Workshop: Como configurar e utilizar uma estrutura MongoDB para Big Data](https://reader033.fdocument.pub/reader033/viewer/2022051014/54b618a24a7959a32a8b460a/html5/thumbnails/4.jpg)
Ok! Let’s do itLeeroy Jenkins
![Page 5: Hands-on Workshop: Como configurar e utilizar uma estrutura MongoDB para Big Data](https://reader033.fdocument.pub/reader033/viewer/2022051014/54b618a24a7959a32a8b460a/html5/thumbnails/5.jpg)
NoSQL x SQLNão relacional
Sem esquema
Escalabilidade
Relacional
Esquema bem definido
Transacional
Qual escolher?
![Page 6: Hands-on Workshop: Como configurar e utilizar uma estrutura MongoDB para Big Data](https://reader033.fdocument.pub/reader033/viewer/2022051014/54b618a24a7959a32a8b460a/html5/thumbnails/6.jpg)
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.
![Page 7: Hands-on Workshop: Como configurar e utilizar uma estrutura MongoDB para Big Data](https://reader033.fdocument.pub/reader033/viewer/2022051014/54b618a24a7959a32a8b460a/html5/thumbnails/7.jpg)
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"})
![Page 8: Hands-on Workshop: Como configurar e utilizar uma estrutura MongoDB para Big Data](https://reader033.fdocument.pub/reader033/viewer/2022051014/54b618a24a7959a32a8b460a/html5/thumbnails/8.jpg)
MongoDB explaindb.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
![Page 9: Hands-on Workshop: Como configurar e utilizar uma estrutura MongoDB para Big Data](https://reader033.fdocument.pub/reader033/viewer/2022051014/54b618a24a7959a32a8b460a/html5/thumbnails/9.jpg)
Í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
![Page 10: Hands-on Workshop: Como configurar e utilizar uma estrutura MongoDB para Big Data](https://reader033.fdocument.pub/reader033/viewer/2022051014/54b618a24a7959a32a8b460a/html5/thumbnails/10.jpg)
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
![Page 11: Hands-on Workshop: Como configurar e utilizar uma estrutura MongoDB para Big Data](https://reader033.fdocument.pub/reader033/viewer/2022051014/54b618a24a7959a32a8b460a/html5/thumbnails/11.jpg)
E agora? Como saber se ficou bom?
![Page 12: Hands-on Workshop: Como configurar e utilizar uma estrutura MongoDB para Big Data](https://reader033.fdocument.pub/reader033/viewer/2022051014/54b618a24a7959a32a8b460a/html5/thumbnails/12.jpg)
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
![Page 13: Hands-on Workshop: Como configurar e utilizar uma estrutura MongoDB para Big Data](https://reader033.fdocument.pub/reader033/viewer/2022051014/54b618a24a7959a32a8b460a/html5/thumbnails/13.jpg)
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.
![Page 14: Hands-on Workshop: Como configurar e utilizar uma estrutura MongoDB para Big Data](https://reader033.fdocument.pub/reader033/viewer/2022051014/54b618a24a7959a32a8b460a/html5/thumbnails/14.jpg)
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
![Page 15: Hands-on Workshop: Como configurar e utilizar uma estrutura MongoDB para Big Data](https://reader033.fdocument.pub/reader033/viewer/2022051014/54b618a24a7959a32a8b460a/html5/thumbnails/15.jpg)
Framework que auxilia o agrupamento de operações no mongoDB.
Pipeline de comandos.
Internamente o mongo otimiza algumas fases do pipeline.
Aggregate
![Page 16: Hands-on Workshop: Como configurar e utilizar uma estrutura MongoDB para Big Data](https://reader033.fdocument.pub/reader033/viewer/2022051014/54b618a24a7959a32a8b460a/html5/thumbnails/16.jpg)
db.People.aggregate({$match:{}
},{
$group:{_id:"$pgt","total":{
$sum:1}
}})
C Aggregate c-aggregate.js
![Page 17: Hands-on Workshop: Como configurar e utilizar uma estrutura MongoDB para Big Data](https://reader033.fdocument.pub/reader033/viewer/2022051014/54b618a24a7959a32a8b460a/html5/thumbnails/17.jpg)
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.
![Page 18: Hands-on Workshop: Como configurar e utilizar uma estrutura MongoDB para Big Data](https://reader033.fdocument.pub/reader033/viewer/2022051014/54b618a24a7959a32a8b460a/html5/thumbnails/18.jpg)
Configurando a estrutura MongoDB
![Page 19: Hands-on Workshop: Como configurar e utilizar uma estrutura MongoDB para Big Data](https://reader033.fdocument.pub/reader033/viewer/2022051014/54b618a24a7959a32a8b460a/html5/thumbnails/19.jpg)
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
![Page 20: Hands-on Workshop: Como configurar e utilizar uma estrutura MongoDB para Big Data](https://reader033.fdocument.pub/reader033/viewer/2022051014/54b618a24a7959a32a8b460a/html5/thumbnails/20.jpg)
cd ~mkdir -p mongo-bdwcd mongo-bdwmkdir -p rs0-0 rs0-1 rs0-2
D ReplicaSet, 1
![Page 21: Hands-on Workshop: Como configurar e utilizar uma estrutura MongoDB para Big Data](https://reader033.fdocument.pub/reader033/viewer/2022051014/54b618a24a7959a32a8b460a/html5/thumbnails/21.jpg)
# Iniciando replicas
mongod --port 27000 --dbpath ~/mongo-bdw/rs0-0 --replSet rs0 --smallfiles --nopreallocmongod --port 27001 --dbpath ~/mongo-bdw/rs0-1 --replSet rs0 --smallfiles --nopreallocmongod --port 27002 --dbpath ~/mongo-bdw/rs0-2 --replSet rs0 --smallfiles --noprealloc
D ReplicaSet, 2
![Page 22: Hands-on Workshop: Como configurar e utilizar uma estrutura MongoDB para Big Data](https://reader033.fdocument.pub/reader033/viewer/2022051014/54b618a24a7959a32a8b460a/html5/thumbnails/22.jpg)
mongo --port 27000
rs.initiate()rs.add("jarvis:27001")rs.add("jarvis:27002")rs.status()
D ReplicaSet, 3
![Page 23: Hands-on Workshop: Como configurar e utilizar uma estrutura MongoDB para Big Data](https://reader033.fdocument.pub/reader033/viewer/2022051014/54b618a24a7959a32a8b460a/html5/thumbnails/23.jpg)
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.
![Page 24: Hands-on Workshop: Como configurar e utilizar uma estrutura MongoDB para Big Data](https://reader033.fdocument.pub/reader033/viewer/2022051014/54b618a24a7959a32a8b460a/html5/thumbnails/24.jpg)
cd ~cd mongo-bdwmkdir configmongod --configsvr --dbpath ~/mongo-bdw/config --port 20001mongos --configdb jarvis:20001 --port 27017 --chunkSize 1
E Shards, 1
![Page 25: Hands-on Workshop: Como configurar e utilizar uma estrutura MongoDB para Big Data](https://reader033.fdocument.pub/reader033/viewer/2022051014/54b618a24a7959a32a8b460a/html5/thumbnails/25.jpg)
mkdir -p rs1-0 rs1-1 rs1-2
mongod --port 27010 --dbpath ~/mongo-bdw/rs1-0 --replSet rs1 --smallfiles --nopreallocmongod --port 27011 --dbpath ~/mongo-bdw/rs1-1 --replSet rs1 --smallfiles --nopreallocmongod --port 27012 --dbpath ~/mongo-bdw/rs1-2 --replSet rs1 --smallfiles --noprealloc
E Shards, 2
![Page 26: Hands-on Workshop: Como configurar e utilizar uma estrutura MongoDB para Big Data](https://reader033.fdocument.pub/reader033/viewer/2022051014/54b618a24a7959a32a8b460a/html5/thumbnails/26.jpg)
mongo --port 27010rs.initiate()rs.add("<hostname:27011>")rs.add("<hostname:27012>")rs.status()
E Shards, 3
![Page 27: Hands-on Workshop: Como configurar e utilizar uma estrutura MongoDB para Big Data](https://reader033.fdocument.pub/reader033/viewer/2022051014/54b618a24a7959a32a8b460a/html5/thumbnails/27.jpg)
#Shardeandomongosh.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
![Page 28: Hands-on Workshop: Como configurar e utilizar uma estrutura MongoDB para Big Data](https://reader033.fdocument.pub/reader033/viewer/2022051014/54b618a24a7959a32a8b460a/html5/thumbnails/28.jpg)
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.
![Page 29: Hands-on Workshop: Como configurar e utilizar uma estrutura MongoDB para Big Data](https://reader033.fdocument.pub/reader033/viewer/2022051014/54b618a24a7959a32a8b460a/html5/thumbnails/29.jpg)
Já sei tudo! Estou pronto para criar minha
estrutura mongoDB?
![Page 30: Hands-on Workshop: Como configurar e utilizar uma estrutura MongoDB para Big Data](https://reader033.fdocument.pub/reader033/viewer/2022051014/54b618a24a7959a32a8b460a/html5/thumbnails/30.jpg)
![Page 32: Hands-on Workshop: Como configurar e utilizar uma estrutura MongoDB para Big Data](https://reader033.fdocument.pub/reader033/viewer/2022051014/54b618a24a7959a32a8b460a/html5/thumbnails/32.jpg)
ReferênciasLeeroy Jenkins - https://www.youtube.com/watch?v=LkCNJRfSZBUOperações com MongoDB - http://goo.gl/xzFeCADocumentação do explain - http://goo.gl/a81gKfDocumentação dos indices - http://goo.gl/ckoZrpDocumentação replicaSet - http://goo.gl/ZvCQSYDocumentação shards - http://goo.gl/JaPYmA
![Page 33: Hands-on Workshop: Como configurar e utilizar uma estrutura MongoDB para Big Data](https://reader033.fdocument.pub/reader033/viewer/2022051014/54b618a24a7959a32a8b460a/html5/thumbnails/33.jpg)
ÍCONES*
SLIDE 13Redirect designed by Alexander Bickov from the Noun Project
SLIDE 17Keys designed by Michael Rowe from the Noun Project
* Os ícones não mencionados são de domínio público.
SLIDE 2Mortar Board designed by Monika Ciapala from the Noun ProjectBeaker designed by Shmidt Sergey from the Noun Project
SLIDE 8Talking designed by Hadi Davodpour from the Noun Project
SLIDE 9Tag designed by baabullah hasan from the Noun Project
SLIDE 12Share designed by Stephanie Wauters from the Noun Project
![Page 34: Hands-on Workshop: Como configurar e utilizar uma estrutura MongoDB para Big Data](https://reader033.fdocument.pub/reader033/viewer/2022051014/54b618a24a7959a32a8b460a/html5/thumbnails/34.jpg)
Árvore de indices