Lições Aprendidas MongoDB

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

Transcript of Lições Aprendidas MongoDB

Lições Aprendidas com

André Zimmermann

Fabiano Modos @fmodos

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.

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

Introdução

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

Alta performance

Alta disponibilidade

Escalonamento automático.

Introdução

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

Introdução

Introdução

Queries

Consultas são muito simples de efetuar

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?

Queries

Demonstração

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

Projeções

Demonstração

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.

Ordenação

Demonstração

Indexes

Criação de Index é pesado

Gera indisponibilidade na coleção

Pode ser feito em segundo plano, mas é devagar

Indexes

Index simples – Intersecção

Indexes

Index Compostos – Respeitar a ordenação dos campos

Indexes

Mensurar performance do sistema

Usar ferramentas de analise de performance - DEX

Indexes

Demonstração

Fragmentação

Fragmentação dos documentos

Arquivo em disco é mapeado em páginas na RAM

Fragmentação

Fragmentação dos documentos

Escrita gera fragmentação

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

Replicação

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 }

] })

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

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)

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

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

Obrigado