Definir granularidade para dados de série temporal
Nesta página
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 os problemas conhecidos do MongoDB 5.0 .
Ao criar uma time-series collection, defina a granularidade para o valor que for a correspondência mais próxima do intervalo de tempo entre as medições de entrada consecutivas que têm o mesmo valor exclusivo para o field metaField
:
db.createCollection( "weather24h", { timeseries: { timeField: "timestamp", metaField: "metadata", granularity: "minutes" }, expireAfterSeconds: 86400 } )
Definir o parâmetro granularity
com precisão melhora o desempenho otimizando a forma como os dados da coleção de séries temporais são armazenados internamente.
Para definir o parâmetro com precisão, escolha um valor granularity
que seja mais próximo da taxa de ingestão de um conjunto de dados único, conforme especificado pelo valor do campo metaField
.
Por exemplo, se seus dados metaField
identificam sensores meteorológicos e você ingere dados de cada sensor individual uma vez a cada 5 minutos, você deverá escolher "minutes"
. Mesmo que você tenha milhares de sensores e os dados recebidos de diferentes sensores estejam com apenas alguns segundos de diferença, o granularity
ainda deve ser baseado na taxa de ingestão de um sensor que é identificado exclusivamente por seus metadados.
Na tabela a seguir, você pode visualizar o período máximo de tempo de dados armazenados juntos para cada valor granularity
:
granularity | Intervalo de tempo coberto |
---|---|
| uma hora |
| 24 horas |
| 30 dias |
Obter a granularity
de uma coleção de séries temporais
Para recuperar o valor atual de granularity
, utilize o comando listCollections
:
db.runCommand( { listCollections: 1 } )
O documento de resultado contém um documento para a coleção de séries temporais que contém o campo options.timeseries.granularity
.
{ cursor: { id: <number>, ns: 'test.$cmd.listCollections', firstBatch: [ { name: <string>, type: 'timeseries', options: { expireAfterSeconds: <number>, timeseries: { timeField: <string>, metaField: <string>, granularity: <string>, bucketMaxSpanSeconds: <number> } }, ... }, ... ] } }
Alterar a granularity
de uma Coleção de séries temporais
Para alterar o valor de parâmetro do granularity
, emita o seguinte comando collMod
:
db.runCommand({ collMod: "weather24h", timeseries: { granularity: "hours" } })
Depois que o granularity
é definido, ele só pode ser aumentado em um nível por vez. De "seconds"
a "minutes"
ou de "minutes"
a "hours"
. Outras alterações não são permitidas. Se você precisar alterar o granularity
de "seconds"
para "hours"
, primeiro aumente o granularity
para "minutes"
e depois para "hours"
.
Observação
Você não pode modificar o granularity
de uma coleção de séries temporais fragmentadas.