MongoDB na Ingresse.com - TDC 2014

24
Globalcode – Open4education MongoDB na Ingresse.com Kelly Costa Desenvolvedora PHP e Modelagem dos Dados

description

Case de sucesso usando MongoDB na Ingresse.com - TDC 2014

Transcript of MongoDB na Ingresse.com - TDC 2014

Page 1: MongoDB na Ingresse.com - TDC 2014

Globalcode – Open4education

MongoDB na Ingresse.com

Kelly Costa

Desenvolvedora PHP e Modelagem dos Dados

Page 2: MongoDB na Ingresse.com - TDC 2014

Globalcode – Open4education

Kelly Costa

Manaus - AM

Desenvolvedora PHP

9 anos de experiência em projetos web

Secretaria Municipal de Saúde de Manaus

Desenvolvimento de Software

Modelagem dos dados

Auxiliar a equipe de desenvolvimento e testes a maximizar

o uso e desempenho do banco de dados MongoDB na

Ingresse.com.

Page 3: MongoDB na Ingresse.com - TDC 2014

Globalcode – Open4education

A missão da Ingresse é facilitar a compra e venda de

ingressos online para qualquer tipo de evento.

Page 4: MongoDB na Ingresse.com - TDC 2014

Globalcode – Open4education

Page 5: MongoDB na Ingresse.com - TDC 2014

Globalcode – Open4education

Page 6: MongoDB na Ingresse.com - TDC 2014

Globalcode – Open4education

Page 7: MongoDB na Ingresse.com - TDC 2014

Globalcode – Open4education

Page 8: MongoDB na Ingresse.com - TDC 2014

Globalcode – Open4education

Nem todos os usuários que navegam no site

https://www.ingresse.com realizam a compra naquele

momento, muitos buscam informações sobre os eventos,

como data, local, valor do ingresso, exigindo um acesso

rápido a grandes quantidades de dados.

Page 9: MongoDB na Ingresse.com - TDC 2014

Globalcode – Open4education

aumento exponencial no volume de dados

uso extensivo de joins

acesso rápido a grandes quantidades de dados

Page 10: MongoDB na Ingresse.com - TDC 2014

Globalcode – Open4education

Por que o MongoDB?

formato JSON, facilidade para o programador

rápida recuperação dos dados

diferentes recursos de consulta, sem transações e joins,

possui estruturas mais simples

os objetos estão inseridos em um único documento.

atua sem um esquema previamente definido

Page 11: MongoDB na Ingresse.com - TDC 2014

Globalcode – Open4education

O que foi fácil?

Nada!

Page 12: MongoDB na Ingresse.com - TDC 2014

Globalcode – Open4education

Operações de agregações (Aggregation)

permitem que usuários processem todos os registros de dados

através de operações similares aos comandos SQL “count (*)” e

“grupo by” e retorna o resultado calculado.

ótimo quando usado em consultas pontuais

quando recorrentes e concorrentes, essas consultas demandam

muito esforço

custos na alocação de memória e desempenho.

Page 13: MongoDB na Ingresse.com - TDC 2014

Globalcode – Open4education

Page 14: MongoDB na Ingresse.com - TDC 2014

Globalcode – Open4education

No caso da Ingresse, todas as condições utilizadas na

busca de eventos são trabalhadas e armazenadas em um

array.

Algumas consultas utilizavam regex, o que exigia muito

mais do servidor.

Isso tornava a aplicação pouco flexível e nada

performática.

Page 15: MongoDB na Ingresse.com - TDC 2014

Globalcode – Open4education

Page 16: MongoDB na Ingresse.com - TDC 2014

Globalcode – Open4education

Visando obter maior desempenho e simplicidade na busca

de eventos, optamos por eliminar o aggregation e fazer

tudo via queries.

Page 17: MongoDB na Ingresse.com - TDC 2014

Globalcode – Open4education

Pra isso, fizemos uso dos índices, zerando a necessidade

de processos complementares.

A consulta é feita dentro do próprio índice, possibilitando

concorrência e recorrência sem maiores problemas,

resultando em consultas mais rápidas.

Page 18: MongoDB na Ingresse.com - TDC 2014

Globalcode – Open4education

db.event.ensureIndex({'title': 'text', 'description': 'text', 'tags':

'text', 'link': 'text'}, {'default_language':'portuguese',

name:"busca01"}

O índice busca01 cancelou o uso do regex.

Page 19: MongoDB na Ingresse.com - TDC 2014

Globalcode – Open4education

full text search:

db.event.find({$text: {$search: "marcelo"}},{'title': true,

'description': true, 'tags': true, ‘link’: true}) .pretty()

Alterado na versão 2.6: MongoDB

Page 20: MongoDB na Ingresse.com - TDC 2014

Globalcode – Open4education

A ordenação padrão utilizada é do evento mais próximo da

data atual para o mais futuro. Pra isso criamos o índice

db.event.ensureIndex({eventDate.dateTime: 1})

Page 21: MongoDB na Ingresse.com - TDC 2014

Globalcode – Open4education

Ganho relevante na performance, saindo de 100 usuários

por minuto para 2.000 usuários/minuto em testes de

laboratório

Consulta mais simples.

Agilidade

Flexibilidade

Page 22: MongoDB na Ingresse.com - TDC 2014

Globalcode – Open4education

Shopping cart

Backup

Controle de versão da coleção

Legado

Page 23: MongoDB na Ingresse.com - TDC 2014

Globalcode – Open4education

Perguntas?