Definir granularidade para dados de série temporal
Nesta página
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.
Recuperar os parâmetros de bucketing atuais
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> } }, ... }, ... ] } }
Defina o parâmetro de "granularidade"
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 } )
Como usar parâmetros de bucketing personalizados
No MongoDB 6.3 e posterior, 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 consultar 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 insert
operações.
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
.
Alterar granularidade da série temporal
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.