Consulta trava em node e mongo

17 respostas
guilhermebhte
let where = {
            data_hora: {
              $gte: dataInicioQuery.toISOString(),
              $lte: dataFimQuery.toISOString(),
            },
            nome_campanha: campanha,
          };
          const zanzar = await Zanzar.find(where).sort({
            data_hora: -1,
            id_campanha: -1,
          });

Tanto local ou em homologação, da erro. Tipo ele inicia a consulta, e ai não sei quem não aguenta.

Se o banco ou se o node.

no mesmo servidor, tem postgres, mongo, node, vue e react. Se não me engano no total de 4 gb de memoria.

Consulta que no banco de dados retorna mais de 500 mil registros

o que pode ser ?

17 Respostas

Lucas_Camara

Qdo a consulta é realizada, vc consegue ver como está os recursos da máquina (memoria, processador)?

guilhermebhte

Processador, ultrapassa 100%

memoria de boa

javaflex

O usuário precisa ver 500 mil registros ao mesmo tempo? Ideal é paginar.

guilhermebhte

Deste 500 mil, preciso montar um gráfico e não pode paginar;

javaflex

Cria um schedule pra já deixar esses dados processados gravados, somente com o necessário pra gerar esse gráfico.

guilhermebhte

Não entendi, mas acho que não tem como, porque o usuário quem define o que quer pelos parâmetros.

pode vir 100 mil
200 mil
500 mil ou mais

Todo dia um processo de madrugada busca informações de um outro servidor, que insere mais ou menos 100 mil registros por dia

hoje a base de 7 milhões de registros, e vai aumentando de acordo com os dias

Este veio com 1000 registros

Por isso que não pode ser paginado

Lucas_Camara

Vc transforma esses 500 mil registros para plotar o gráfico e o mapa de calor? Vc consegue postar um registro para a gente ver o formato?

javaflex

Voce pode paginar por algum período, como por mês, semana, ou outra forma, nao deixar essa tripa infinita.

Exemplo só pra ilustrar:
https://www.amcharts.com/docs/v4/tutorials/pagination-of-date-based-data/

guilhermebhte

@javaflex, entendi. Paginação no gráfico por mês.

Mas os 500 mil registros são dos últimos 15 dias.

Só se eu paginar no banco e retornar tudo em um array somente no node. Porque entendo que o problema está na consulta no banco, e não no node.

guilhermebhte

@Lucas_Camara

O mapa de calor é uma lista contendo latitude e longitude. Assim o google maps colore os pontos.

Últimos 30 dias

- 625 registros

do período de 01/08/2021 a 06/10/2021

- 1370 registros

javaflex

Nao entendi, mas no geral só devemos trazer do banco o que for extremamente necessário em cada requisição.

Lucas_Camara

Isso depende. O node tb vai consumir recursos para trabalhar esses 500 mil registros. A não ser que o banco esteja rodando na mesma maquina onde o node também está sendo executado.

guilhermebhte

O quiz dizer que ainda tenho que ver, porque as consultas não são mensais. podem ser por qualquer data, pelo período de um dia a 3 meses.

O que estou dizendo é, que o sistema quando retorna 500 mil regitros para um período de 15 dias, não ficaria legal paginar o gráfico.

Além do mais, fiz um teste limitando o banco de dados. ele consegue trazer 4000 registros.

guilhermebhte

Olhei com o pessoal da infra e o banco está na mesma máquina, como disse no primeiro post

Lucas_Camara

Como o @javaflex disse, vc pode tentar retornar paginado do banco e ir plotando aos poucos, será que funciona?

javaflex

Em relacao a mapa, os objetos do Google Maps por exemplo nao carregam tudo de uma vez, vai incrementando. Voce pode fazer mesmo, carregar de x em x registros.

guilhermebhte

Obrigado pela ajuda @javaflex e @Lucas_Camara . Mãos a obra agora

Criado 4 de outubro de 2021
Ultima resposta 6 de out. de 2021
Respostas 17
Participantes 3