Substituindo a agregação em busca de eventos

As operações de agregações (Agregação) permitem que os usuários processem todos os registros de dados por meio de operações semelhantes ao comando SQL “contagem (*)” e “agrupar por” e retorne o resultado calculado. É ótimo quando usado em consultas ad hoc, pois permitem coisas incríveis. No entanto, se recorrentes e concorrentes, essas consultas exigem muito esforço que eles precisam para relacionar dados de vários registros. O nó agregador de chamadas é distribuído para cada fragmento e eles se tornam responsáveis ​​pelos dados de sua parte. A consulta reúne esses dados e os devolve ao cliente, gerando custos na alocação de memória e desempenho.

No caso do Ingresse, todas as condições utilizadas na busca de eventos são tratadas e armazenadas em um array. Algumas consultas usavam regexp, o que exigia muito do servidor. Isso tornou a aplicação um pouco flexível e nada performativa.

Para obter maior desempenho e simplicidade na busca de eventos, optamos por eliminar a agregação e fazer tudo por meio de consultas.

Para isso usamos os índices, zerando a necessidade de processos adicionais. A consulta é feita dentro do próprio índice, permitindo competição e recorrência sem maiores problemas, resultando em consultas mais rápidas.

Primeiro, crie as chaves de indexação do índice “título”, “descrição”, “tags” e “link” da seguinte maneira:

db.event.ensureIndex ({‘título’: ‘texto’, ‘descrição’: ‘texto’, ‘tags’, ‘texto’, ‘link’: ‘texto’}, {‘DEFAULT_LANGUAGE’: nome ‘inglês’ ” busca01 “}

O índice busca01 cancelou o uso de regex.

Os índices no MongoDB são muito semelhantes aos dos bancos de dados relacionais. Você pode colocar um índice em qualquer atributo.

Em segundo lugar, realizamos uma pesquisa por meio da pesquisa de texto completo:
db.event.find ({$ text: $ {search: “marcelo”}}, {‘title’: true, ‘description’: true, ‘tags’: true , ‘link’: verdadeiro, ‘_id’: falso}) .pretty ()

o que importa está lá
db.event.find ({$ text: $ {search: “marcelo”}})

Alterado na versão 2.6: MongoDB permite o texto do recurso de pesquisa por padrão

A ordem de classificação padrão usada é o evento mais próximo da data atual como o futuro. Para criar este índice:
db.event.ensureIndex (eventDate.dateTime {1})

Pronto! Com essas mudanças houve um ganho significativo de desempenho, saindo de 100 usuários para 2.000 usuários por minuto / minuto em exames laboratoriais além de consultas que ficaram mais simples.

Referências

http://mongodbwise.wordpress.com/2014/05/22/mongodb-guia-rapido/

SADALAGE, P .; FOWLER, M. NoSQL Essencial – Um Guia Conciso para o Mundo Emergente da Persistência Poliglota. ED. Novatec, 2013