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

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

Nesta página

  • Considerações sobre o metaField
  • metaField Melhores práticas
  • Armazenamento e cardinalidade
  • Granularidade
  • Compressão e hardware

As coleções de séries temporais geralmente se comportam como collections 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 dados. Um metaField pode ser um objeto e pode conter subcampos. Depois de definir um campo como metaField, você pode alterar o valor de metaField , mas não pode redefinir o metaField como outro campo. Por exemplo, se você criar documentos de série temporal com o metaField definido como campo A, não poderá converter posteriormente um campo B 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 inesperado da collection porque a igualdade da array depende de uma 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 dentro de um bucket compartilham um valor 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 únicos. Collections com valores metaField refinados ou dinâmicos podem gerar mais buckets, escassamente compactados e de curta duração do que collections com valores metaField simples que raramente ou nunca mudam. Valores metaField refinados e dinâmicos normalmente diminuem o armazenamento e a eficiência 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 são comuns em expressões de filtro como parte do seu metaField.

  • Evite selecionar campos que não são usados para filtragem como parte do seu metaField. Em vez disso, use esses campos como medições.

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

As collections com valores de metaField refinados ou em constante mudança geram muitos buckets de curta duração e pouco compactados, aumentando a cardinalidade da sua collection. O aumento da cardinalidade leva à diminuição da eficiência de armazenamento e da query.

Você pode usar o parâmetro granularity para especificar com que frequência o MongoDB buckets seus dados de série temporal 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 está configurado para 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 os benefícios de armazenamento e desempenho da granularidade mais grosseira.

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 queries típicas ao escolher o valor granularity . Por exemplo, se você espera que suas queries busquem 1 dias de dados de cada vez, use "minutos". Uma granularidade mais fina, como "segundos", cria blocos que cobrem uma hora. Isso exige mais buckets para representar os mesmos dados, o que afeta negativamente o armazenamento e o desempenho da query. Uma granularidade mais grosseira, como "horas" (que tem uma extensão de bucket de 30dias), exige queries para buscar 30 dias de dados por vez e, em seguida, filtrar a maior parte deles.

Para obter exemplos, consulte Definir a granularidade dos dados de série temporal.

Todas as coleção 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 da query.

Voltar

Dados de série temporal