Skip to content

Latest commit

 

History

History
60 lines (33 loc) · 7.04 KB

File metadata and controls

60 lines (33 loc) · 7.04 KB

Índices TTL

NOTA

Si está eliminando documentos para ahorrar en costos de almacenamiento, considere Archivar en línea en MongoDB Atlas . Online Archive archiva automáticamente los datos a los que se accede con poca frecuencia en buckets S3 totalmente administrados para una distribución de datos rentable.

Los índices TTL son índices especiales de un solo campo que MongoDB puede usar para eliminar automáticamente documentos de una colección después de una cierta cantidad de tiempo o en una hora específica. La caducidad de los datos es útil para ciertos tipos de información, como datos de eventos generados por una máquina, registros e información de sesión, que solo necesitan persistir en una base de datos durante un período de tiempo finito.

Para crear un índice TTL, use el createIndex() método en un campo cuyo valor sea una fecha o una matriz que contenga valores de fecha , y especifique la expireAfterSeconds opción con el valor TTL deseado en segundos.

Por ejemplo, para crear un índice TTL en el lastModifiedDatecampo de la eventlogcolección, con un valor TTL de 3600segundos, use la siguiente operación en el mongoshell:

db.eventlog.createIndex( { "lastModifiedDate": 1 }, { expireAfterSeconds: 3600 } )

Comportamiento

Caducidad de datos

Los índices TTL caducan los documentos después de que haya pasado el número especificado de segundos desde el valor del campo indexado; es decir, el umbral de caducidad es el valor del campo indexado más el número especificado de segundos.

Si el campo es una matriz y hay varios valores de fecha en el índice, MongoDB usa el valor de fecha más bajo (es decir, el más antiguo) en la matriz para calcular el umbral de vencimiento.

Si el campo indexado en un documento no es una fecha o una matriz que contiene un valor de fecha, el documento no caducará.

Si un documento no contiene el campo indexado, el documento no caducará.

Eliminar operaciones

Un hilo en segundo plano mongodlee los valores del índice y elimina los documentos caducados de la colección.

Cuando el subproceso TTL está activo, verá operaciones de eliminación en la salida db.currentOp()o en los datos recopilados por el generador de perfiles de la base de datos .

Momento de la operación de eliminación

MongoDB comienza a eliminar los documentos caducados tan pronto como el índice termina de crearse en el principal . Para obtener más información sobre el proceso de generación de índices, consulte Generaciones de índices en colecciones pobladas .

El índice TTL no garantiza que los datos caducados se eliminarán inmediatamente después de su vencimiento. Puede haber un retraso entre el momento en que expira un documento y el momento en que MongoDB elimina el documento de la base de datos.

La tarea en segundo plano que elimina los documentos caducados se ejecuta cada 60 segundos . Como resultado, los documentos pueden permanecer en una colección durante el período entre el vencimiento del documento y la ejecución de la tarea en segundo plano.

Debido a que la duración de la operación de eliminación depende de la carga de trabajo de su mongodinstancia, los datos caducados pueden existir durante algún tiempo más allá del período de 60 segundos entre ejecuciones de la tarea en segundo plano.

Conjuntos de réplicas

En los miembros del conjunto de réplicas , el subproceso de fondo TTL solo elimina documentos cuando un miembro está en estado primario . El subproceso de fondo TTL está inactivo cuando un miembro está en estado secundario . Los miembros secundarios replican las operaciones de eliminación desde el primario.

Soporte para consultas

Un índice TTL admite consultas de la misma manera que lo hacen los índices que no son TTL.

Restricciones

  • Los índices TTL son índices de un solo campo. Los índices compuestos no admiten TTL e ignoran la expireAfterSecondsopción.
  • El _idcampo no admite índices TTL.
  • No puede crear un índice TTL en una colección limitada porque MongoDB no puede eliminar documentos de una colección limitada.
  • No se puede utilizar createIndex()para cambiar el valor expireAfterSecondsde un índice existente. En su lugar, utilice el collModcomando de la base de datos junto con el indexindicador de colección. De lo contrario, para cambiar el valor de la opción de un índice existente, primero debe eliminar el índice y volver a crearlo.
  • Si ya existe un índice de campo único que no es TTL para un campo, no puede crear un índice TTL en el mismo campo, ya que no puede crear índices que tengan la misma especificación de clave y difieran solo por las opciones. Para cambiar un índice de campo único que no sea TTL a un índice TTL, primero debe eliminar el índice y volver a crearlo con la expireAfterSecondsopción.