Consulta trava em node e mongo

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 ?

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

1 curtida

Processador, ultrapassa 100%

memoria de boa

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

1 curtida

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

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

1 curtida

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

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?

1 curtida

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/

1 curtida

@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.

@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

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

1 curtida

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.

1 curtida

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.

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

1 curtida

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

2 curtidas

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.

2 curtidas

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