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

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 a timeseries.timeField. El campo puede ser de cualquier tipo.

timeseries.granularity

string

Opcional. Los valores posibles son "seconds", "minutes" y "hours". De forma predeterminada, MongoDB establece de granularity a "seconds" para una ingesta de alta frecuencia.

Configure manualmente el parámetro granularity para mejorar el rendimiento optimizando el almacenamiento interno de los datos de la colección de series temporales. Para seleccionar un valor para granularity, elija la coincidencia más cercana al intervalo de tiempo entre mediciones entrantes consecutivas.

Si especifica timeseries.metaField, considere el intervalo de tiempo entre mediciones entrantes consecutivas que tengan el mismo valor único en el campo metaField. Las mediciones suelen tener el mismo valor único en 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 o vista de series temporales con el nombre system.profile porque el servidor MongoDB fallará.

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().

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")
})

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
}

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: { ... }
},
...
},
...
]
}
}

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.

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.

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:

  • snappy

  • zlib

  • zstd (por defecto)

  • none

Volver

Colecciones con tamaño fijo

En esta página