首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MongoDB - WiredTiger快照与锁定

MongoDB - WiredTiger快照与锁定
EN

Stack Overflow用户
提问于 2018-05-09 20:22:57
回答 1查看 1.6K关注 0票数 3

我并不完全理解(WiredTiger) MongoDB程序中这两个特性是如何相互关联的:

1) WiredTiger快照

2)数据锁定

如果每次使用WiredTiger引擎的读取操作在读取时都提供了数据库级的“快照”(以便创建一致性(C在ACID中)),那么为什么我们也需要锁定呢?让我们举个例子。

我在文档级别(读取操作)执行查询。好的,所以我知道我得到了数据库级别的快照,所以我的数据是一致的,即使另一个用户正在并发地写入同一文档,并对其进行更新。

那么,在这个文档上设置一个共享锁有什么用呢?在发布共享锁之前,它会阻止该文档上的所有写(独占)操作?当我同时阅读该文档时,如果我正在使用在读取时提供给我的文档的快照,那么在并发写入该文档时会有什么问题呢?为什么我会关心文件是否锁定在我的阅读操作期间?我已经从那个时间点得到了(一致的)数据,不是吗?

我显然错过了一个关键的概念..。有什么帮助吗?

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-09 21:10:31

读取操作将获得快照,这是正确的。当使用WiredTiger存储引擎时,MongoDB不会锁定单独的文档,无论是读还是写。相反,WiredTiger使用多版本并发控制( MVCC ).在执行文档更新时,只要文档具有与获取快照时相同的版本,该更新就会成功。如果没有,WiredTiger将返回一个错误(WT_ROLLBACK),指示更新有写冲突。在这种情况下,更新将中止,所有挂起的更改都将撤消。然后,MongoDB将透明地重试该操作。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50261447

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档