Какая польза от коллекции mongodb ttl? против очистки данных от экономки?

Я думал об использовании функции построения в TTL, но нелегко динамически менять дату истечения срока действия. Поскольку mongodb использует фоновую задачу, очищающую данные. Есть ли недостаток, который просто кодирует мою собственную функцию очистки, основанную на " > определенном_дате" и запускается один раз в день? Таким образом, я могу динамически изменять значение TTL, и это поле даты не должно быть проиндексировано. Я могу повторно использовать это поле как часть комплексной индексации, чтобы минимизировать количество индексов.

Ответ 1

Есть два способа установить дату истечения в коллекции TTL:

  • на глобальном уровне при создании индекса
  • на документ, как поле в документе

Эти режимы являются эксклюзивными.

Глобальный срок действия

Если вы хотите, чтобы все ваши документы истекали через 3 месяца после создания, используйте первый режим, создав индекс следующим образом:

db.events.ensureIndex({ "createdAt": 1 }, { expireAfterSeconds: 7776000 })

Если позднее вы решите изменить срок действия на "4 месяца", вам просто нужно обновить значение expireAfterSeconds, используя команду collMod

db.runCommand({"collMod" : "events" , "index" : { "keyPattern" : {"createdAt" : 1 } , "expireAfterSeconds" : 10368000 } })

Срок действия документа на бумаге

Если вы хотите, чтобы каждый документ имел свою дату истечения срока действия, сохраните конкретную дату в поле типа "expiresAt", а затем проиндексируйте свою коллекцию с помощью:

db.events.ensureIndex({ "expiresAt": 1 }, { expireAfterSeconds: 0 })

Ответ 2

Я думал об использовании функции сборки в TTL, но нелегко динамически менять дату истечения срока действия

Это странно. Почему это будет проблемой? Если в вашем документе есть поле Expires, вы можете в любое время обновить это поле, чтобы динамически продлить или сократить срок службы документа.

Есть ли недостаток, который просто кодирует мою собственную функцию очистки, основанную на " > определенном_дате" и запускается один раз в день?

  • Вам нужно закодировать, документировать и поддерживать его
  • Удаление большого количества документов может быть дорогостоящим и привести к большому переупорядочению. Вероятно, полезно чаще выполнять очистку.

Минимизация числа индексов - это хорошо, но вопрос в том, действительно ли это стоит усилий. Только вы можете дать ответ на этот вопрос. Мой совет: начните с чего-то, что уже есть, если возможно, и придумайте что-то лучше, если и только если вам действительно нужно.