CouchDb 和数据写入
据我了解,CouchDb 永远不会覆盖记录,而是使用新的 _rev 创建一个新文档。在这种情况下会发生什么?
- 用户 A 读取文档
- 用户 B 读取同一个文档
- 用户 A 更新文档
- 用户 B 更新文档
在这种情况下,用户 A 的更改不会丢失吗?
As I understand it CouchDb never overwrites a record but instead creates a new document with a new _rev. What happens in this scenario?
- User A reads a document
- User B reads the same document
- User A updates the document
- User B updates the document
Aren't User A's changes lost in this scenario?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
不,用户 B 将收到 409 错误,因为转速不再匹配。为了让用户 B 提交其文档,他们需要重新获取文档,以便获得最新的文档修订版本。
这称为乐观锁定,旨在专门防止您遇到的问题。
没有什么可以阻止用户 B 践踏用户 A 的文档,但现在他们通过必须重新获取文档并使用新的 _rev 参数更加意识到这一点。
No, instead User B will get a 409 error since the revs will no longer match. For User B to commit their document, they will need refetch the document so they can get the latest document revision.
This is called Optimistic Locking, and is designed to specifically prevent the problem that you are seeing.
There's nothing stopping User B from stomping on User A's document, but now they are more conscious of it by having to refetch the document and use the new _rev parameter.