Your SlideShare is downloading. ×
0
Hands-on Workshop: Como configurar e utilizar uma estrutura MongoDB para Big Data
Hands-on Workshop: Como configurar e utilizar uma estrutura MongoDB para Big Data
Hands-on Workshop: Como configurar e utilizar uma estrutura MongoDB para Big Data
Hands-on Workshop: Como configurar e utilizar uma estrutura MongoDB para Big Data
Hands-on Workshop: Como configurar e utilizar uma estrutura MongoDB para Big Data
Hands-on Workshop: Como configurar e utilizar uma estrutura MongoDB para Big Data
Hands-on Workshop: Como configurar e utilizar uma estrutura MongoDB para Big Data
Hands-on Workshop: Como configurar e utilizar uma estrutura MongoDB para Big Data
Hands-on Workshop: Como configurar e utilizar uma estrutura MongoDB para Big Data
Hands-on Workshop: Como configurar e utilizar uma estrutura MongoDB para Big Data
Hands-on Workshop: Como configurar e utilizar uma estrutura MongoDB para Big Data
Hands-on Workshop: Como configurar e utilizar uma estrutura MongoDB para Big Data
Hands-on Workshop: Como configurar e utilizar uma estrutura MongoDB para Big Data
Hands-on Workshop: Como configurar e utilizar uma estrutura MongoDB para Big Data
Hands-on Workshop: Como configurar e utilizar uma estrutura MongoDB para Big Data
Hands-on Workshop: Como configurar e utilizar uma estrutura MongoDB para Big Data
Hands-on Workshop: Como configurar e utilizar uma estrutura MongoDB para Big Data
Hands-on Workshop: Como configurar e utilizar uma estrutura MongoDB para Big Data
Hands-on Workshop: Como configurar e utilizar uma estrutura MongoDB para Big Data
Hands-on Workshop: Como configurar e utilizar uma estrutura MongoDB para Big Data
Hands-on Workshop: Como configurar e utilizar uma estrutura MongoDB para Big Data
Hands-on Workshop: Como configurar e utilizar uma estrutura MongoDB para Big Data
Hands-on Workshop: Como configurar e utilizar uma estrutura MongoDB para Big Data
Hands-on Workshop: Como configurar e utilizar uma estrutura MongoDB para Big Data
Hands-on Workshop: Como configurar e utilizar uma estrutura MongoDB para Big Data
Hands-on Workshop: Como configurar e utilizar uma estrutura MongoDB para Big Data
Hands-on Workshop: Como configurar e utilizar uma estrutura MongoDB para Big Data
Hands-on Workshop: Como configurar e utilizar uma estrutura MongoDB para Big Data
Hands-on Workshop: Como configurar e utilizar uma estrutura MongoDB para Big Data
Hands-on Workshop: Como configurar e utilizar uma estrutura MongoDB para Big Data
Hands-on Workshop: Como configurar e utilizar uma estrutura MongoDB para Big Data
Hands-on Workshop: Como configurar e utilizar uma estrutura MongoDB para Big Data
Hands-on Workshop: Como configurar e utilizar uma estrutura MongoDB para Big Data
Hands-on Workshop: Como configurar e utilizar uma estrutura MongoDB para Big Data
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

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

167

Published on

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

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

No workshop, um ambiente MongoDB distribuído será configurado de maneira a possibilitar a escalabilidade de sua aplicação. Serão abordadas boas práticas para a utilização da infra-estrutura além dos seguintes temas:

- Replicas e sharding;
- Definição, utilização e manutenção de índices;
- Map Reduce vs Aggregate;
- Ferramentas úteis.

Pre-requisitos:
Computador pessoal com MongoDB 2.6 instalado (http://www.mongodb.org/downloads)
No Ubuntu, o pacote é o mongodb-org; repositório disponível em http://docs.mongodb.org/manual/tutorial/install-mongodb-on-ubuntu/.

Gabriel Campos

Co-fundador e CTO da Zahpee.

Bacharel em Ciência da Computação pela UFMG. Há mais de quatro anos atua no desenvolvimento de coleta, processamento e visualização de dados. MongoDB entusiasta e administrador do banco de dados da Zahpee.

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
167
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
3
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  1. Gabriel Campos Como configurar e utilizar uma estrutura MongoDB para Big Data
  2. Gabriel Campos gabriel.campos@zahpee.com | @gcouti
  3. Como funcionará? Iremos fazer diversos ciclos que irão compreender apresentações de conceitos e como implementá-los
  4. Ok! Let’s do it Leeroy Jenkins
  5. NoSQL x SQL Não relacional Sem esquema Escalabilidade Relacional Esquema bem definido Transacional Qual escolher?
  6. 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.
  7. 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"})
  8. 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
  9. Í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
  10. 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
  11. E agora? Como saber se ficou bom?
  12. 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
  13. 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.
  14. 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
  15. Framework que auxilia o agrupamento de operações no mongoDB. Pipeline de comandos. Internamente o mongo otimiza algumas fases do pipeline. Aggregate
  16. db.People.aggregate({ $match:{} }, { $group:{ _id:"$pgt", "total":{ $sum:1 } } }) C Aggregate c-aggregate.js
  17. 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.
  18. Configurando a estrutura MongoDB
  19. 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
  20. cd ~ mkdir -p mongo-bdw cd mongo-bdw mkdir -p rs0-0 rs0-1 rs0-2 D ReplicaSet, 1
  21. # 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
  22. mongo --port 27000 rs.initiate() rs.add("jarvis:27001") rs.add("jarvis:27002") rs.status() D ReplicaSet, 3
  23. 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.
  24. 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
  25. 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
  26. mongo --port 27010 rs.initiate() rs.add("<hostname:27011>") rs.add("<hostname:27012>") rs.status() E Shards, 3
  27. #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
  28. 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.
  29. Já sei tudo! Estou pronto para criar minha estrutura mongoDB?
  30. Gabriel Campos gabriel.campos@zahpee.com | @gcouti Obrigado!
  31. 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
  32. Í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
  33. Árvore de indices

×