Estamos utilizando AWS DocumentDB v3.6.0. Queremos usar la funcionalidad de índice TTL de MongoDB para eliminar elementos después de un período de tiempo. Los artículos se actualizan con frecuencia hasta que ocurre un evento especial. Por lo tanto, debemos actualizar el campo ttl con frecuencia.
db.test.insertOne({_id: "12345",ttl: new Date()}) db.test.createIndex({ttl:-1},{expireAfterSeconds: 3600}) db.stats() produce el siguiente resultado esperado:
[ { "avgObjSize": 51, "capped": false, "count": 1, "indexSizes": { "_id_": 16384, "ttl_-1": 16384 }, "nindexes": 2, "ns": "db.test", "ok": 1, "size": 51, "storageSize": 16384, "totalIndexSize": 32768 } ] Sin embargo, si actualizamos la marca de tiempo ttl de nuestro elemento, el índice ttl_-1 sigue creciendo.
for (let i = 1; i < 1000; i++) { db.test.updateOne({ _id: "12345" }, { $set: { ttl: new Date() } }); } db.stats() ahora produce:
[ { "avgObjSize": 51, "capped": false, "count": 1, "indexSizes": { "_id_": 16384, "ttl_-1": 90112 }, "nindexes": 2, "ns": "db.test", "ok": 1, "size": 51, "storageSize": 65536, "totalIndexSize": 106496 } ] Como puede ver, el índice ttl_-1 es más grande que el índice _id_ aunque todavía tenemos un solo elemento. ¿Por qué?
Las sobrescrituras de datos en el lugar tienen varios problemas. Por ejemplo, si realiza una escritura de este tipo y se queda sin energía, no solo se perderán los nuevos datos, sino que también terminará destruyendo los datos que ya estaban en la base de datos.
Por esta razón, no es de extrañar que cualquier escritura asigne nuevo espacio de almacenamiento.
1000 escrituras (¿90 KB de datos?) no son suficientes para concluir que el índice está creciendo sin límites. Pruebe con un millón, o la cantidad que necesite para obtener el índice superior, por ejemplo, 64 MB.
¿Has intentado soltar y recrear el índice? En su ejemplo, el índice _id_ solo se inserta (nunca se actualiza) y no experimenta la renovación que experimenta el índice ttl_-1. Sería interesante ver el antes y el después en su ejemplo simple, así como en la base de datos DocumentDB de tamaño completo.