我有一个TTL索引的集合,配置为在一定时间后使文档过期。这些删除是否出现在oplog中?
答案 0 :(得分:2)
他们当然可以。 oplog的基本原则是记录需要填充到其他副本集成员的数据库更改的主要目的。
因此,需要记录每一个更改,以便其他成员可以读取此信息并自行“重播”这些更改,以保持状态一致。
所有TTL确实做的是在集合索引上放置一个标记,允许它由mongod
进程中的标准运行线程拾取。当此过程定期运行时,标记集合中具有超出指定限制的日期的所有项目都将使用标准.remove()
操作进行处理:
db.collection.remove({ "date": { "$lte": new Date( Date.now - ttlTime ) } })
正如您将看到的那种有效的操作(“序列化”)。
当然,这个线程也适用于在“PRIMARY”节点上运行,就像所有正常操作一样,这是所有“写”操作发生的地方。