对于不存在的项目,cloudant PUT与rev的预期行为是什么?

时间:2017-03-07 16:53:36

标签: cloudant

在Cloudant数据库中,对于在定义修订版本时不存在的文档调用PUT的预期行为是什么?

文档说:

  

要更新(或创建)文档,请使用更新的PUT请求   JSON内容和最新的_rev值(创建新的不需要)   文件)到https://$USERNAME.cloudant.com/$DATABASE/$DOCUMENT_ID。

我曾假设如果我确实提供了修订版,那么db会检测到它不匹配并拒绝该请求。在我的测试用例中,我的行为不一致。大多数情况下,我得到预期的409,文档更新冲突。但是,有时,文档最终会被创建(201),并被分配下一个版本。

我的测试包括创建文档,然后使用该修订版更新不同的文档。

  1. POST https:// {url} / {db} {_ id:“T1”} - 存储返回的修订
  2. PUT https:// {url} / {db} / T2 {_rev:}
  3. 因此,如果返回的修订版本类似于1-79c389ffdbcfe6c33ced242a13f2b6f2,那么在PUT成功的情况下,它将返回下一个修订版(如2-76054ab954c0ef41e9b82f732116154b)。

    修改

    如果我将测试简化为一步,我也会得到不同的结果。

    1. PUT https:// {url} / {db} / DoesNotExist {_rev:“1-fffffffffffffffffffffffffffffffff”}

1 个答案:

答案 0 :(得分:1)

Cloudant是一个最终一致的数据库。你看到了它的影响。大多数情况下,群集有时间在两个api调用之间达到一致状态,并且您将获得预期的更新冲突。有时您会遇到不一致窗口,因为您的第一个呼叫尚未在群集周围复制并且您遇到了另一个节点。这是一个有价值的见解:阅读你的写作是不安全的。