mongodb - mongodb的ttl集合有什么好处? vs 从管家那里清除数据?

标签 mongodb ttl

我一直在考虑使用内置 TTL 功能,但是动态更改过期日期并不容易。 由于 mongodb 正在使用后台任务清除数据。仅根据“> certain_date”编写我自己的清除功能并每天运行一次是否有任何缺点? 这样,我可以动态更改 TTL 值,并且此日期字段不必是单个索引。我可以将此字段作为复杂索引的一部分重用,以最大限度地减少索引数量。

最佳答案

有两种方法可以设置 expiration date on a TTL collection :

  1. 在全局级别,创建索引时
  2. 每个文档,作为文档中的一个字段

这些模式是专有的。

全局到期

如果您希望所有文档在创建后 3 个月过期,请使用第一种模式,通过创建如下索引:

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

如果您稍后决定将到期时间更改为“4 个月”,您只需使用 collMod 更新 expireAfterSeconds 值。命令:

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

每个文档的有效期

如果您想让每个文档都有自己的到期日期,请将特定日期保存在“expiresAt”之类的字段中,然后使用以下命令索引您的集合:

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

关于mongodb - mongodb的ttl集合有什么好处? vs 从管家那里清除数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19106684/

相关文章:

javascript - 无法使用 HTTP Put 更新 MongoDB 集合内的对象?

redis - 哪些 maxmemory 策略允许在 Redis 中过期?

redis - 我的 redis key 不会过期

mongodb - MongoDB Java API 中的 TDocument 是什么以及在哪里

javascript - Node.js/MongoDB : can't catch error from Cursor. 映射回调在此回调之外

javascript - 每第二次运行都会抛出 : MongoError: Topology was destroyed

java - java插入mongodb文档后​​获取对象id

java - Aerospike TTL 监听器

caching - 如何更改 Gradle 工件缓存的生存时间?

java - Guava Cache expireAfterWrite 仅适用于使用 getIfPresent 吗?