我们是Couch DB的新手,不确定如何使用文档修订号。特别是,我们不确定客户端应用程序是否应该知道此修订号,以及是否必须将其与每个保存请求一起发送回服务器以确保连续性。
我们的情况是我们在CouchDB和客户端应用程序之间有一个NodeJS服务器(用ActionScript 3编写的游戏)。游戏世界被分解为网格,并且在短时间内可能会对单个图块进行多处更改,每个更改都会产生新的保存请求。由于无法保证两个同时发出的请求将以特定顺序到达服务器,因此我们需要确保仅在数据库数据比数据库中已有的数据更新时才保存该数据块。
我们正在考虑使用附加到每个文档的自定义事务ID,但我们担心我们可能只是做错了,或者缺少CouchDB的一些基本行为(即“正确的方法”)
答案 0 :(得分:5)
是的,每次保存都包含_rev
属性。来自http://wiki.apache.org/couchdb/HTTP_Document_API#PUT
要更新现有文档,您还会发出PUT请求。在这种情况下,JSON主体必须包含_rev属性,这使得CouchDB可以知道编辑所基于的修订版本。如果当前存储在数据库中的文档的修订版本不匹配,则返回409冲突错误。
有关冲突管理的信息,请参阅:http://guide.couchdb.org/editions/1/en/conflicts.html#working