Nota
Debe estar ejecutando MongoDB 5.0.1 o una versión posterior para cambiar la granularidad de una colección de series de tiempo después de que la colección haya sido creada. Ver MongoDB 5.0 problemas conocidos.
Cuando crees una colección de series de tiempo, configura la granularidad con el valor que más se acerque al intervalo de tiempo entre mediciones consecutivas entrantes que tengan el mismo valor único para la metaField
campo:
db.createCollection( "weather24h", { timeseries: { timeField: "timestamp", metaField: "metadata", granularity: "minutes" }, expireAfterSeconds: 86400 } )
Configurar el parámetro granularity con precisión mejora el rendimiento al optimizar cómo se almacena internamente la información en la colección de series de tiempo.
Para establecer el parámetro con precisión, elige un valor granularity que se corresponda lo más posible con la tasa de ingestión para una fuente de datos única, según lo especificado por el valor del campo metaField.
Por ejemplo, si los datos de metaField identifican sensores meteorológicos e ingieres datos de cada sensor individual una vez cada 5 minutos, deberías elegir "minutes". Incluso si cuenta con miles de sensores y los datos provenientes de diferentes sensores sólo se reciben con segundos de diferencia, el granularity aún debe basarse en la tasa de ingestión de un sensor identificado de manera única por sus metadatos.
En la siguiente tabla, se puede ver el intervalo máximo de tiempo de datos que se almacenan juntos para cada valor de granularity:
granularity | Lapso de tiempo cubierto |
|---|---|
| una hora |
| 24 horas |
| 30 días |
Recuperar el granularity de una colección de series temporales
Para recuperar el valor actual de,granularity utilice el listCollections comando:
db.runCommand( { listCollections: 1 } )
El documento de resultado contiene un documento para la colección de series de tiempo que contiene el 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> } }, ... }, ... ] } }
Cambiar el de una colección de series temporales granularity
Para cambiar el valor del parámetro granularity, ejecute el siguiente comando collMod:
db.runCommand({ collMod: "weather24h", timeseries: { granularity: "hours" } })
Una vez que se establece el granularity, solo puede aumentarse de un nivel a la vez. De "seconds" a "minutes" o de "minutes" a "hours". No se permiten otros cambios. Si necesitas cambiar el granularity de "seconds" a "hours", primero aumenta el granularity a "minutes" y luego a "hours".
Nota
No se puede modificar el granularity de una colección de series de tiempo fragmentada.