Las colecciones de series temporales generalmente se comportan como colecciones regulares con varias limitaciones.
Funciones no compatibles
MongoDB no admite las siguientes funcionalidades con colecciones de series de tiempo:
Nota
No puedes utilizar colecciones de series temporales como origen para Atlas Stream Processing. Las colecciones de series temporales no admiten cambios de flujo.
Agregación $merge
No puedes usar la etapa de agregación $merge para añadir datos de otra colección a una colección de series de tiempo. Utiliza la etapa de agregación $out para guardar documentos en una colección de series de tiempo.
Puede utilizar para mover datos de una colección de series de tiempo a otra $merge colección.
Comando distinct
Debido a la estructura única de datos de las colecciones de series temporales, MongoDB no puede indexarlas eficientemente para valores distintos. Evite utilizar el comando distinct o el método asistente db.collection.distinct() en colecciones de series temporales. En su lugar, use una $group agregación para agrupar documentos por valores distintos.
Por ejemplo, para query valores meta.type distintos en documentos donde meta.project = 10, en lugar de:
db.foo.distinct("meta.type", {"meta.project": 10})
Uso:
db.foo.createIndex({"meta.project":1, "meta.type":1}) db.foo.aggregate([{$match: {"meta.project": 10}}, {$group: {_id: "$meta.type"}}])
Esto funciona de la siguiente manera:
Creando un índice compuesto en
meta.projectymeta.typey admite la agregación.La etapa
$matchfiltra los documentos en los quemeta.project = 10.La etapa
$grouputilizameta.typecomo la clave de grupo para generar un documento por cada valor único.
Query geoespacial
Las colecciones de series temporales solo admiten la $geoNear etapa de agregación para ordenar datos geoespaciales de consultas en 2 índices dsphere. No se pueden usar los $near operadores y en colecciones de series temporales.$nearSphere
$geoNear
No se puede utilizar el query campo para $geoNear en una colección de series de tiempo.
Debe especificar el campo key para $geoNear en una colección de series de tiempo.
Tamaño del documento
El tamaño máximo de los documentos dentro de una colección de series de tiempo es 4 MB.
Rango de fechas extendido
Si su colección de series de tiempo contiene documentos con timeField marcas de tiempo antes de 1970-01-01T00:00:00.000Z o después de 2038-01-19T03:14:07.000Z, cree un índice en timeField para optimizar las consultas.
Updates
Los comandos de actualización deben cumplir con los siguientes requisitos:
Solo puedes hacer coincidir el valor del campo
metaField.Solo puedes modificar el valor del campo
metaField.El documento de actualización solo puede contener expresiones de operador de actualización.
Tu comando de actualización no debe limitar la cantidad de documentos a actualizar. Establecer
multi: trueo utilizar el métodoupdateMany().El comando de actualización no debe establecer inserción: true.
Para borrar automáticamente datos antiguos, configura la eliminación automática (TTL).
Índices Secundarios de series de tiempo
MongoDB admite parcialmente los siguientes índices en colecciones de series de tiempo:
Solo puedes crear índices multikey en el
metaField.Sólo se pueden crear 2índices d
metaFielden.Solo puedes crear índices "sparse" en el
metaField.
MongoDB no admite los siguientes tipos de índices en colecciones de series temporales:
Si hay índices secundarios en colecciones de series de tiempo y necesitas degradar la versión de compatibilidad de funciones (FCV), primero debes descartar cualquier índice secundario que sea incompatible con la FCV degradada. Para obtener más información, consulta setFeatureCompatibilityVersion.
Colecciones con tamaño fijo
No puedes crear una colección de series de tiempo como colección con tamaño fijo.
Modificación del tipo de colección
Solo puedes establecer el tipo de colección al crear una colección:
No se puede convertir una colección existente en una colección de series de tiempo.
No puedes convertir una colección de series de tiempo en otro tipo de colección.
Para mover datos de una colección existente a una colección de series de tiempo, migrar datos a una colección de series de tiempo.
Modificación de timeField y metaField
Solo puedes configurar los parámetros timeField y metaField de una colección al momento de crearla. No puedes modificar estos parámetros más tarde.
Granularidad
Tamaño del contenedor
Para cualquier configuración de parámetros de granularidad, el tamaño máximo de un bucket es de 1000 mediciones o 125 KB de datos, lo que sea menor. MongoDB también puede imponer un tamaño máximo menor para datos de alta cardinalidad con muchos valores únicos, de modo que el conjunto de trabajo de buckets quepa en la caché de WiredTiger.
Modificando los parámetros del «bucket»
Una vez establezcas el granularity de una colección o los parámetros personalizados de agrupamiento bucketMaxSpanSeconds y bucketRoundingSeconds, puedes aumentar el lapso de tiempo cubierto por un cubo, pero no reducirlo. Utiliza el comando collMod para modificar los parámetros. Por ejemplo:
db.runCommand({ collMod: "timeseries", timeseries: { bucketMaxSpanSeconds: 3600, bucketRoundingSeconds: 3600 } })
Nota
bucketMaxSpanSeconds y bucketRoundingSeconds deben ser iguales. Si modificas un parámetro, también debes establecer el otro con el mismo valor.
particionado
Las colecciones de series temporales están sujetas a varias limitaciones de particionamiento.
Comandos de administración de fragmentación
No se pueden ejecutar comandos de administración de particionamiento en colecciones de series de tiempo particionadas.
Campos de clave de partición
Al fragmentar colecciones de series temporales, solo puede especificar los siguientes campos en la clave de fragmentación:
La
metaFieldSubcampos de
metaFieldLa
timeField
Puede especificar combinaciones de estos campos en la clave de partición. No se admiten otros campos, incluido _id, en el patrón de clave de partición.
Cuando se especifica la clave de partición:
metaFieldpuede ser ya sea un:timeFielddebe ser:Al final del patrón de clave de partición
Tip
Evita especificar solo el timeField como clave de partición. Dado que el timeField aumenta de manera monótona, puede provocar que todas las escrituras aparezcan en un solo fragmento dentro del clúster. Idealmente, los datos se distribuyen uniformemente entre los fragmentos.
Para saber cómo elegir mejor una clave de fragmento, consulte:
Redistribución
No puede cambiar el particionado de una colección de series de tiempo particionada. Sin embargo, puede refinar su clave de partición.
Partición por zonas
La partición por zonas no admite colecciones de series de tiempo. El balanceador siempre distribuye los datos en colecciones de series de tiempo fragmentadas de manera uniforme en todos los fragmentos del clúster.
Transacciones
No puede escribir en colecciones de series temporales en transacciones.
Nota
MongoDB admite lecturas de colecciones de series temporales en transacciones.
Vistas
Las colecciones de series de tiempo son vistas no materializadas que se pueden escribir. Las limitaciones para las vistas se aplican a las colecciones de series de tiempo.
No se puede crear una vista desde un espacio de nombres de colección de buckets de series de tiempo (es decir, una colección con el prefijo
system.buckets).
Aislamiento de snapshot
Las operaciones de lectura en colecciones de series de tiempo con nivel de consistencia de lectura "snapshot" garantizan aislamiento de snapshot solo en ausencia de operaciones concurrentes de descarte o cambio de nombre en colecciones durante la operación de lectura. Volver a crear una colección de series de tiempo en el mismo namespace con una configuración de granularidad diferente no produce un aislamiento completo de snapshot.