在Cloudant数据库中,对于在定义修订版本时不存在的文档调用PUT的预期行为是什么?
文档说:
要更新(或创建)文档,请使用更新的PUT请求 JSON内容和最新的_rev值(创建新的不需要) 文件)到https://$USERNAME.cloudant.com/$DATABASE/$DOCUMENT_ID。
我曾假设如果我确实提供了修订版,那么db会检测到它不匹配并拒绝该请求。在我的测试用例中,我的行为不一致。大多数情况下,我得到预期的409,文档更新冲突。但是,有时,文档最终会被创建(201),并被分配下一个版本。
我的测试包括创建文档,然后使用该修订版更新不同的文档。
因此,如果返回的修订版本类似于1-79c389ffdbcfe6c33ced242a13f2b6f2,那么在PUT成功的情况下,它将返回下一个修订版(如2-76054ab954c0ef41e9b82f732116154b)。
如果我将测试简化为一步,我也会得到不同的结果。
答案 0 :(得分:1)
Cloudant是一个最终一致的数据库。你看到了它的影响。大多数情况下,群集有时间在两个api调用之间达到一致状态,并且您将获得预期的更新冲突。有时您会遇到不一致窗口,因为您的第一个呼叫尚未在群集周围复制并且您遇到了另一个节点。这是一个有价值的见解:阅读你的写作是不安全的。