Top Banner
Lições Aprendidas com André Zimmermann Fabiano Modos @fmodos
30

Lições Aprendidas MongoDB

Jan 22, 2018

Download

Software

Fabiano Modos
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Lições Aprendidas MongoDB

Lições Aprendidas com

André Zimmermann

Fabiano Modos @fmodos

Page 2: Lições Aprendidas MongoDB

Introdução

Onde o MongoDB foi utilizado

Sistema missão critica

Orientado a Eventos

Dividido em 6 módulos consumindo o mesma instancia do MongoDB

Alta concorrência em curto espaço de tempo, média de mil eventos em um minuto

Documentos com grande número de campos – de 60 até 130.

Page 3: Lições Aprendidas MongoDB

Introdução

“MongoDB is like Microsoft, they have a great marketing” - Lynn Langit

Primeiras impressões - NoSQL resolve todos os problemas do SQL tradicional

NoSQL - MongoDB geram diferentes problemas do SQL tradicional

Page 4: Lições Aprendidas MongoDB

Introdução

MongoDB é um banco NoSQL orientado a documentos, open-source.

Alta performance

Alta disponibilidade

Escalonamento automático.

Page 5: Lições Aprendidas MongoDB

Introdução

Page 6: Lições Aprendidas MongoDB

Introdução

MongoDB é Consistente e Tolerante a Partições de Rede

Replicas recebem os dados do mestre de forma assíncrona

Replicas elegem novo mestre durante partições de rede

Page 7: Lições Aprendidas MongoDB

Introdução

Page 8: Lições Aprendidas MongoDB

Introdução

Page 9: Lições Aprendidas MongoDB

Queries

Consultas são muito simples de efetuar

Page 10: Lições Aprendidas MongoDB

Queries

Essa simplicidade tem um custo

Coleções pequenas são muito rápidas

E quando a coleção não couber em memória?

Page 11: Lições Aprendidas MongoDB

Queries

Demonstração

Page 12: Lições Aprendidas MongoDB

Projeções

Documentos tentem a ser grandes por serem não normalizado - NoSQL

Alto IO, latência, consumo de memória

Analisar consultas, conhecer os dados, criar Data Transfer Object, efetuar

projeções nas consultas.

Cautela ao utilizar frameworks de persistência

Page 13: Lições Aprendidas MongoDB

Projeções

Demonstração

Page 14: Lições Aprendidas MongoDB

Ordenação

As ordenações são executadas em memórias pelo MongoDB

Existe ganho ao executar a ordenação na aplicação, quando falta o index específico

MongoDB ignora indexes quando a ordenação não respeita a direção dos indexes.

Page 15: Lições Aprendidas MongoDB

Ordenação

Demonstração

Page 16: Lições Aprendidas MongoDB

Indexes

Criação de Index é pesado

Gera indisponibilidade na coleção

Pode ser feito em segundo plano, mas é devagar

Page 17: Lições Aprendidas MongoDB

Indexes

Index simples – Intersecção

Page 18: Lições Aprendidas MongoDB

Indexes

Index Compostos – Respeitar a ordenação dos campos

Page 19: Lições Aprendidas MongoDB

Indexes

Mensurar performance do sistema

Usar ferramentas de analise de performance - DEX

Page 20: Lições Aprendidas MongoDB

Indexes

Demonstração

Page 21: Lições Aprendidas MongoDB

Fragmentação

Fragmentação dos documentos

Arquivo em disco é mapeado em páginas na RAM

Page 22: Lições Aprendidas MongoDB

Fragmentação

Fragmentação dos documentos

Escrita gera fragmentação

Page 23: Lições Aprendidas MongoDB

Replicação

Quão é critico o MongoDB para sua aplicação

Sistemas críticos não tem janela de manutenção

Replicação permite manutenção sem indisponibilidade*

Encontramos problemas ao criar a replicação

IP x Hostname

Indisponibilidade ao trocar o standalone para replicado

Page 24: Lições Aprendidas MongoDB

Replicação

Page 25: Lições Aprendidas MongoDB

Replicas

rs.initiate({

"_id" : "rsSet",

"members" : [

{ "host" : "10.2.54.4:27017",

"arbiterOnly" : false, "buildIndexes" : true, "priority" : 1 },

{ "host" : "10.2.54.2:27017",

"arbiterOnly" : true, "buildIndexes" : false },

{ "host" : "10.2.56.2:27017",

"arbiterOnly" : false, "buildIndexes" : true }

] })

Page 26: Lições Aprendidas MongoDB

Transações

MongoDB: solução para todos os seus problemas?

A nível individual (único documento) MongoDB, é atômico, consistente,

isolado e talvez durável.

Não existem transações, lidar com dinheiro se torna extremamente complexo

Page 27: Lições Aprendidas MongoDB

Transações – como abordamos?

Modelamos o sistema orientado a eventos

Cada evento e documento conhece seu estado, impedindo execução duplicada

Usamos o conhecimento do negócio para mitigar falhas no controle

Não temos a necessidade de voltar atrás (rollback)

Page 28: Lições Aprendidas MongoDB

Migração

Migramos do Mongo 3.0.4 para o 3.2.0

Problemas ao criar a replicação, da instancia antiga para a nova.

Criamos a instancia nova com replicação em três nós

Codificamos uma ferramenta que consulta e insere para migração dos dados

Ganho de performance – WiredTiger oferece lock por Documento

Page 29: Lições Aprendidas MongoDB

Conclusão e Perguntas

MongoDB pode ser a ferramenta ideal para seu sistema

Conheça os seus dados, modelagem faz diferença

Padronize suas consultas

Fragmentação existe no WiredTiger e MMAPv1

Replicas são essenciais

Page 30: Lições Aprendidas MongoDB

Obrigado