CouchDB-Ektorp中的批量更新 - 不应该更新冲突更新?

时间:2012-06-27 03:00:31

标签: couchdb ektorp

我一直在使用Ektorp(1.3.0)框架连接到我的CouchDB数据库。 但是当出现更新冲突时会出现问题。 我使用方法executeAllOrNothing进行批量更新。如文档所述,此方法(以及HTTP API等效_bulk_docs?all_or_nothing":true)不会对冲突进行任何检查。来自HTTP API docs

  

但是,如果ID为0的文档存在冲突,则两个版本都会发生冲突   存在于数据库中,随意选择哪个   出现在视图中。您可以使用GET来检查此状态   ?冲突=真

此外:

  

依赖此功能的应用程序应该能够   容忍一些文件丢失或处于冲突状态,直到   可以解决冲突。

然而,Ektorp的方法javadocs说:

  

列表(返回)仅包含具有从CouchDB返回的任何类型的错误代码的文档的条目。即如果一切顺利完成,列表将为空。

我发现事实并非如此。发生冲突时,Ektorp仍会返回一个空列表。我发现获取失败操作列表的唯一方法是使用executeBulk而不是executeAllOrNothing,但这并不令人满意,因为我需要将其作为交易。

有什么方法可以让我知道对executeAllOrNothing的调用是否成功,如果没有,那么哪些文档存在冲突问题(不再重复使用GET with conflicts=true作为我可能会一次尝试保存数千个文档,所以这是不切实际的)?

1 个答案:

答案 0 :(得分:0)

您提到的ektorp doc中描述的行为不是CouchDB行为。使用all_or_nothing:true CouchDB只会在数组中返回成功对象(okid和新rev),而不会显示它们是否存在冲突。

因此,这种行为(从该数组中删除成功的对象)是ektorp必须(意味着)做的事情。所以这听起来像ektorp中的一个错误。您应该看到their github project有关如何举报错误的信息。