TTL索引应用于mongodb集合。如果
A = true
,则指示过期后删除文档。
此集合的文档当前被锁定在长时间运行的事务中。文档在交易时超出了 TTL。交易开始前
A
的值为 true
。当交易开始时,A的值被修改为false。
因此,当交易完成并且该文档的锁定解除后,则
A = false
。
交易完成后这个文档会被TTL删除吗?
这听起来像是一个竞争条件。
当 TTL Worker 运行时,它将扫描索引,并删除过期文档。
假设
A = true
是部分索引过滤器,如果文档已经被事务修改过,但事务尚未提交,则有2种可能:
如果 TTL 运行在事务修改文档之前到达文档,则该文档将被删除,并且再次有 2 种可能性,具体取决于事务内更新的完成方式: