TyR*_*den 2 database concurrency mongodb wiredtiger
我并不完全理解这两个功能在(WiredTiger)MongoDB程序中如何相互关联:
1)WiredTiger快照
2)数据锁定
如果使用WiredTiger引擎的每次读取操作在读取时都提供了数据库级别"快照"(以便创建一致性(ACID中的C),为什么我们还需要锁定?让我们使用一个示例.
我在文档级别执行查询(读取操作).好的,所以我知道我得到了数据库级别的快照,所以我的数据是一致的,即使另一个用户同时写入同一个文档,更新它.
那么在这一点上,在该文档上使用Shared-Lock有什么用处,它会阻止对该文档的所有写入(独占)操作,直到发布共享锁定为止?在我阅读文档的同时写入该文档可能会出现什么问题,如果我实际上使用了在阅读时提供给我的文档快照?为什么我会关心文件在阅读操作期间是否被锁定?我已经从那个时间点得到了(一致的)数据,不是吗?
我显然在这里错过了一个关键概念......任何帮助?
谢谢.
小智 6
你是对的,读取操作将获取快照.当使用WiredTiger存储引擎,MongoDB的确实不为任何读取或写入锁定单个文件.相反,WiredTiger使用多版本并发控制MVCC.执行文档更新时,只要文档的版本与获取快照时的版本相同,该更新就会成功.如果不是,WiredTiger将返回错误(WT_ROLLBACK),指示更新有写入冲突.在这种情况下,更新将中止,所有挂起的更改将被撤消.然后MongoDB将透明地重试该操作.
| 归档时间: |
|
| 查看次数: |
673 次 |
| 最近记录: |