Al crear una colección de series temporales, MongoDB agrupa automáticamente los datos entrantes de series temporales en segmentos. Al configurar la granularidad, se controla la frecuencia con la que se agrupan los datos en función de su tasa de ingesta.
A partir de MongoDB 6.3, puedes usar los parámetros de agrupamiento personalizados
bucketMaxSpanSeconds y bucketRoundingSeconds para especificar los límites de los contenedores y controlar con mayor precisión cómo se agrupan los datos de series de tiempo.
Para obtener más información sobre la clasificación, consulte Sobre los datos de series de tiempo.
Nota
Debe ejecutar MongoDB 5.0.1 o posterior para poder cambiar la granularidad de una colección de series de tiempo después de que se haya creado la colección.
Recuperar los parámetros actuales de agrupamiento
Para recuperar los valores actuales de la colección, utiliza el comando listCollections :
db.runCommand( { listCollections: 1 } )
Para colecciones de series temporales, la salida contiene los parámetros granularity, bucketMaxSpanSeconds y bucketRoundingSeconds, si están presentes.
{ 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> } }, ... }, ... ] } }
Fija el parámetro "granularidad"
El siguiente ejemplo configura el granularity de una colección weather24h en minutes:
db.createCollection( "weather24h", { timeseries: { timeField: "timestamp", metaField: "metadata", granularity: "minutes" }, expireAfterSeconds: 86400 } )
Uso de parámetros de agrupación personalizados
En MongoDB 6.3 y posteriores, en lugar de granularity, puedes establecer los límites de los cubos manualmente usando los dos parámetros de cubeteado personalizado. Considera este enfoque si esperas query datos en intervalos de tiempo fijos, como cada 4 horas a partir de la medianoche. Garantizar que los buckets no se superpongan entre esos períodos optimiza para un alto volumen de query y insert operaciones.
Para utilizar parámetros de agrupación personalizada, ajusta ambos parámetros al mismo valor y no establezcas granularity:
bucketMaxSpanSecondsEstablece el tiempo máximo entre marcas de tiempo en el mismo bucket. Los valores posibles son de 1 a 31536000.bucketRoundingSecondsestablece el intervalo de tiempo que determina la marca de tiempo de inicio de un nuevo bucket. Cuando un documento requiere un nuevo bucket, MongoDB redondea hacia abajo el valor de la marca de tiempo del documento según este intervalo para establecer el tiempo mínimo para el bucket.
Para el ejemplo de la estación meteorológica, si generas informes de resumen cada 4 horas, podrías ajustar la agrupación configurando los parámetros de agrupación personalizada a 14400 segundos en lugar de usar un granularity de "minutes":
db.createCollection( "weather24h", { timeseries: { timeField: "timestamp", metaField: "metadata", bucketMaxSpanSeconds: 14400, bucketRoundingSeconds: 14400 } } )
Si un documento con un tiempo de 2023-03-27T16:24:35Z no encaja en un bucket existente, MongoDB crea uno nuevo con un tiempo mínimo de 2023-03-27T16:00:00Z y un tiempo máximo de 2023-03-27T19:59:59Z.
Cambiar la granularidad de serie de tiempo
Puedes aumentar timeseries.granularity de una unidad de tiempo más corta a una más larga usando un comando collMod.
db.runCommand( { collMod: "weather24h", timeseries: { granularity: "seconds" | "minutes" | "hours" } } )
Si usas los parámetros de segmentación personalizada bucketRoundingSeconds y bucketMaxSpanSeconds en lugar de granularity, incluye ambos parámetros personalizados en el comando collMod y establécelo en el mismo valor:
db.runCommand( { collMod: "weather24h", timeseries: { bucketRoundingSeconds: 86400, bucketMaxSpanSeconds: 86400 } } )
No se puede disminuir el intervalo de granularidad ni los valores de agrupación personalizados.
Nota
Para modificar la granularidad de una colección de series de tiempo particionada, debes estar ejecutando MongoDB 6.0 o posterior.