Menu Docs
Página inicial do Docs
/
Manual do MongoDB
/

Considerações sobre Coleções de séries temporais

Nesta página

  • Considerações de metaField
  • metaField Melhores práticas
  • Armazenamento e Cardinalidade
  • Granularidade
  • Compactação e hardware

As coleções de séries temporais geralmente se comportam como coleções normais, mas com exceções adicionais. Para obter informações sobre o comportamento e a estrutura da coleção de séries temporais, consulte Coleções de séries temporais.

Um metaField raramente deve mudar e pode ser qualquer tipo de dado. Um metaField pode ser um objeto e pode conter subcampos. Depois de definir um campo como metaField, você pode alterar o valor do metaField, mas não pode redefinir o metaField como outro campo. Por exemplo, se você criar documentos de séries temporais com o metaField definido como o campo A, não poderá converter um campo B posteriormente para ser o metaField. No entanto, se o valor de A for um objeto, você poderá adicionar novos subcampos a A.

Observação

Usar uma array como metaField pode causar um comportamento de coleta inesperado porque a igualdade da array depende da ordem específica.

O MongoDB usa o metaField para particionar dados para organização e recuperação eficientes. Quando você cria uma coleção de séries temporais, o MongoDB agrupa documentos em buckets. Os documentos em um bucket compartilham um valor de metaField idêntico e têm valores timeField próximos.

O número de buckets em uma coleção de séries temporais depende do número de valores metaField exclusivos. Coleções com valores metaField refinados ou dinâmicos podem gerar buckets mais compactados e de vida curta do que coleções com valores metaField simples que raramente ou nunca mudam. Valores metaField refinados e dinâmicos normalmente reduzem a eficiência do armazenamento e da query.

  • Selecione campos que raramente ou nunca mudam como parte do seu MetaField.

  • Se possível, selecione identificadores ou outros valores estáveis que sejam comuns em expressões de filtro como parte de seu metaField.

  • Evite selecionar campos que não sejam usados para filtragem como parte do seu MetaField. Em vez disso, use esses campos como medidas.

Quando você insere dados em uma coleção de séries temporais, a coleção interna organiza automaticamente os dados em um formato de armazenamento otimizado usando buckets. Se existir um bucket adequado, o MongoDB inserirá novos dados nesse bucket. Se um bucket adequado não existir, o MongoDB criará um novo bucket. Para otimizar o armazenamento, escolha um metaField que raramente seja alterado para criar coleções de séries temporais com menos buckets compactados mais densamente.

Coleções com valores de metaField refinados ou variáveis geram muitos baldes escassos e de vida curta, aumentando a cardinalidade de sua coleção. O aumento da cardinalidade leva à diminuição da eficiência do armazenamento e da consulta.

Você pode usar o parâmetro granularity para especificar com que frequência o MongoDB armazena seus dados de séries temporais com base na taxa de ingestão de dados. A tabela abaixo mostra o intervalo de tempo máximo incluído em um bucket de dados ao utilizar um determinado valor granularity:

granularity
granularity limite de bucket
seconds
1 hora
minutes
24 horas
hours
30 dias

Por padrão, granularity é definido como seconds. Você pode melhorar o desempenho definindo o valor granularity para a correspondência mais próxima ao intervalo de tempo entre as medições recebidas da mesma fonte de dados. Por exemplo, se você estiver gravando dados meteorológicos de milhares de sensores, mas apenas registrando dados de cada sensor uma vez a cada 5 minutos, defina granularity como "minutes". Quanto menos frequentemente você anexar novos documentos, maiores serão os benefícios de armazenamento e desempenho de uma granularidade mais ampla.

Definir granularity para hours grupo até um mês de eventos de ingestão de dados em um único bucket, resultando em tempos de travessia mais longos e queries mais lentas. Defini-lo como seconds leva a vários buckets por intervalo de pesquisa, muitos dos quais podem conter apenas um único documento.

Você também deve considerar as consultas típicas ao escolher o valor granularity. Por exemplo, se você espera que suas consultas obtenham 1 dia de dados por vez, use " minutos". Uma granularidade mais refinada, como "segundos", cria buckets que cobrem uma hora. Isso requer mais buckets para representar os mesmos dados, o que afeta negativamente o desempenho do armazenamento e da consulta. Uma granularidade mais grossa, como " hours" (que tem um intervalo de 30 dias), exige que as consultas busquem 30 dias de dados por vez e depois filtrem a maior parte deles.

Para obter exemplos, consulte Definir granularidade para dados de séries temporais.

Todas as coleções de séries temporais usam um formato de bucket compactado quando você anexa dados a buckets abertos ou reabertos. A compactação de dados de séries temporais no cache oferece suporte a cargas de trabalho de alta cardinalidade, preservando o desempenho eficiente das queries.

Voltar

Dados de Time Series