CouchDb和数据写入

Joh*_*ore 3 couchdb b-tree

据我所知,CouchDb永远不会覆盖记录,而是使用新的_rev创建一个新文档.在这种情况下会发生什么?

  1. 用户A读取文档
  2. 用户B读取同一文档
  3. 用户A更新文档
  4. 用户B更新文档

在这种情况下,用户A的更改是否丢失?

Wil*_*ung 6

不,相反,用户B将获得409错误,因为转速将不再匹配.对于用户B提交其文档,他们将需要重新获取文档,以便他们可以获得最新的文档修订.

这称为乐观锁定,旨在专门防止您看到的问题.

没有什么可以阻止用户B踩踏用户A的文档,但现在他们通过重新获取文档并使用新的_rev参数更加清楚它.

  • 可以允许用户B的更改,以便至少B的客户端可以成功存储一次往返的更新.但是,这会在CouchDB中导致*冲突*,某些客户端软件必须解决这个问题.但正如Will所说,在大多数情况下,人们早早失败并让B(或B的软件)重新运行查询 (2认同)