CouchDB文档更新处理程序是否会发生更新冲突?

Jas*_*ith 9 erlang couchdb

使用更新处理程序时修订版本的可能性有多大?在编写强大的更新函数时,我是否应该关注冲突处理代码?

如文档更新处理程序中所述,CouchDB 0.10及更高版本允许按需服务器端文档修改.

更新处理程序可以处理非JSON格式; 但其他主要特征是:

  • 任意复杂的文档修改代码的HTTP前端
  • 不需要为所有可能的客户端编写类似的代码 - 一种DRY架构
  • 执行速度更快,不太可能发生修订冲突

我不清楚第三点.在本地执行,更新处理程序运行速度更快,延迟更低.但在争用率较高的情况下,这并不能保证成功更新.或者更新处理程序是否保证成功更新?

Jas*_*ith 11

使用更新处理程序时仍可能发生更新冲突.

由于"往返时间"减少,更新冲突的可能性较低,但不是零.冲突会感觉正常:使用此JSON的409响应代码:

{"error":"conflict","reason":"Document update conflict."}
Run Code Online (Sandbox Code Playgroud)

我使用文档更新处理程序示例成功触发了冲突,并在shell中连续两次运行curl.

curl -v -X PUT \
http://localhost:5984/db/_design/app/_update/accumulate/my_doc?amount=10 \
& curl -X PUT \
  http://localhost:5984/db/_design/app/_update/accumulate/my_doc?amount=1
Run Code Online (Sandbox Code Playgroud)

其中一个卷曲响应(随机)是201,另一个是409.

文档更新处理程序不会从根本上改变CouchDB

更新是受冲突,以及验证失败(401 Unauthorized, 403 Forbidden,等)

  • 它更容易:使用复制,CouchDB的主要功能之一,你很容易遇到冲突. (2认同)