TTL 索引可以删除当前锁定在长时间运行的事务中的文档吗?

问题描述 投票:0回答:1

TTL索引应用于mongodb集合。如果

A = true
,则指示过期后删除文档。

此集合的文档当前被锁定在长时间运行的事务中。文档在交易时超出了 TTL。交易开始前

A
的值为
true
。当交易开始时,A的值被修改为false。

因此,当交易完成并且该文档的锁定解除后,则

A = false

交易完成后这个文档会被TTL删除吗?

mongodb transactions mongodb-indexes
1个回答
0
投票

这听起来像是一个竞争条件。

当 TTL Worker 运行时,它将扫描索引,并删除过期文档。

假设

A = true
是部分索引过滤器,如果文档已经被事务修改过,但事务尚未提交,则有2种可能:

  1. TTL删除会遇到写入冲突,文档不会被删除。当交易完成后,该文档将不再位于 TTL 索引中,因此不会再次被考虑。
  2. 事务将因写入冲突而中止,并且文档将被删除。

如果 TTL 运行在事务修改文档之前到达文档,则该文档将被删除,并且再次有 2 种可能性,具体取决于事务内更新的完成方式:

  1. 事务像以前一样因写入冲突而中止
  2. 更新操作没有找到匹配的文档,不做任何修改就成功,事务能够成功。
© www.soinside.com 2019 - 2024. All rights reserved.