我不完全理解这两个功能在(WiredTiger)MongoDB 程序中如何相互关联:
1) WiredTiger 快照
2) 数据锁定
如果使用 WiredTiger 引擎的每个读取操作在读取时都提供了数据库级别的“快照”(以创建一致性(ACID 中的 C),那么为什么我们还需要锁定?让我们举个例子。
我在文档级别执行查询(读取操作)。好的,所以我知道我得到了数据库级别的快照,因此即使另一个用户同时写入同一个文档并更新它,我的数据也是一致的。
那么在这一点上,在该文档上设置共享锁有什么用,它会阻止对该文档的所有写入(独占)操作,直到共享锁被释放?如果我实际上使用的是在阅读时提供给我的文档快照,那么在我阅读该文档的同时写入该文档可能会出现什么问题?为什么我会关心在我的读取操作期间文档是否被锁定?我已经有了那个时间点的(一致的)数据,不是吗?
我显然在这里错过了一个关键概念......有什么帮助吗?
谢谢。