Я думал об использовании функции построения в TTL, но нелегко динамически менять дату истечения срока действия. Поскольку mongodb использует фоновую задачу, очищающую данные. Есть ли недостаток, который просто кодирует мою собственную функцию очистки, основанную на " > определенном_дате" и запускается один раз в день? Таким образом, я могу динамически изменять значение 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
, вы можете в любое время обновить это поле, чтобы динамически продлить или сократить срок службы документа.
Есть ли недостаток, который просто кодирует мою собственную функцию очистки, основанную на " > определенном_дате" и запускается один раз в день?
- Вам нужно закодировать, документировать и поддерживать его
- Удаление большого количества документов может быть дорогостоящим и привести к большому переупорядочению. Вероятно, полезно чаще выполнять очистку.
Минимизация числа индексов - это хорошо, но вопрос в том, действительно ли это стоит усилий. Только вы можете дать ответ на этот вопрос. Мой совет: начните с чего-то, что уже есть, если возможно, и придумайте что-то лучше, если и только если вам действительно нужно.