Kelly Costa trabalha como desenvolvedora PHP na Globalcode – Open4education e ajuda a equipe de desenvolvimento da Ingresse.com a otimizar o uso do banco de dados MongoDB. Ela implementou melhorias como eliminar agregações complexas e usar índices para consultas mais rápidas, melhorando o desempenho de 2x.
2. 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.
3. Globalcode – Open4education
A missão da Ingresse é facilitar a compra e venda de
ingressos online para qualquer tipo de evento.
8. 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.
10. 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
12. 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.
14. 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.
16. Globalcode – Open4education
Visando obter maior desempenho e simplicidade na busca
de eventos, optamos por eliminar o aggregation e fazer
tudo via queries.
17. 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.
19. 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
20. 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})
21. 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