Considerações sobre Coleções de séries temporais
Nesta página
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.
Considerações de metaField
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.
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 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.
Armazenamento e Cardinalidade
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.
Granularidade
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 |
---|---|
| 1 hora |
| 24 horas |
| 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.
Compactação e hardware
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.