Menu Docs

Página inicial do DocsDesenvolver aplicaçõesManual do MongoDB

Definir granularidade para dados de série temporal

Nesta página

  • Recuperar os parâmetros de bucketing atuais
  • Usando o parâmetro de "granularidade"
  • Como usar parâmetros de bucketing personalizados
  • Alterar granularidade da série temporal

Quando você cria uma coleção de séries temporais, o MongoDB cria automaticamente uma coleção de system.buckets sistema e agrupa dados de séries temporais de entrada em buckets. Ao definir a granularidade, você controla a frequência com que os dados são agrupados com base na taxa de ingestão dos dados.

A partir do MongoDB 6.3, você pode usar os parâmetros personalizados de agrupamento bucketMaxSpanSeconds e bucketRoundingSeconds para especificar os limites do bucket e controlar com mais precisão como os dados de séries temporais são agrupados.

Observação

Você deve estar executando o MongoDB 5.0.1 ou posterior para alterar a granularidade de uma coleção de séries temporais após a criação da coleção. Consulte Problemas conhecidos do MongoDB 5.0.

Para recuperar valores de collections atuais, use o comando listCollections:

db.runCommand( { listCollections: 1 } )

Para coleções de séries temporais, a saída contém parâmetros granularity, bucketMaxSpanSeconds e bucketRoundingSeconds, se presente.

{
cursor: {
id: <number>,
ns: 'test.$cmd.listCollections',
firstBatch: [
{
name: <string>,
type: 'timeseries',
options: {
expireAfterSeconds: <number>,
timeseries: {
timeField: <string>,
metaField: <string>,
granularity: <string>,
bucketMaxSpanSeconds: <number>,
bucketRoundingSeconds: <number>
}
},
...
},
...
]
}
}

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

db.createCollection(
"weather24h",
{
timeseries: {
timeField: "timestamp",
metaField: "metadata",
granularity: "minutes"
},
expireAfterSeconds: 86400
}
)

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.

Dica

Veja também:

No MongoDB 6.3 e superior, em vez de granularity, você pode definir os limites dos buckets manualmente usando os dois parâmetros de buckets personalizados. Considere essa abordagem se você espera fazer consulta de dados para intervalos de tempo fixos, como a cada 4 horas a partir da meia-noite. Garantir que os buckets não se sobreponham entre esses períodos otimiza o alto volume de consultas e as operações insert.

Para utilizar parâmetros de bucket personalizados, defina ambos os parâmetros para o mesmo valor e não configure granularity:

  • bucketMaxSpanSeconds Define o tempo máximo entre os carimbos de data/hora no mesmo bucket. Os valores possíveis são 1-31536000.

  • bucketRoundingSeconds Define o intervalo de tempo que determina o carimbo de data/hora inicial para um novo bucket. Quando um documento requer um novo bucket, o MongoDB arredonda para baixo o valor do carimbo de data/hora do documento por esse intervalo para definir o tempo mínimo para o bucket.

Para o exemplo da estação meteorológica, se você gerar relatórios de resumo a cada 4 horas, poderá ajustar o bucketing definindo os parâmetros de bucketing personalizados em 14400 segundos em vez de usar granularity de "minutes":

db.createCollection(
"weather24h",
{
timeseries: {
timeField: "timestamp",
metaField: "metadata",
bucketMaxSpanSeconds: 14400,
bucketRoundingSeconds: 14400
}
}
)

Se um documento com um tempo de 2023-03-27T16:24:35Z não se encaixa em um bloco existente, o MongoDB cria um novo bloco com um mínimo de tempo de 2023-03-27T16:00:00Z e um tempo máximo de 2023-03-27T19:59:59Z.

Você pode aumentar o timeseries.granularity de uma unidade de tempo mais curta para uma mais longa utilizando um comando collMod.

db.runCommand( {
collMod: "weather24h",
timeseries: { granularity: "seconds" | "minutes" | "hours" }
} )

Se você estiver usando os parâmetros de bucketing personalizados bucketRoundingSeconds e bucketMaxSpanSeconds em vez de granularity, inclua ambos os parâmetros personalizados no comando collMod e defina-os com o mesmo valor:

db.runCommand( {
collMod: "weather24h",
timeseries: {
bucketRoundingSeconds: 86400,
bucketMaxSpanSeconds: 86400
}
} )

Você não pode diminuir o intervalo de granularidade ou os valores de agrupamento personalizados.

Observação

Para modificar a granularidade de uma coleção de séries temporais compartilhada, você deve estar executando MongoDB 6.0 ou posterior.

← Configurar Remoção Automática para Coleções de séries temporais (TTL)