MongoDB na Ingresse.com - TDC 2014
-
Upload
kelly-cristina -
Category
Technology
-
view
377 -
download
0
description
Transcript of MongoDB na Ingresse.com - TDC 2014
Globalcode – Open4education
MongoDB na Ingresse.com
Kelly Costa
Desenvolvedora PHP e Modelagem dos Dados
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.
Globalcode – Open4education
A missão da Ingresse é facilitar a compra e venda de
ingressos online para qualquer tipo de evento.
Globalcode – Open4education
Globalcode – Open4education
Globalcode – Open4education
Globalcode – Open4education
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.
Globalcode – Open4education
aumento exponencial no volume de dados
uso extensivo de joins
acesso rápido a grandes quantidades de dados
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
Globalcode – Open4education
O que foi fácil?
Nada!
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.
Globalcode – Open4education
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.
Globalcode – Open4education
Globalcode – Open4education
Visando obter maior desempenho e simplicidade na busca
de eventos, optamos por eliminar o aggregation e fazer
tudo via queries.
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.
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.
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
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})
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
Globalcode – Open4education
Shopping cart
Backup
Controle de versão da coleção
Legado
Globalcode – Open4education
Perguntas?