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

Definir granularidade para dados de série temporal

Nesta página

  • Recuperar os parâmetros de bucketing atuais
  • Defina 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 system.buckets coleção de 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.

Para obter mais informações sobre bucketing, consulte Sobre dados de séries temporais.

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>
}
},
...
},
...
]
}
}

O exemplo a seguir define o granuarity de uma coleção weather24h como hours:

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

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.

Voltar

Criar e e fazer query