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

时间:2010-06-06 05:36:40

标签: erlang couchdb

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

Document Update Handlers中所述,CouchDB 0.10及更高版本允许按需服务器端文档修改。

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

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

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

1 个答案:

答案 0 :(得分:11)

使用更新处理程序时仍可以进行更新冲突。

由于“往返时间”减少,更新冲突的可能性更低 但不是零。冲突会感觉正常:409响应代码 有了这个JSON:

{"error":"conflict","reason":"Document update conflict."}

我使用document update handler example成功触发了冲突, 并在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

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

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

更新可能会发生冲突以及验证失败(401 Unauthorized403 Forbidden等等。)