Nuevo en la versión 5.0.
Las colecciones de series de tiempo almacenan de forma eficiente secuencias de mediciones a lo largo del tiempo. Los datos de series de tiempo son cualquier dato que se recopila a lo largo del tiempo y se identifica de forma única por uno o más parámetros que no cambian. Los parámetros inmutables que identifican tus datos de series de tiempo son generalmente los metadatos de tu fuente de datos.
Ejemplo | Medición | Metadata |
|---|---|---|
Datos del clima | Temperatura | Identificador del sensor, ubicación |
Datos de acciones | Precio de las acciones | Mercado de valores |
Visitantes del sitio web | Conteo de vistas | URL |
Colecciones de series de tiempo
Nuevo en la versión 5.0.
Las colecciones de series de tiempo almacenan eficientemente los datos de series de tiempo. En las colecciones de series de tiempo, los registros guardados se organizan de manera que los datos de la misma fuente se almacenen junto a otros puntos de datos de un momento similar en el tiempo.
Puedes crear colecciones de series de tiempo en la interfaz de usuario para implementaciones alojadas en MongoDB Atlas.
Beneficios
En comparación con las colecciones normales, almacenar datos de series de tiempo en colecciones de series de tiempo mejora la eficiencia de las query y reduce el uso del disco para los datos de series de tiempo y los índices secundarios.
Procedimientos
Crear una colección de series de tiempo
Nota
Solo puede crear colecciones de series de tiempo en un sistema con featureCompatibilityVersion establecido 5.0 en.
Antes de poder insertar datos en una colección de series de tiempo, debe crear explícitamente la colección utilizando el
db.createCollection()Método o el create comando:
db.createCollection( "weather", { timeseries: { timeField: "timestamp", metaField: "metadata", granularity: "hours" } } )
Al crear una colección de series temporales, especifique las siguientes opciones:
Campo | Tipo | Descripción |
|---|---|---|
| string | Requerido. El nombre del campo que contiene la fecha en cada documento de serie de tiempo. Los documentos en una colección de series de tiempo deben tener una fecha BSON válida como valor para el |
| string | Opcional. El nombre del campo que contiene metadatos en cada documento de serie de tiempo. Los metadatos en el campo especificado deben ser datos utilizados para etiquetar una serie única de documentos. Los metadatos deberían cambiar rara vez, o nunca. El nombre del campo especificado no puede ser |
| string | Opcional. Los valores posibles son Configure manualmente el parámetro Si especifica Si no especificas |
| Número | Opcional. Habilita la eliminación automática de documentos en una colección de series de tiempo especificando el número de segundos después de los cuales los documentos expirarán. MongoDB borra automáticamente los documentos caducados. Consulta Configura la Eliminación Automática para Colecciones de Series de Tiempo (TTL) para obtener más información. |
Otras opciones permitidas con la opción timeseries son:
storageEngineindexOptionDefaultscollationwriteConcerncomment
Advertencia
No intente crear una colección o vista de series temporales con el nombre system.profile porque el servidor MongoDB fallará.
Inserta medidas en una colección de series de tiempo
Cada documento que inserte debe contener una sola medida. Para insertar varios documentos a la vez, ejecute el siguiente comando:
db.weather.insertMany( [ { "metadata": { "sensorId": 5578, "type": "temperature" }, "timestamp": ISODate("2021-05-18T00:00:00.000Z"), "temp": 12 }, { "metadata": { "sensorId": 5578, "type": "temperature" }, "timestamp": ISODate("2021-05-18T04:00:00.000Z"), "temp": 11 }, { "metadata": { "sensorId": 5578, "type": "temperature" }, "timestamp": ISODate("2021-05-18T08:00:00.000Z"), "temp": 11 }, { "metadata": { "sensorId": 5578, "type": "temperature" }, "timestamp": ISODate("2021-05-18T12:00:00.000Z"), "temp": 12 }, { "metadata": { "sensorId": 5578, "type": "temperature" }, "timestamp": ISODate("2021-05-18T16:00:00.000Z"), "temp": 16 }, { "metadata": { "sensorId": 5578, "type": "temperature" }, "timestamp": ISODate("2021-05-18T20:00:00.000Z"), "temp": 15 }, { "metadata": { "sensorId": 5578, "type": "temperature" }, "timestamp": ISODate("2021-05-19T00:00:00.000Z"), "temp": 13 }, { "metadata": { "sensorId": 5578, "type": "temperature" }, "timestamp": ISODate("2021-05-19T04:00:00.000Z"), "temp": 12 }, { "metadata": { "sensorId": 5578, "type": "temperature" }, "timestamp": ISODate("2021-05-19T08:00:00.000Z"), "temp": 11 }, { "metadata": { "sensorId": 5578, "type": "temperature" }, "timestamp": ISODate("2021-05-19T12:00:00.000Z"), "temp": 12 }, { "metadata": { "sensorId": 5578, "type": "temperature" }, "timestamp": ISODate("2021-05-19T16:00:00.000Z"), "temp": 17 }, { "metadata": { "sensorId": 5578, "type": "temperature" }, "timestamp": ISODate("2021-05-19T20:00:00.000Z"), "temp": 12 } ] )
Para insertar un solo documento, utiliza el método db.collection.insertOne().
Realiza queries a una colección de series de tiempo
Para recuperar un documento de una colección de series temporales, emita el siguiente comando:
db.weather.findOne({ "timestamp": ISODate("2021-05-18T00:00:00.000Z") })
Ejecuta agregaciones en una colección de series de tiempo
Para obtener una funcionalidad de consulta adicional, utilice una canalización de agregación como:
db.weather.aggregate( [ { $project: { date: { $dateToParts: { date: "$timestamp" } }, temp: 1 } }, { $group: { _id: { date: { year: "$date.year", month: "$date.month", day: "$date.day" } }, avgTmp: { $avg: "$temp" } } } ] )
La canalización de agregación de ejemplo agrupa todos los documentos por la fecha de la medición y luego devuelve el promedio de todas las mediciones de temperatura de ese día:
{ "_id" : { "date" : { "year" : 2021, "month" : 5, "day" : 18 } }, "avgTmp" : 12.714285714285714 } { "_id" : { "date" : { "year" : 2021, "month" : 5, "day" : 19 } }, "avgTmp" : 13 }
Comprobar si una colección es de tipo serie temporal
Para determinar si una colección es de tipo serie temporal, utilice el comando listCollections:
db.runCommand( { listCollections: 1.0 } )
Si la colección es una colección de series de tiempo, devuelve esto:
{ cursor: { id: <number>, ns: 'test.$cmd.listCollections', firstBatch: [ { name: <string>, type: 'timeseries', options: { expireAfterSeconds: <number>, timeseries: { ... } }, ... }, ... ] } }
Comportamiento
Las colecciones de series temporales se comportan como colecciones normales. Puede insertar y consultar sus datos como lo haría normalmente. MongoDB trata las colecciones de series temporales como vistas no materializadas con permisos de escritura en colecciones internas que organizan automáticamente los datos de series temporales en un formato de almacenamiento optimizado al insertarlos.
Al consultar colecciones de series temporales, se opera con un documento por medición. Las consultas en colecciones de series temporales aprovechan el formato de almacenamiento interno optimizado y generan resultados más rápidamente.
Index
Tip
Para mejorar el rendimiento de la consulta, puede agregar manualmente índices secundarios en los campos especificados metaField como timeField y.
Las colecciones de series temporales ordenan e indexan automáticamente los datos por tiempo. El índice interno de una colección de series temporales no se muestra listIndexes mediante.
Si inserta un documento en una colección con un timeField valor antes de 1970-01-01T00:00:00.000Z o después 2038-01-19T03:14:07.000Z de, MongoDB registra una advertencia e impide que algunas optimizaciones de consultas utilicen el índice interno. Cree un índice secundario en timeField para recuperar el rendimiento de las consultas y resolver la advertencia del registro.
Algoritmo de compresión predeterminado
Las colecciones de series temporales ignoran el algoritmo de compresión global predeterminado, snappy, y prefieren zstd, a menos que se especifique un algoritmo de compresión diferente mediante la storageEngine opción al crear la colección. Por ejemplo, para cambiar el algoritmo de compresión a snappy para una nueva weather colección, agregue la siguiente opción:
db.createCollection( "weather", { timeseries: { timeField: "timestamp" }, storageEngine: { wiredTiger: { configString: "block_compressor=snappy" } } } )
Las opciones block_compressor válidas son:
snappyzlibzstd(por defecto)none