【问题标题】:MongoDB read documents within transactionMongoDB在事务中读取文档
【发布时间】:2021-08-15 06:00:24
【问题描述】:

假设我在 MongoDB 中执行以下操作列表

  • 开始会话
  • 为该会话启动事务
  • 对新文档运行 insert 命令
  • 对插入的文档集合运行find 命令
  • 提交事务
  • 结束会话

我知道在事务之外,在事务提交之前,第三步中完成的插入将不可见,但是在事务中,find 在第四步中运行会看到这个新文档还是会不是吗?

【问题讨论】:

    标签: mongodb transactions


    【解决方案1】:

    是的,事务性find 会看到插入到先前事务性insert 中的文档。您可以假设 Read your own writes 属性。


    每次启动事务时都会创建一个新快照。在事务之外,快照显然是不可见的:这是通过使用(如果您的事务涉及许多更新,则滥用)WiredTiger 缓存来完成的。这个缓存的结构是一棵树,类似于下面的1

    每个事务操作都表示为一个新的更新块,该更新块又可以链接到另一个更新块。

    外部操作仅查看非事务性树条目,而事务性操作查看在拍摄快照之前添加的所有条目 + 给定事务的更新块。

    我知道这是一个关于 MongoDB 如何管理事务原子性的非常简短的解释,但是如果您有兴趣了解更多,那么我建议您阅读我写的 report。在同一个存储库中,您可以找到一些 scenarios 来解决最典型的疑问。


    1:图片取自 Aly Cabral 关于How and when to use Multi-document transactions的演示文稿

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-13
      • 1970-01-01
      • 2018-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-11
      • 1970-01-01
      相关资源
      最近更新 更多