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