Cuando crea una colección de series temporales, MongoDB crea automáticamente una system.buckets Colección del sistema y agrupa los datos de series de tiempo entrantes en buckets. Al establecer la granularidad, tú controlas qué tan seguido se agrupan los datos según la tasa de ingestión de tus datos.
A partir de MongoDB 6.3, puedes utilizar los parámetros de distribución personalizados bucketMaxSpanSeconds y bucketRoundingSeconds para especificar los límites de los rangos y controlar con mayor precisión cómo se agrupan los datos de series de tiempo.
Para obtener más información sobre el agrupamiento en cubos, consulte Acerca de 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.