Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
Click here >
Docs Menu
Docs Home
/
Manual de MongoDB

Colecciones de series de tiempo

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

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.

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.

Nota

Solo puedes crear colecciones de series temporales en un sistema que tenga featureCompatibilityVersion configurada en 5.0.

Antes de que puedas insertar datos en una colección de series de tiempo, debes crear explícitamente la colección usando ya sea 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 de tiempo, especifica las siguientes opciones:

Campo
Tipo
Descripción

timeseries.timeField

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 timeField.

timeseries.metaField

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 _id ni igual al timeseries.timeField. El campo puede ser de cualquier tipo.

timeseries.granularity

string

opcional. Los valores posibles son "seconds", "minutes" y "hours". Por defecto, MongoDB configura el granularity en "seconds" para una ingestión de alta frecuencia.

Establece manualmente el parámetro granularity para mejorar el rendimiento optimizando cómo se almacena internamente la información en la colección de series de tiempo. Para seleccionar un valor para granularity, elige la coincidencia más cercana al intervalo de tiempo entre medidas consecutivas entrantes.

Si especificas el timeseries.metaField, considera el lapso de tiempo entre mediciones entrantes consecutivas que tienen el mismo valor único para el campo metaField. Las mediciones suelen tener el mismo valor único para el campo metaField si provienen de la misma fuente.

Si no especificas timeseries.metaField, considera el intervalo de tiempo entre todas las mediciones que se insertan en la colección.

expireAfterSeconds

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:

  • storageEngine

  • indexOptionDefaults

  • collation

  • writeConcern

  • comment

Tip

Consulte:

Advertencia

No intente crear una colección de series de tiempo o una vista con el nombre system.profile porque el servidor de MongoDB se bloqueará.

Cada documento que se inserte debe contener una sola medición. Para insertar varios documentos a la vez, ejecutar 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().

Para recuperar un documento de una colección de series de tiempo, emita el siguiente comando:

db.weather.findOne({
"timestamp": ISODate("2021-05-18T00:00:00.000Z")
})

Para funciones adicionales de query, use un pipeline 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" }
}
}
] )

El pipeline 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
}

Para determinar si una colección es de tipo serie de tiempo, usa 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: { ... }
},
...
},
...
]
}
}

La colección de series de tiempo se comporta como colecciones normales. Puede insertar y query sus datos como lo haría normalmente. MongoDB trata las colecciones de series de tiempo como vistas no materializadas editables sobre colecciones internas que organizan automáticamente los datos de series de tiempo en un formato de almacenamiento optimizado al insertar.

Cuando consultas colecciones de series temporales, operas sobre un documento por cada medición. Las consultas sobre colecciones de series temporales aprovechan el formato de almacenamiento interno optimizado y devuelven los resultados más rápidamente.

Tip

Para mejorar el rendimiento de las consultas, puedes agregar índices secundarios manualmente en los campos especificados como el metaField y el timeField.

Las colecciones de series temporales ordenan e indexan automáticamente los datos por tiempo. El índice interno de una colección de series de tiempo no se muestra por listIndexes.

Si se inserta un documento en una colección con un valor timeField antes del 1970-01-01T00:00:00.000Z o después del 2038-01-19T03:14:07.000Z, MongoDB registra una advertencia e impide que ciertas optimizaciones de query aprovechen el índice interno. Crear un índice secundario en el timeField para restaurar el rendimiento de la query y resolver la advertencia del registro.

Las colecciones de series de tiempo ignoran el algoritmo de compresión global por defecto, snappy, en favor de zstd, a menos que se especifique un algoritmo de compresión diferente mediante la opción storageEngine cuando se creó la colección. Por ejemplo, para cambiar el algoritmo de compresión a snappy para una nueva colección weather, se debe agregar la siguiente opción:

db.createCollection(
"weather",
{
timeseries: {
timeField: "timestamp"
},
storageEngine: {
wiredTiger: {
configString: "block_compressor=snappy"
}
}
}
)

Las opciones válidas de block_compressor son:

  • snappy

  • zlib

  • zstd (por defecto)

  • none

Volver

Colecciones con tamaño fijo

En esta página