Considerações sobre Coleções de séries temporais
Nesta página
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.
Considerações sobre o metaField
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.
metaField
Melhores práticas
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.
Armazenamento e cardinalidade
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.
Granularidade
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.
Compressão e hardware
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.